From a9e3ea40a583700282addee3d4abbe3dc1fe6b35 Mon Sep 17 00:00:00 2001 From: Kevin McGoldrick Date: Wed, 23 Oct 2019 18:43:40 -0700 Subject: [PATCH] Release Version 2.3.1 * Security Issue Resolved [CVE-2017-12629, CVE-2019-0199, CVE-2019-0232] * Upgrade lucene to 8.0.0 * upgrade tomcat-embed-core [CVE-2019-0199, CVE-2019-0232] * Async kill/stop instances (#69) * Thread start behavior (#70) * Create user threads only as they are being started. Rather than all in advance. * Replace killed threads throughout the duration of the test at the defined ramp-rate * Library updates & Cleanup * Java 8 language migration aids (intellij) * patch for [CVE-2019-12402] * #79: Path creation for `agent-standalone/run.sh` addresses issue. (#82) * Refactored creation of `start.sh`, `stop.sh`, `agent-standalone/run.sh' to use heredocs in favor of `echo`. Easier to read and maintain. * update rsyntaxtextarea to 3.0.4 * increment version [2.3.1] --- .travis.yml | 2 +- agent/agent_common/pom.xml | 20 +- .../com/intuit/tank/http/BaseRequest.java | 1 - .../http/multipart/MultiPartRequestTest.java | 5 +- agent/agent_standalone/pom.xml | 2 +- agent/agent_standalone_pkg/pom.xml | 2 +- agent/agent_startup/pom.xml | 2 +- agent/agent_startup_pkg/pom.xml | 2 +- agent/apiharness/pom.xml | 44 +- .../com/intuit/tank/harness/APIMonitor.java | 1 - .../intuit/tank/harness/APITestHarness.java | 129 +- .../intuit/tank/harness/CommandListener.java | 4 +- .../intuit/tank/harness/TestPlanStarter.java | 102 +- .../com/intuit/tank/harness/UserTracker.java | 7 +- .../harness/logging/ThreadLocalLogEvent.java | 1 - .../ssl/EasySSLProtocolSocketFactory.java | 213 - .../harness/ssl/EasyX509TrustManager.java | 115 - agent/apiharness_pkg/pom.xml | 2 +- agent/http_client_3/pom.xml | 2 +- agent/http_client_4/pom.xml | 2 +- agent/http_client_5/pom.xml | 2 +- agent/pom.xml | 2 +- all-in-one.sh | 57 +- api/pom.xml | 17 +- api/src/test/resources/settings.xml | 558 + buildspec.yml | 2 +- data_access/pom.xml | 2 +- .../java/com/intuit/tank/dao/DataFileDao.java | 4 +- .../java/com/intuit/tank/dao/ScriptDao.java | 1 - data_model/pom.xml | 19 +- doc/doc_xslt/pom.xml | 2 +- doc/jdocbook_style/pom.xml | 2 +- doc/pom.xml | 2 +- doc/tank_installation_guide/pom.xml | 2 +- doc/tank_user_guide/pom.xml | 2 +- harness_data/pom.xml | 2 +- mail/pom.xml | 12 +- pom.xml | 179 +- proxy-parent/WebConversation/pom.xml | 2 +- .../com/intuit/tank/util/HeaderParser.java | 6 +- proxy-parent/owasp-proxy/pom.xml | 20 +- .../src/main/java/org/owasp/proxy/Main.java | 17 +- .../java/org/owasp/proxy/daemon/Proxy.java | 4 +- ...ConversationServiceHttpRequestHandler.java | 5 +- .../ssl/AutoGeneratingContextSelector.java | 10 +- .../ssl/DefaultClientContextSelector.java | 9 +- .../java/org/owasp/proxy/util/Base64.java | 103 +- .../owasp/proxy/util/PacProxySelector.java | 7 +- proxy-parent/pom.xml | 2 +- proxy-parent/proxy-extension/pom.xml | 21 +- .../com/intuit/tank/proxy/EmbeddedProxy.java | 16 +- .../main/java/com/intuit/tank/proxy/Main.java | 17 +- .../settings/ui/GeneralInclusionPanel.java | 4 +- .../proxy/settings/ui/ProxyConfigDialog.java | 4 +- proxy-parent/proxy_pkg/pom.xml | 2 +- reporting/api/pom.xml | 2 +- reporting/db/pom.xml | 2 +- .../databases/AmazonSimpleDatabase.java | 4 +- .../databases/MetricsCalculator.java | 6 +- .../reporting/db/DatabaseResultsReader.java | 6 +- reporting/local/pom.xml | 2 +- .../tank/reporting/local/ResultsStorage.java | 12 +- reporting/pom.xml | 7 +- reporting/rest/pom.xml | 2 +- rest/api/agent/pom.xml | 2 +- rest/api/automation/pom.xml | 2 +- rest/api/cloud/pom.xml | 2 +- rest/api/common/pom.xml | 2 +- rest/api/datafile/pom.xml | 9 +- rest/api/filter/pom.xml | 2 +- rest/api/job/pom.xml | 2 +- rest/api/pom.xml | 11 +- rest/api/project/pom.xml | 2 +- rest/api/reporting/pom.xml | 2 +- rest/api/script/pom.xml | 2 +- rest/api/user/pom.xml | 2 +- rest/client/agent/pom.xml | 2 +- rest/client/automation/pom.xml | 2 +- rest/client/cloud/pom.xml | 2 +- rest/client/common/pom.xml | 2 +- rest/client/datafile/pom.xml | 2 +- rest/client/filter/pom.xml | 2 +- rest/client/job/pom.xml | 2 +- rest/client/pom.xml | 2 +- rest/client/project/pom.xml | 2 +- rest/client/reporting/pom.xml | 2 +- rest/client/script/pom.xml | 2 +- .../client/v1/script/ScriptServiceClient.java | 2 - rest/client/user/pom.xml | 2 +- rest/pom.xml | 16 +- rest/service/agent/pom.xml | 2 +- rest/service/automation/pom.xml | 2 +- .../v1/automation/AutomationServiceV1.java | 8 +- rest/service/cloud/pom.xml | 2 +- .../service/impl/v1/cloud/JobController.java | 4 +- rest/service/common/pom.xml | 6 +- rest/service/datafile/pom.xml | 2 +- .../impl/v1/datafile/DataFileServiceV1.java | 6 +- rest/service/filter/pom.xml | 2 +- rest/service/job/pom.xml | 2 +- rest/service/pom.xml | 2 +- rest/service/project/pom.xml | 2 +- rest/service/reporting/pom.xml | 2 +- .../service/impl/v1/report/FileReader.java | 10 +- .../impl/v1/report/ReportServiceV1.java | 12 +- rest/service/script/pom.xml | 2 +- .../impl/v1/script/ScriptServiceV1.java | 6 +- rest/service/user/pom.xml | 2 +- script_processor/pom.xml | 18 +- search/document_util/pom.xml | 7 +- .../tank/search/util/FieldSearchParam.java | 9 +- .../tank/search/util/MultiSearchParam.java | 6 +- .../search/util/MustNotFieldSearchParam.java | 6 +- .../tank/search/util/SearchConstants.java | 2 +- .../intuit/tank/search/util/SearchQuery.java | 21 - .../intuit/tank/search/util/SearchUtils.java | 8 +- .../intuit/tank/search/util/TankAnalyzer.java | 9 +- .../search/util/FieldSearchParamTest.java | 2 +- .../util/MustNotFieldSearchParamTest.java | 4 +- .../tank/search/util/SearchQueryTest.java | 11 - .../tank/search/util/TankAnalyzerTest.java | 11 +- search/lucene_indexer/pom.xml | 2 +- .../tank/search/lucene/LuceneService.java | 12 +- .../tank/search/lucene/LuceneServiceTest.java | 10 +- search/pom.xml | 2 +- search/script_search/pom.xml | 2 +- .../search/script/ScriptSearchService.java | 96 +- tank_common/pom.xml | 2 +- tank_vmManager/pom.xml | 2 +- .../workLoads/WorkLoadFactory.java | 13 +- .../intuit/tank/vmManager/AgentWatchdog.java | 5 +- .../tank/vmManager/CloudWatchObserver.java | 12 +- .../intuit/tank/vmManager/VMTrackerImpl.java | 2 +- .../environment/IEnvironmentInstance.java | 12 +- .../vmManager/environment/VMChannelImpl.java | 2 +- .../environment/amazon/AmazonInstance.java | 110 +- test_support/pom.xml | 30 +- tools/agent_debugger/pom.xml | 2 +- .../tank/tools/debugger/ActionProducer.java | 17 +- .../tools/debugger/AgentDebuggerFrame.java | 87 +- .../tank/tools/debugger/AppletLauncher.java | 4 +- .../tank/tools/debugger/FilterComboBox.java | 4 +- .../tools/debugger/FindReplaceDialog.java | 7 +- .../tools/debugger/ScriptErrorViewDialog.java | 4 +- .../tank/tools/debugger/SelectDialog.java | 12 +- .../tank/tools/debugger/StepDialog.java | 4 +- .../tank/tools/debugger/VariableDialog.java | 4 +- .../tank/tools/debugger/VariablesPanel.java | 4 +- .../tank/tools/debugger/XMlViewDialog.java | 33 +- .../main/java/org/fife/io/DocumentReader.java | 391 +- .../main/java/org/fife/io/UnicodeReader.java | 488 +- .../main/java/org/fife/io/UnicodeWriter.java | 486 +- .../java/org/fife/print/RPrintUtilities.java | 1059 +- .../AbstractJFlexCTokenMaker.java | 452 +- .../AbstractJFlexTokenMaker.java | 57 +- .../rsyntaxtextarea/AbstractTokenMaker.java | 100 +- .../AbstractTokenMakerFactory.java | 201 +- .../rsyntaxtextarea/ActiveLineRangeEvent.java | 101 +- .../ActiveLineRangeListener.java | 60 +- .../ChangeableColorHighlightPainter.java | 77 - .../rsyntaxtextarea/CodeTemplateManager.java | 795 +- .../DefaultOccurrenceMarker.java | 112 + .../fife/ui/rsyntaxtextarea/DefaultToken.java | 387 - .../rsyntaxtextarea/DefaultTokenFactory.java | 287 +- .../DefaultTokenMakerFactory.java | 133 +- .../rsyntaxtextarea/DefaultTokenPainter.java | 279 + .../ui/rsyntaxtextarea/DocumentRange.java | 192 +- .../fife/ui/rsyntaxtextarea/ErrorStrip.java | 1583 +- .../ui/rsyntaxtextarea/FileFileLocation.java | 211 +- .../fife/ui/rsyntaxtextarea/FileLocation.java | 255 +- .../FoldingAwareIconRowHeader.java | 251 + .../rsyntaxtextarea/HtmlOccurrenceMarker.java | 411 + .../org/fife/ui/rsyntaxtextarea/HtmlUtil.java | 136 + .../ui/rsyntaxtextarea/LinkGenerator.java | 49 + .../rsyntaxtextarea/LinkGeneratorResult.java | 53 + .../MarkOccurrencesHighlightPainter.java | 134 - .../MarkOccurrencesSupport.java | 535 +- .../rsyntaxtextarea/MatchedBracketPopup.java | 245 + .../ui/rsyntaxtextarea/OccurrenceMarker.java | 63 + .../ui/rsyntaxtextarea/ParserManager.java | 1407 +- .../rsyntaxtextarea/PopupWindowDecorator.java | 98 +- .../org/fife/ui/rsyntaxtextarea/RSTAView.java | 80 +- .../ui/rsyntaxtextarea/RSyntaxDocument.java | 1219 +- .../ui/rsyntaxtextarea/RSyntaxTextArea.java | 5597 +- .../RSyntaxTextAreaDefaultInputMap.java | 92 +- .../RSyntaxTextAreaEditorKit.java | 3524 +- .../RSyntaxTextAreaHighlighter.java | 717 +- .../ui/rsyntaxtextarea/RSyntaxTextAreaUI.java | 406 +- .../ui/rsyntaxtextarea/RSyntaxUtilities.java | 2459 +- .../fife/ui/rsyntaxtextarea/RTfToText.java | 450 +- .../fife/ui/rsyntaxtextarea/RtfGenerator.java | 962 +- .../ui/rsyntaxtextarea/RtfTransferable.java | 93 - .../SelectRegionLinkGeneratorResult.java | 61 + .../SquiggleUnderlineHighlightPainter.java | 206 +- .../org/fife/ui/rsyntaxtextarea/Style.java | 345 +- .../StyledTextTransferable.java | 110 + .../ui/rsyntaxtextarea/SyntaxConstants.java | 498 +- .../fife/ui/rsyntaxtextarea/SyntaxScheme.java | 1257 +- .../fife/ui/rsyntaxtextarea/SyntaxView.java | 1759 +- .../ui/rsyntaxtextarea/TextEditorPane.java | 1368 +- .../org/fife/ui/rsyntaxtextarea/Theme.java | 882 + .../org/fife/ui/rsyntaxtextarea/Token.java | 1369 +- .../fife/ui/rsyntaxtextarea/TokenFactory.java | 106 +- .../fife/ui/rsyntaxtextarea/TokenImpl.java | 956 + .../ui/rsyntaxtextarea/TokenIterator.java | 127 + .../fife/ui/rsyntaxtextarea/TokenMaker.java | 303 +- .../ui/rsyntaxtextarea/TokenMakerBase.java | 548 +- .../ui/rsyntaxtextarea/TokenMakerFactory.java | 230 +- .../org/fife/ui/rsyntaxtextarea/TokenMap.java | 530 +- .../ui/rsyntaxtextarea/TokenOrientedView.java | 93 +- .../fife/ui/rsyntaxtextarea/TokenPainter.java | 120 + .../fife/ui/rsyntaxtextarea/TokenTypes.java | 85 + .../fife/ui/rsyntaxtextarea/TokenUtils.java | 203 + .../ui/rsyntaxtextarea/URLFileLocation.java | 286 +- .../VisibleWhitespaceToken.java | 254 - .../VisibleWhitespaceTokenFactory.java | 65 - .../VisibleWhitespaceTokenPainter.java | 185 + .../ui/rsyntaxtextarea/WrappedSyntaxView.java | 2368 +- .../rsyntaxtextarea/WrappedSyntaxView2.java | 157 + .../fife/ui/rsyntaxtextarea/XMLParser.java | 127 - .../rsyntaxtextarea/XmlOccurrenceMarker.java | 232 + .../focusabletip/FocusableTip.java | 647 +- .../focusabletip/SizeGrip.java | 445 +- .../rsyntaxtextarea/focusabletip/TipUtil.java | 307 +- .../focusabletip/TipWindow.java | 572 +- .../folding/CurlyFoldParser.java | 338 + .../folding/DefaultFoldManager.java | 612 + .../fife/ui/rsyntaxtextarea/folding/Fold.java | 568 + .../folding/FoldCollapser.java | 106 + .../rsyntaxtextarea/folding/FoldManager.java | 242 + .../rsyntaxtextarea/folding/FoldParser.java | 41 + .../folding/FoldParserManager.java | 129 + .../ui/rsyntaxtextarea/folding/FoldType.java | 59 + .../folding/HtmlFoldParser.java | 412 + .../folding/JsonFoldParser.java | 163 + .../folding/LatexFoldParser.java | 109 + .../folding/LispFoldParser.java | 35 + .../folding/NsisFoldParser.java | 158 + .../folding/XmlFoldParser.java | 150 + .../folding/YamlFoldParser.java | 133 + .../modes/AbstractMarkupTokenMaker.java | 77 +- .../modes/ActionScriptTokenMaker.flex | 39 +- .../modes/ActionScriptTokenMaker.java | 3960 +- .../modes/AssemblerX86TokenMaker.flex | 40 +- .../modes/AssemblerX86TokenMaker.java | 3648 +- .../modes/BBCodeTokenMaker.flex | 29 +- .../modes/BBCodeTokenMaker.java | 1347 +- .../modes/CPlusPlusTokenMaker.flex | 72 +- .../modes/CPlusPlusTokenMaker.java | 4599 +- .../rsyntaxtextarea/modes/CSSTokenMaker.flex | 475 +- .../rsyntaxtextarea/modes/CSSTokenMaker.java | 2063 +- .../modes/CSharpTokenMaker.flex | 39 +- .../modes/CSharpTokenMaker.java | 3142 +- .../ui/rsyntaxtextarea/modes/CTokenMaker.flex | 50 +- .../ui/rsyntaxtextarea/modes/CTokenMaker.java | 4081 +- .../modes/ClojureTokenMaker.flex | 390 +- .../modes/ClojureTokenMaker.java | 4097 +- .../rsyntaxtextarea/modes/CsvTokenMaker.flex | 283 + .../rsyntaxtextarea/modes/CsvTokenMaker.java | 723 + .../rsyntaxtextarea/modes/DTokenMaker.flex} | 540 +- .../ui/rsyntaxtextarea/modes/DTokenMaker.java | 1949 + .../rsyntaxtextarea/modes/DartTokenMaker.flex | 660 + .../rsyntaxtextarea/modes/DartTokenMaker.java | 2176 + .../modes/DelphiTokenMaker.flex | 39 +- .../modes/DelphiTokenMaker.java | 3206 +- .../modes/DockerTokenMaker.flex} | 184 +- .../modes/DockerTokenMaker.java | 764 + .../rsyntaxtextarea/modes/DtdTokenMaker.flex | 347 + .../rsyntaxtextarea/modes/DtdTokenMaker.java | 835 + .../modes/FortranTokenMaker.flex | 40 +- .../modes/FortranTokenMaker.java | 1928 +- .../rsyntaxtextarea/modes/GoTokenMaker.flex} | 418 +- .../rsyntaxtextarea/modes/GoTokenMaker.java | 1523 + .../modes/GroovyTokenMaker.flex | 399 +- .../modes/GroovyTokenMaker.java | 8693 +-- .../rsyntaxtextarea/modes/HTMLTokenMaker.flex | 817 +- .../rsyntaxtextarea/modes/HTMLTokenMaker.java | 5281 +- .../modes/HostsTokenMaker.flex} | 146 +- .../modes/HostsTokenMaker.java | 679 + .../modes/HtaccessTokenMaker.flex | 500 + .../modes/HtaccessTokenMaker.java | 1506 + .../rsyntaxtextarea/modes/IniTokenMaker.flex} | 87 +- .../rsyntaxtextarea/modes/IniTokenMaker.java | 646 + .../rsyntaxtextarea/modes/JSPTokenMaker.flex | 1250 +- .../rsyntaxtextarea/modes/JSPTokenMaker.java | 11860 +++-- .../modes/JavaScriptTokenMaker.flex | 990 + .../modes/JavaScriptTokenMaker.java | 3245 +- .../rsyntaxtextarea/modes/JavaTokenMaker.flex | 318 +- .../rsyntaxtextarea/modes/JavaTokenMaker.java | 8136 +-- .../modes/JshintrcTokenMaker.java | 30 + .../rsyntaxtextarea/modes/JsonTokenMaker.flex | 316 + .../rsyntaxtextarea/modes/JsonTokenMaker.java | 805 + .../modes/LatexTokenMaker.flex | 275 + .../modes/LatexTokenMaker.java | 730 + .../rsyntaxtextarea/modes/LessTokenMaker.java | 52 + .../rsyntaxtextarea/modes/LispTokenMaker.flex | 39 +- .../rsyntaxtextarea/modes/LispTokenMaker.java | 2538 +- .../rsyntaxtextarea/modes/LuaTokenMaker.flex | 134 +- .../rsyntaxtextarea/modes/LuaTokenMaker.java | 1881 +- .../modes/MakefileTokenMaker.flex | 45 +- .../modes/MakefileTokenMaker.java | 1658 +- .../rsyntaxtextarea/modes/MxmlTokenMaker.flex | 122 +- .../rsyntaxtextarea/modes/MxmlTokenMaker.java | 5406 +- .../rsyntaxtextarea/modes/NSISTokenMaker.flex | 742 + .../rsyntaxtextarea/modes/NSISTokenMaker.java | 2976 ++ .../rsyntaxtextarea/modes/PHPTokenMaker.flex | 1051 +- .../rsyntaxtextarea/modes/PHPTokenMaker.java | 43937 +++++++++------- .../rsyntaxtextarea/modes/PerlTokenMaker.flex | 143 +- .../rsyntaxtextarea/modes/PerlTokenMaker.java | 4003 +- .../modes/PlainTextTokenMaker.flex | 31 +- .../modes/PlainTextTokenMaker.java | 1175 +- .../modes/PropertiesFileTokenMaker.flex | 33 +- .../modes/PropertiesFileTokenMaker.java | 1225 +- .../modes/PythonTokenMaker.flex | 39 +- .../modes/PythonTokenMaker.java | 2097 +- .../rsyntaxtextarea/modes/RubyTokenMaker.flex | 41 +- .../rsyntaxtextarea/modes/RubyTokenMaker.java | 3331 +- .../rsyntaxtextarea/modes/SASTokenMaker.flex | 39 +- .../rsyntaxtextarea/modes/SASTokenMaker.java | 2898 +- .../rsyntaxtextarea/modes/SQLTokenMaker.flex | 44 +- .../rsyntaxtextarea/modes/SQLTokenMaker.java | 2182 +- .../modes/ScalaTokenMaker.flex | 66 +- .../modes/ScalaTokenMaker.java | 1890 +- .../rsyntaxtextarea/modes/TclTokenMaker.flex | 39 +- .../rsyntaxtextarea/modes/TclTokenMaker.java | 2052 +- .../modes/TypeScriptTokenMaker.flex | 951 + .../modes/TypeScriptTokenMaker.java | 2236 + .../modes/UnixShellTokenMaker.java | 2204 +- .../modes/VisualBasicTokenMaker.flex} | 393 +- .../modes/VisualBasicTokenMaker.java | 1619 + .../modes/WindowsBatchTokenMaker.java | 1218 +- .../rsyntaxtextarea/modes/XMLTokenMaker.flex | 213 +- .../rsyntaxtextarea/modes/XMLTokenMaker.java | 1840 +- .../rsyntaxtextarea/modes/YamlTokenMaker.flex | 236 + .../rsyntaxtextarea/modes/YamlTokenMaker.java | 680 + .../parser/AbstractParser.java | 163 +- .../parser/DefaultParseResult.java | 263 +- .../parser/DefaultParserNotice.java | 527 +- .../parser/ExtendedHyperlinkListener.java | 52 +- .../rsyntaxtextarea/parser/ParseResult.java | 133 +- .../ui/rsyntaxtextarea/parser/Parser.java | 107 +- .../rsyntaxtextarea/parser/ParserNotice.java | 287 +- .../rsyntaxtextarea/parser/TaskTagParser.java | 269 +- .../rsyntaxtextarea/parser/ToolTipInfo.java | 160 +- .../ui/rsyntaxtextarea/parser/XmlParser.java | 229 + .../templates/AbstractCodeTemplate.java | 244 +- .../templates/CodeTemplate.java | 105 +- .../templates/StaticCodeTemplate.java | 476 +- .../ui/rtextarea/AbstractGutterComponent.java | 210 +- .../rtextarea/BackgroundPainterStrategy.java | 55 +- ...ufferedImageBackgroundPainterStrategy.java | 195 +- .../org/fife/ui/rtextarea/CaretStyle.java | 38 + .../rtextarea/ChangeableHighlightPainter.java | 800 +- .../fife/ui/rtextarea/ClipboardHistory.java | 136 + .../ui/rtextarea/ClipboardHistoryPopup.java | 443 + .../ColorBackgroundPainterStrategy.java | 186 +- .../fife/ui/rtextarea/ConfigurableCaret.java | 1288 +- .../org/fife/ui/rtextarea/FoldIndicator.java | 777 + .../java/org/fife/ui/rtextarea/Gutter.java | 1634 +- .../org/fife/ui/rtextarea/GutterIconInfo.java | 72 +- .../java/org/fife/ui/rtextarea/IconGroup.java | 494 +- .../org/fife/ui/rtextarea/IconRowHeader.java | 1740 +- .../ImageBackgroundPainterStrategy.java | 306 +- .../ui/rtextarea/LineHighlightManager.java | 421 +- .../org/fife/ui/rtextarea/LineNumberList.java | 1297 +- .../java/org/fife/ui/rtextarea/Macro.java | 773 +- .../java/org/fife/ui/rtextarea/RDocument.java | 65 + .../ui/rtextarea/RDocumentCharSequence.java | 122 + .../fife/ui/rtextarea/RTADefaultInputMap.java | 277 +- .../ui/rtextarea/RTATextTransferHandler.java | 939 +- .../java/org/fife/ui/rtextarea/RTextArea.java | 3229 +- .../org/fife/ui/rtextarea/RTextAreaBase.java | 2309 +- .../fife/ui/rtextarea/RTextAreaEditorKit.java | 5185 +- .../ui/rtextarea/RTextAreaHighlighter.java | 346 + .../org/fife/ui/rtextarea/RTextAreaUI.java | 1117 +- .../fife/ui/rtextarea/RTextScrollPane.java | 485 +- .../org/fife/ui/rtextarea/RUndoManager.java | 469 +- .../ui/rtextarea/RecordableTextAction.java | 472 +- .../fife/ui/rtextarea/RegExReplaceInfo.java | 142 +- .../org/fife/ui/rtextarea/SearchContext.java | 398 + .../org/fife/ui/rtextarea/SearchEngine.java | 1883 +- .../org/fife/ui/rtextarea/SearchResult.java | 245 + .../ui/rtextarea/SmartHighlightPainter.java | 160 + .../fife/ui/rtextarea/ToolTipSupplier.java | 53 +- ...olatileImageBackgroundPainterStrategy.java | 238 +- .../java/org/fife/util/DynamicIntArray.java | 762 +- .../src/main/resources/log4j2.xml | 4 +- .../ui/rsyntaxtextarea/ErrorStrip.properties | 0 .../rsyntaxtextarea/ErrorStrip_ar.properties | 3 + .../rsyntaxtextarea/ErrorStrip_de.properties | 3 + .../rsyntaxtextarea/ErrorStrip_es.properties | 3 + .../rsyntaxtextarea/ErrorStrip_fr.properties | 3 + .../rsyntaxtextarea/ErrorStrip_hu.properties | 3 + .../rsyntaxtextarea/ErrorStrip_in.properties} | 0 .../rsyntaxtextarea/ErrorStrip_it.properties | 3 + .../rsyntaxtextarea/ErrorStrip_ja.properties | 3 + .../rsyntaxtextarea/ErrorStrip_ko.properties | 3 + .../rsyntaxtextarea/ErrorStrip_nl.properties | 3 + .../rsyntaxtextarea/ErrorStrip_pl.properties | 3 + .../ErrorStrip_pt_BR.properties | 3 + .../rsyntaxtextarea/ErrorStrip_ru.properties | 3 + .../rsyntaxtextarea/ErrorStrip_tr.properties | 3 + .../rsyntaxtextarea/ErrorStrip_uk.properties | 3 + .../ErrorStrip_zh_CN.properties | 3 + .../ErrorStrip_zh_TW.properties | 3 + .../RSyntaxTextArea.properties | 14 + .../RSyntaxTextArea_ar.properties | 14 + .../RSyntaxTextArea_de.properties | 14 + .../RSyntaxTextArea_es.properties | 14 + .../RSyntaxTextArea_fr.properties | 14 + .../RSyntaxTextArea_hu.properties | 14 + .../RSyntaxTextArea_in.properties | 14 + .../RSyntaxTextArea_it.properties | 14 + .../RSyntaxTextArea_ja.properties | 14 + .../RSyntaxTextArea_ko.properties | 14 + .../RSyntaxTextArea_nl.properties | 14 + .../RSyntaxTextArea_pl.properties | 15 + .../RSyntaxTextArea_pt_BR.properties | 14 + .../RSyntaxTextArea_ru.properties | 14 + .../RSyntaxTextArea_tr.properties | 14 + .../RSyntaxTextArea_uk.properties | 14 + .../RSyntaxTextArea_zh_CN.properties | 14 + .../RSyntaxTextArea_zh_TW.properties | 14 + .../focusabletip/FocusableTip.properties | 0 .../focusabletip/FocusableTip_ar.properties | 1 + .../focusabletip/FocusableTip_de.properties | 1 + .../focusabletip/FocusableTip_es.properties | 1 + .../focusabletip/FocusableTip_fr.properties | 1 + .../focusabletip/FocusableTip_hu.properties | 1 + .../focusabletip/FocusableTip_in.properties} | 0 .../focusabletip/FocusableTip_it.properties | 1 + .../focusabletip/FocusableTip_ja.properties | 1 + .../focusabletip/FocusableTip_ko.properties | 1 + .../focusabletip/FocusableTip_nl.properties | 1 + .../focusabletip/FocusableTip_pl.properties | 1 + .../FocusableTip_pt_BR.properties | 1 + .../focusabletip/FocusableTip_ru.properties | 1 + .../focusabletip/FocusableTip_tr.properties | 1 + .../focusabletip/FocusableTip_uk.properties | 1 + .../FocusableTip_zh_CN.properties | 1 + .../FocusableTip_zh_TW.properties | 1 + .../focusabletip/osx_sizegrip.png | Bin 0 -> 4876 bytes .../fife/ui/rsyntaxtextarea/themes/dark.xml | 79 + .../ui/rsyntaxtextarea/themes/default-alt.xml | 78 + .../ui/rsyntaxtextarea/themes/default.xml | 78 + .../ui/rsyntaxtextarea/themes/eclipse.xml | 78 + .../fife/ui/rsyntaxtextarea/themes/idea.xml | 78 + .../ui/rsyntaxtextarea/themes/monokai.xml | 73 + .../fife/ui/rsyntaxtextarea/themes/theme.dtd | 83 + .../org/fife/ui/rsyntaxtextarea/themes/vs.xml | 78 + .../fife/ui/rtextarea/RTextArea.properties | 49 +- .../fife/ui/rtextarea/RTextArea_ar.properties | 49 +- .../fife/ui/rtextarea/RTextArea_de.properties | 49 +- .../fife/ui/rtextarea/RTextArea_es.properties | 49 +- .../fife/ui/rtextarea/RTextArea_fr.properties | 49 +- .../fife/ui/rtextarea/RTextArea_hu.properties | 49 +- .../fife/ui/rtextarea/RTextArea_in.properties | 49 +- .../fife/ui/rtextarea/RTextArea_it.properties | 49 +- .../fife/ui/rtextarea/RTextArea_ja.properties | 49 +- .../fife/ui/rtextarea/RTextArea_ko.properties | 49 +- .../fife/ui/rtextarea/RTextArea_nl.properties | 49 +- .../fife/ui/rtextarea/RTextArea_pl.properties | 34 + .../ui/rtextarea/RTextArea_pt_BR.properties | 49 +- .../fife/ui/rtextarea/RTextArea_ru.properties | 49 +- .../fife/ui/rtextarea/RTextArea_tr.properties | 49 +- .../fife/ui/rtextarea/RTextArea_uk.properties | 34 + .../ui/rtextarea/RTextArea_zh_CN.properties | 52 +- .../ui/rtextarea/RTextArea_zh_TW.properties | 49 +- tools/agent_debugger_pkg/pom.xml | 2 +- tools/jenkins_plugin/pom.xml | 2 +- tools/pom.xml | 12 +- tools/script_engine/pom.xml | 2 +- tools/script_filter/pom.xml | 8 +- .../tank/tools/script/AppletLauncher.java | 4 +- .../tank/tools/script/ScriptFilterRunner.java | 48 +- .../tank/tools/script/SelectDialog.java | 12 +- .../tank/tools/script/XMlViewDialog.java | 32 +- .../main/java/org/fife/io/DocumentReader.java | 212 - .../main/java/org/fife/io/UnicodeReader.java | 274 - .../main/java/org/fife/io/UnicodeWriter.java | 269 - .../java/org/fife/print/RPrintUtilities.java | 547 - .../AbstractJFlexCTokenMaker.java | 212 - .../AbstractJFlexTokenMaker.java | 43 - .../rsyntaxtextarea/AbstractTokenMaker.java | 71 - .../AbstractTokenMakerFactory.java | 101 - .../rsyntaxtextarea/ActiveLineRangeEvent.java | 75 - .../ActiveLineRangeListener.java | 52 - .../ChangeableColorHighlightPainter.java | 77 - .../rsyntaxtextarea/CodeTemplateManager.java | 453 - .../fife/ui/rsyntaxtextarea/DefaultToken.java | 387 - .../rsyntaxtextarea/DefaultTokenFactory.java | 176 - .../DefaultTokenMakerFactory.java | 88 - .../ui/rsyntaxtextarea/DocumentRange.java | 49 - .../fife/ui/rsyntaxtextarea/ErrorStrip.java | 736 - .../ui/rsyntaxtextarea/FileFileLocation.java | 132 - .../fife/ui/rsyntaxtextarea/FileLocation.java | 143 - .../MarkOccurrencesHighlightPainter.java | 134 - .../MarkOccurrencesSupport.java | 290 - .../ui/rsyntaxtextarea/ParserManager.java | 658 - .../rsyntaxtextarea/PopupWindowDecorator.java | 72 - .../org/fife/ui/rsyntaxtextarea/RSTAView.java | 56 - .../ui/rsyntaxtextarea/RSyntaxDocument.java | 578 - .../ui/rsyntaxtextarea/RSyntaxTextArea.java | 2227 - .../RSyntaxTextAreaDefaultInputMap.java | 71 - .../RSyntaxTextAreaEditorKit.java | 1449 - .../RSyntaxTextAreaHighlighter.java | 480 - .../ui/rsyntaxtextarea/RSyntaxTextAreaUI.java | 229 - .../ui/rsyntaxtextarea/RSyntaxUtilities.java | 943 - .../fife/ui/rsyntaxtextarea/RTfToText.java | 238 - .../fife/ui/rsyntaxtextarea/RtfGenerator.java | 524 - .../ui/rsyntaxtextarea/RtfTransferable.java | 93 - .../SquiggleUnderlineHighlightPainter.java | 134 - .../org/fife/ui/rsyntaxtextarea/Style.java | 190 - .../ui/rsyntaxtextarea/SyntaxConstants.java | 200 - .../fife/ui/rsyntaxtextarea/SyntaxScheme.java | 579 - .../fife/ui/rsyntaxtextarea/SyntaxView.java | 781 - .../ui/rsyntaxtextarea/TextEditorPane.java | 681 - .../org/fife/ui/rsyntaxtextarea/Token.java | 838 - .../fife/ui/rsyntaxtextarea/TokenFactory.java | 83 - .../fife/ui/rsyntaxtextarea/TokenMaker.java | 153 - .../ui/rsyntaxtextarea/TokenMakerBase.java | 240 - .../ui/rsyntaxtextarea/TokenMakerFactory.java | 142 - .../org/fife/ui/rsyntaxtextarea/TokenMap.java | 285 - .../ui/rsyntaxtextarea/TokenOrientedView.java | 66 - .../ui/rsyntaxtextarea/URLFileLocation.java | 166 - .../VisibleWhitespaceToken.java | 254 - .../VisibleWhitespaceTokenFactory.java | 65 - .../ui/rsyntaxtextarea/WrappedSyntaxView.java | 940 - .../fife/ui/rsyntaxtextarea/XMLParser.java | 127 - .../focusabletip/FocusableTip.java | 343 - .../focusabletip/SizeGrip.java | 255 - .../rsyntaxtextarea/focusabletip/TipUtil.java | 143 - .../focusabletip/TipWindow.java | 320 - .../modes/AbstractMarkupTokenMaker.java | 61 - .../modes/ActionScriptTokenMaker.flex | 512 - .../modes/ActionScriptTokenMaker.java | 2117 - .../modes/AssemblerX86TokenMaker.flex | 1050 - .../modes/AssemblerX86TokenMaker.java | 1880 - .../modes/BBCodeTokenMaker.java | 733 - .../modes/CPlusPlusTokenMaker.flex | 683 - .../modes/CPlusPlusTokenMaker.java | 2363 - .../rsyntaxtextarea/modes/CSSTokenMaker.flex | 337 - .../rsyntaxtextarea/modes/CSSTokenMaker.java | 847 - .../modes/CSharpTokenMaker.flex | 531 - .../modes/CSharpTokenMaker.java | 1664 - .../ui/rsyntaxtextarea/modes/CTokenMaker.java | 2116 - .../modes/ClojureTokenMaker.flex | 543 - .../modes/ClojureTokenMaker.java | 1901 - .../modes/DelphiTokenMaker.flex | 576 - .../modes/DelphiTokenMaker.java | 1698 - .../modes/FortranTokenMaker.flex | 495 - .../modes/FortranTokenMaker.java | 1032 - .../modes/GroovyTokenMaker.flex | 625 - .../modes/GroovyTokenMaker.java | 3289 -- .../rsyntaxtextarea/modes/HTMLTokenMaker.flex | 764 - .../rsyntaxtextarea/modes/HTMLTokenMaker.java | 2203 - .../rsyntaxtextarea/modes/JSPTokenMaker.flex | 1112 - .../rsyntaxtextarea/modes/JSPTokenMaker.java | 3929 -- .../modes/JavaScriptTokenMaker.java | 1037 - .../rsyntaxtextarea/modes/JavaTokenMaker.java | 3055 -- .../rsyntaxtextarea/modes/LispTokenMaker.flex | 446 - .../rsyntaxtextarea/modes/LispTokenMaker.java | 1349 - .../rsyntaxtextarea/modes/LuaTokenMaker.flex | 387 - .../rsyntaxtextarea/modes/LuaTokenMaker.java | 1004 - .../modes/MakefileTokenMaker.flex | 350 - .../modes/MakefileTokenMaker.java | 909 - .../rsyntaxtextarea/modes/MxmlTokenMaker.flex | 809 - .../rsyntaxtextarea/modes/MxmlTokenMaker.java | 2820 - .../rsyntaxtextarea/modes/PHPTokenMaker.flex | 1869 - .../rsyntaxtextarea/modes/PHPTokenMaker.java | 18289 ------- .../rsyntaxtextarea/modes/PerlTokenMaker.flex | 775 - .../rsyntaxtextarea/modes/PerlTokenMaker.java | 2022 - .../modes/PlainTextTokenMaker.java | 639 - .../modes/PropertiesFileTokenMaker.java | 674 - .../modes/PythonTokenMaker.flex | 457 - .../modes/PythonTokenMaker.java | 1119 - .../rsyntaxtextarea/modes/RubyTokenMaker.flex | 777 - .../rsyntaxtextarea/modes/RubyTokenMaker.java | 1787 - .../rsyntaxtextarea/modes/SASTokenMaker.flex | 689 - .../rsyntaxtextarea/modes/SASTokenMaker.java | 1516 - .../rsyntaxtextarea/modes/SQLTokenMaker.flex | 477 - .../rsyntaxtextarea/modes/SQLTokenMaker.java | 1160 - .../modes/ScalaTokenMaker.java | 1004 - .../rsyntaxtextarea/modes/TclTokenMaker.flex | 418 - .../rsyntaxtextarea/modes/TclTokenMaker.java | 1090 - .../modes/UnixShellTokenMaker.java | 1127 - .../modes/WindowsBatchTokenMaker.java | 612 - .../rsyntaxtextarea/modes/XMLTokenMaker.flex | 400 - .../rsyntaxtextarea/modes/XMLTokenMaker.java | 926 - .../parser/AbstractParser.java | 100 - .../parser/DefaultParseResult.java | 146 - .../parser/DefaultParserNotice.java | 267 - .../parser/ExtendedHyperlinkListener.java | 50 - .../rsyntaxtextarea/parser/ParseResult.java | 83 - .../ui/rsyntaxtextarea/parser/Parser.java | 78 - .../rsyntaxtextarea/parser/ParserNotice.java | 128 - .../rsyntaxtextarea/parser/TaskTagParser.java | 157 - .../rsyntaxtextarea/parser/ToolTipInfo.java | 102 - .../templates/AbstractCodeTemplate.java | 138 - .../templates/CodeTemplate.java | 82 - .../templates/StaticCodeTemplate.java | 270 - .../ui/rtextarea/AbstractGutterComponent.java | 123 - .../rtextarea/BackgroundPainterStrategy.java | 53 - ...ufferedImageBackgroundPainterStrategy.java | 110 - .../rtextarea/ChangeableHighlightPainter.java | 416 - .../ColorBackgroundPainterStrategy.java | 114 - .../fife/ui/rtextarea/ConfigurableCaret.java | 586 - .../java/org/fife/ui/rtextarea/Gutter.java | 607 - .../org/fife/ui/rtextarea/GutterIconInfo.java | 53 - .../java/org/fife/ui/rtextarea/IconGroup.java | 244 - .../org/fife/ui/rtextarea/IconRowHeader.java | 735 - .../ImageBackgroundPainterStrategy.java | 182 - .../ui/rtextarea/LineHighlightManager.java | 221 - .../org/fife/ui/rtextarea/LineNumberList.java | 614 - .../java/org/fife/ui/rtextarea/Macro.java | 384 - .../fife/ui/rtextarea/RTADefaultInputMap.java | 156 - .../ui/rtextarea/RTATextTransferHandler.java | 472 - .../java/org/fife/ui/rtextarea/RTextArea.java | 1549 - .../org/fife/ui/rtextarea/RTextAreaBase.java | 1110 - .../fife/ui/rtextarea/RTextAreaEditorKit.java | 2385 - .../org/fife/ui/rtextarea/RTextAreaUI.java | 542 - .../fife/ui/rtextarea/RTextScrollPane.java | 212 - .../org/fife/ui/rtextarea/RUndoManager.java | 252 - .../ui/rtextarea/RecordableTextAction.java | 226 - .../fife/ui/rtextarea/RegExReplaceInfo.java | 99 - .../org/fife/ui/rtextarea/SearchEngine.java | 915 - .../fife/ui/rtextarea/ToolTipSupplier.java | 50 - ...olatileImageBackgroundPainterStrategy.java | 151 - .../java/org/fife/util/DynamicIntArray.java | 366 - .../fife/ui/rtextarea/RTextArea.properties | 27 - .../fife/ui/rtextarea/RTextArea_ar.properties | 27 - .../fife/ui/rtextarea/RTextArea_de.properties | 27 - .../fife/ui/rtextarea/RTextArea_es.properties | 27 - .../fife/ui/rtextarea/RTextArea_fr.properties | 27 - .../fife/ui/rtextarea/RTextArea_hu.properties | 27 - .../fife/ui/rtextarea/RTextArea_in.properties | 27 - .../fife/ui/rtextarea/RTextArea_it.properties | 27 - .../fife/ui/rtextarea/RTextArea_ja.properties | 27 - .../fife/ui/rtextarea/RTextArea_ko.properties | 27 - .../fife/ui/rtextarea/RTextArea_nl.properties | 27 - .../ui/rtextarea/RTextArea_pt_BR.properties | 27 - .../fife/ui/rtextarea/RTextArea_ru.properties | 27 - .../fife/ui/rtextarea/RTextArea_tr.properties | 27 - .../ui/rtextarea/RTextArea_zh_CN.properties | 30 - .../ui/rtextarea/RTextArea_zh_TW.properties | 27 - tools/script_filter_pkg/pom.xml | 2 +- web/pom.xml | 2 +- web/web_support/pom.xml | 2 +- .../intuit/tank/navigation/Navigation.java | 6 +- .../com/intuit/tank/prefs/TableViewState.java | 6 +- .../com/intuit/tank/project/JobValidator.java | 6 +- .../com/intuit/tank/report/JobReport.java | 42 +- .../com/intuit/tank/script/LogicTestData.java | 4 +- web/web_ui/pom.xml | 20 +- .../webapp/projects/workloadScripts.xhtml | 10 +- 655 files changed, 166029 insertions(+), 219208 deletions(-) delete mode 100644 agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasySSLProtocolSocketFactory.java delete mode 100644 agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasyX509TrustManager.java create mode 100644 api/src/test/resources/settings.xml mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/io/DocumentReader.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/io/UnicodeReader.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/io/UnicodeWriter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/print/RPrintUtilities.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ChangeableColorHighlightPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultOccurrenceMarker.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultToken.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DocumentRange.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ErrorStrip.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FoldingAwareIconRowHeader.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/HtmlOccurrenceMarker.java create mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/HtmlUtil.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGenerator.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGeneratorResult.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesHighlightPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MatchedBracketPopup.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SelectRegionLinkGeneratorResult.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Style.java create mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/StyledTextTransferable.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Theme.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenImpl.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenIterator.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenPainter.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenTypes.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenUtils.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceToken.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenFactory.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView2.java delete mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XMLParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/Fold.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldManager.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldType.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LispFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/NsisFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/XmlFoldParser.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/YamlFoldParser.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java create mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.flex create mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex} (57%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex} (55%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.flex} (66%) create mode 100644 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex} (60%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex} (68%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JshintrcTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JsonTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JsonTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LatexTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LatexTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LessTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LispTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LispTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LuaTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LuaTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MakefileTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MakefileTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/UnixShellTokenMaker.java rename tools/{script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex => agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/VisualBasicTokenMaker.flex} (55%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/VisualBasicTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/WindowsBatchTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/XMLTokenMaker.flex mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/XMLTokenMaker.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/YamlTokenMaker.flex create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/YamlTokenMaker.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/AbstractParser.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/DefaultParseResult.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/DefaultParserNotice.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ExtendedHyperlinkListener.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ParseResult.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/Parser.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ParserNotice.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/TaskTagParser.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ToolTipInfo.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/parser/XmlParser.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/templates/AbstractCodeTemplate.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/templates/CodeTemplate.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/templates/StaticCodeTemplate.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/AbstractGutterComponent.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/BackgroundPainterStrategy.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/BufferedImageBackgroundPainterStrategy.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/CaretStyle.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ChangeableHighlightPainter.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ClipboardHistory.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ClipboardHistoryPopup.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ColorBackgroundPainterStrategy.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ConfigurableCaret.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/FoldIndicator.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/Gutter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/GutterIconInfo.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/IconGroup.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/IconRowHeader.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ImageBackgroundPainterStrategy.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/LineHighlightManager.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/LineNumberList.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/Macro.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RDocument.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RDocumentCharSequence.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTADefaultInputMap.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTATextTransferHandler.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextArea.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextAreaBase.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextAreaEditorKit.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextAreaHighlighter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextAreaUI.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RTextScrollPane.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RUndoManager.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RecordableTextAction.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/RegExReplaceInfo.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/SearchContext.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/SearchEngine.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/SearchResult.java create mode 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/SmartHighlightPainter.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/ToolTipSupplier.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/ui/rtextarea/VolatileImageBackgroundPainterStrategy.java mode change 100644 => 100755 tools/agent_debugger/src/main/java/org/fife/util/DynamicIntArray.java mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_ar.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_de.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_es.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_fr.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_hu.properties rename tools/{script_filter/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip.properties => agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_in.properties} (100%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_it.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_ja.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_ko.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_nl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_pl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_pt_BR.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_ru.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_tr.properties create mode 100644 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_uk.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_zh_CN.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/ErrorStrip_zh_TW.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ar.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_de.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_es.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_fr.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_hu.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_in.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_it.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ja.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ko.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_nl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_pt_BR.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_ru.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_tr.properties create mode 100644 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_uk.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_CN.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea_zh_TW.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ar.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_de.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_es.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_fr.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_hu.properties rename tools/{script_filter/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.properties => agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_in.properties} (100%) mode change 100644 => 100755 create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_it.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ja.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ko.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_nl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_pt_BR.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_ru.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_tr.properties create mode 100644 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_uk.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_CN.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip_zh_TW.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/dark.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/default-alt.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/default.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/eclipse.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/idea.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/monokai.xml create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/theme.dtd create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rsyntaxtextarea/themes/vs.xml mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_ar.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_de.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_es.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_fr.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_hu.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_in.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_it.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_ja.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_ko.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_nl.properties create mode 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_pl.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_pt_BR.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_ru.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_tr.properties create mode 100644 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_uk.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_zh_CN.properties mode change 100644 => 100755 tools/agent_debugger/src/main/resources/org/fife/ui/rtextarea/RTextArea_zh_TW.properties delete mode 100644 tools/script_filter/src/main/java/org/fife/io/DocumentReader.java delete mode 100644 tools/script_filter/src/main/java/org/fife/io/UnicodeReader.java delete mode 100644 tools/script_filter/src/main/java/org/fife/io/UnicodeWriter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/print/RPrintUtilities.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/ChangeableColorHighlightPainter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultToken.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/DocumentRange.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/ErrorStrip.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesHighlightPainter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextArea.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaDefaultInputMap.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/Style.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceToken.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenFactory.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/XMLParser.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LispTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LispTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LuaTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/LuaTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MakefileTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MakefileTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/UnixShellTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/WindowsBatchTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/XMLTokenMaker.flex delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/XMLTokenMaker.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/AbstractParser.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/DefaultParseResult.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/DefaultParserNotice.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ExtendedHyperlinkListener.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ParseResult.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/Parser.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ParserNotice.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/TaskTagParser.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/parser/ToolTipInfo.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/templates/AbstractCodeTemplate.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/templates/CodeTemplate.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/templates/StaticCodeTemplate.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/AbstractGutterComponent.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/BackgroundPainterStrategy.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/BufferedImageBackgroundPainterStrategy.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/ChangeableHighlightPainter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/ColorBackgroundPainterStrategy.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/ConfigurableCaret.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/Gutter.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/GutterIconInfo.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/IconGroup.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/IconRowHeader.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/ImageBackgroundPainterStrategy.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/LineHighlightManager.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/LineNumberList.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/Macro.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTADefaultInputMap.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTATextTransferHandler.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTextArea.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTextAreaBase.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTextAreaEditorKit.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTextAreaUI.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RTextScrollPane.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RUndoManager.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RecordableTextAction.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/RegExReplaceInfo.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/SearchEngine.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/ToolTipSupplier.java delete mode 100644 tools/script_filter/src/main/java/org/fife/ui/rtextarea/VolatileImageBackgroundPainterStrategy.java delete mode 100644 tools/script_filter/src/main/java/org/fife/util/DynamicIntArray.java delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_ar.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_de.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_es.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_fr.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_hu.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_in.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_it.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_ja.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_ko.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_nl.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_pt_BR.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_ru.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_tr.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_zh_CN.properties delete mode 100644 tools/script_filter/src/main/resources/org/fife/ui/rtextarea/RTextArea_zh_TW.properties diff --git a/.travis.yml b/.travis.yml index 561fb84be..882a7a7bf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,4 @@ language: java jdk: - openjdk8 -script: mvn clean cobertura:cobertura -P default,coverage +script: mvn clean install -P default,coverage diff --git a/agent/agent_common/pom.xml b/agent/agent_common/pom.xml index 2cd2bb8c3..bfefdb04c 100644 --- a/agent/agent_common/pom.xml +++ b/agent/agent_common/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent-common @@ -22,12 +22,6 @@ ${project.version} - - ${project.groupId} - tank-common - ${project.version} - - commons-fileupload commons-fileupload @@ -38,22 +32,10 @@ json-simple - - com.google.guava - guava - 27.0-jre - - jdom jdom - - - xml-apis - xml-apis - - diff --git a/agent/agent_common/src/main/java/com/intuit/tank/http/BaseRequest.java b/agent/agent_common/src/main/java/com/intuit/tank/http/BaseRequest.java index ac6bb9315..a9cc0adf5 100644 --- a/agent/agent_common/src/main/java/com/intuit/tank/http/BaseRequest.java +++ b/agent/agent_common/src/main/java/com/intuit/tank/http/BaseRequest.java @@ -1,6 +1,5 @@ package com.intuit.tank.http; -import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.List; diff --git a/agent/agent_common/src/test/java/com/intuit/tank/http/multipart/MultiPartRequestTest.java b/agent/agent_common/src/test/java/com/intuit/tank/http/multipart/MultiPartRequestTest.java index 53ff5a76c..1c79da8f4 100644 --- a/agent/agent_common/src/test/java/com/intuit/tank/http/multipart/MultiPartRequestTest.java +++ b/agent/agent_common/src/test/java/com/intuit/tank/http/multipart/MultiPartRequestTest.java @@ -1,11 +1,12 @@ package com.intuit.tank.http.multipart; -import org.picketlink.common.util.Base64; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.intuit.tank.test.TestGroups; +import java.util.Base64; + public class MultiPartRequestTest { @DataProvider(name = "data") private Object[][] csvData() { @@ -52,7 +53,7 @@ private Object[][] csvData() { @Test(groups = TestGroups.FUNCTIONAL, dataProvider = "data") public void test(String body, int numParts) { MultiPartRequest multiPartRequest = new MultiPartRequest(null, null); - multiPartRequest.setBody(new String(Base64.encodeObject(body))); + multiPartRequest.setBody(Base64.getEncoder().encodeToString(body.getBytes())); } } diff --git a/agent/agent_standalone/pom.xml b/agent/agent_standalone/pom.xml index 6fe7d77f2..860548317 100755 --- a/agent/agent_standalone/pom.xml +++ b/agent/agent_standalone/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent-standalone diff --git a/agent/agent_standalone_pkg/pom.xml b/agent/agent_standalone_pkg/pom.xml index 25fc6d1cc..9b95cd8a8 100755 --- a/agent/agent_standalone_pkg/pom.xml +++ b/agent/agent_standalone_pkg/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent-standalone-pkg diff --git a/agent/agent_startup/pom.xml b/agent/agent_startup/pom.xml index 9d52b92d5..51204ce01 100755 --- a/agent/agent_startup/pom.xml +++ b/agent/agent_startup/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent-startup diff --git a/agent/agent_startup_pkg/pom.xml b/agent/agent_startup_pkg/pom.xml index 68563b386..fc1e8998b 100755 --- a/agent/agent_startup_pkg/pom.xml +++ b/agent/agent_startup_pkg/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent-startup-pkg diff --git a/agent/apiharness/pom.xml b/agent/apiharness/pom.xml index 284a473f8..ac7b8398e 100644 --- a/agent/apiharness/pom.xml +++ b/agent/apiharness/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 agent @@ -15,12 +15,6 @@ - - - commons-fileupload - commons-fileupload - - ${project.groupId} reporting-rest @@ -97,42 +91,6 @@ org.simpleframework simple-http - - - commons-jxpath - commons-jxpath - - - - com.googlecode.json-simple - json-simple - - - - jdom - jdom - - - - xerces - xercesImpl - - - - javax.mail - mail - - - - saxpath - saxpath - - - - org.json - json - - diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java index 623fb3b57..7c32710be 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java @@ -15,7 +15,6 @@ import java.util.Date; -import com.intuit.tank.vm.api.enumerated.VMRegion; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java index 231e1ce08..e8fe0ee5a 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java @@ -56,7 +56,6 @@ import com.intuit.tank.reporting.api.ResultsReporter; import com.intuit.tank.reporting.factory.ReportingFactory; import com.intuit.tank.results.TankResult; -import com.intuit.tank.runner.TestPlanRunner; import com.intuit.tank.vm.agent.messages.AgentData; import com.intuit.tank.vm.agent.messages.AgentTestStartData; import com.intuit.tank.vm.agent.messages.DataFileRequest; @@ -84,7 +83,7 @@ public class APITestHarness { private String testPlans = ""; private String instanceId; private List testPlanXmls = null; - private ThreadGroup threadGroup = new ThreadGroup("Test Runner Group"); + private ArrayList threadGroupArray = new ArrayList<>(); private int currentNumThreads = 0; private long startTime = 0; private int capacity = -1; @@ -94,7 +93,7 @@ public class APITestHarness { private boolean isLocal = true; private boolean started = false; private WatsAgentCommand cmd = WatsAgentCommand.run; - private ArrayList sessionThreads; + private ArrayList sessionThreads = new ArrayList<>(); private CountDownLatch doneSignal; private boolean loggedSimTime; private int currentUsers = 0; @@ -112,25 +111,6 @@ public class APITestHarness { private Date send = new Date(); private int interval = 15; // SECONDS - static { - try { - java.security.Security.setProperty("networkaddress.cache.ttl", "5"); - } catch (Throwable e1) { - LOG.warn(LogUtil.getLogMessage("Error setting dns timeout: " + e1.toString(), LogEventType.System)); - } - try { - java.security.Security.setProperty("networkaddress.cache.negative.ttl", "0"); - } catch (Throwable e1) { - LOG.warn(LogUtil.getLogMessage("Error setting dns negative timeout: " + e1.toString(), LogEventType.System)); - } - try { - System.setProperty("jdk.certpath.disabledAlgorithms", ""); - } catch (Throwable e1) { - System.err.println("Error setting property jdk.certpath.disabledAlgorithms: " + e1.toString()); - e1.printStackTrace(); - } - } - /** * * @return @@ -185,13 +165,10 @@ private void initializeFromArgs(String[] args) { if (!AgentUtil.validateTestPlans(testPlans)) { return; } - continue; } else if (values[0].equalsIgnoreCase("-ramp")) { agentRunData.setRampTime(Long.parseLong(values[1]) * 60000); - continue; } else if (values[0].equalsIgnoreCase("-client")) { tankHttpClientClass = StringUtils.trim(values[1]); - continue; } else if (values[0].equalsIgnoreCase("-d")) { LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfiguration(); @@ -203,7 +180,6 @@ private void initializeFromArgs(String[] args) { DEBUG = true; agentRunData.setActiveProfile(LoggingProfile.VERBOSE); setFlowControllerTemplate(new DebugFlowController()); - continue; } else if (values[0].equalsIgnoreCase("-t")) { LoggerContext ctx = (LoggerContext) LogManager.getContext(false); Configuration config = ctx.getConfiguration(); @@ -215,37 +191,26 @@ private void initializeFromArgs(String[] args) { DEBUG = true; agentRunData.setActiveProfile(LoggingProfile.VERBOSE); setFlowControllerTemplate(new TraceFlowController()); - continue; } else if (values[0].equalsIgnoreCase("-local")) { isLocal = true; - continue; } else if (values[0].equalsIgnoreCase("-instanceId")) { instanceId = values[1]; - continue; } else if (values[0].equalsIgnoreCase("-logging")) { agentRunData.setActiveProfile(LoggingProfile.fromString(values[1])); - continue; } else if (values[0].equalsIgnoreCase("-users")) { agentRunData.setNumUsers(Integer.parseInt(values[1])); - continue; } else if (values[0].equalsIgnoreCase("-capacity")) { capacity = Integer.parseInt(values[1]); - continue; } else if (values[0].equalsIgnoreCase("-start")) { agentRunData.setNumStartUsers(Integer.parseInt(values[1])); - continue; } else if (values[0].equalsIgnoreCase("-jobId")) { agentRunData.setJobId(values[1]); - continue; } else if (values[0].equalsIgnoreCase("-stopBehavior")) { agentRunData.setStopBehavior(StopBehavior.fromString(values[1])); - continue; } else if (values[0].equalsIgnoreCase("-http")) { controllerBase = (values.length > 1 ? values[1] : null); - continue; } else if (values[0].equalsIgnoreCase("-time")) { agentRunData.setSimulationTime(Integer.parseInt(values[1]) * 60000); - continue; } } if (instanceId == null) { @@ -546,10 +511,10 @@ public void runConcurrentTestPlans() { return; } tpsMonitor = new TPSMonitor(tankConfig.getAgentConfig().getTPSPeriod()); - StringBuilder info = new StringBuilder().append(" RAMP_TIME=").append(agentRunData.getRampTime()) - .append("; agentRunData.getNumUsers()=").append(agentRunData.getNumUsers()) - .append("; NUM_START_THREADS=").append(agentRunData.getNumStartUsers()) - .append("; simulationTime=").append(agentRunData.getSimulationTime()); + String info = " RAMP_TIME=" + agentRunData.getRampTime() + + "; agentRunData.getNumUsers()=" + agentRunData.getNumUsers() + + "; NUM_START_THREADS=" + agentRunData.getNumStartUsers() + + "; simulationTime=" + agentRunData.getSimulationTime(); LOG.info(new ObjectMessage(ImmutableMap.of("Message", "starting test with " + info))); started = true; @@ -558,7 +523,6 @@ public void runConcurrentTestPlans() { agentRunData.setJobId(jobId); } - sessionThreads = new ArrayList<>(); Thread monitorThread = null; doneSignal = new CountDownLatch(agentRunData.getNumUsers()); try { @@ -568,42 +532,21 @@ public void runConcurrentTestPlans() { } agentRunData.setProjectName(hdWorkload.getName()); agentRunData.setTankhttpClientClass(tankHttpClientClass); + Object httpClient = ((TankHttpClient) Class.forName(tankHttpClientClass).newInstance()).createHttpClient(); List testPlans = new ArrayList(); - int total = 0; for (HDTestPlan plan : hdWorkload.getPlans()) { if (plan.getUserPercentage() > 0) { plan.setVariables(hdWorkload.getVariables()); - TestPlanStarter starter = new TestPlanStarter(plan, agentRunData.getNumUsers()); - total += starter.getNumThreads(); + ThreadGroup threadGroup = new ThreadGroup("Test Plan Runner Group"); + threadGroupArray.add(threadGroup); + TestPlanStarter starter = new TestPlanStarter(httpClient, plan, agentRunData.getNumUsers(), tankHttpClientClass, threadGroup); testPlans.add(starter); LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Users for Test Plan " + plan.getTestPlanName() + " at " + plan.getUserPercentage() + "% = " + starter.getNumThreads()))); } } - LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Total Users calculated for all test Plans = " + total))); - if (total != agentRunData.getNumUsers()) { - int numToAdd = agentRunData.getNumUsers() - total; - TestPlanStarter starter = testPlans.get(testPlans.size() - 1); - LOG.info(LogUtil.getLogMessage("adding " + numToAdd + " threads to testPlan " - + starter.getPlan().getTestPlanName())); - starter.setNumThreads(starter.getNumThreads() + numToAdd); - } - Object httpClient = ((TankHttpClient) Class.forName(tankHttpClientClass).newInstance()).createHttpClient(); - // create threads - for (TestPlanStarter starter : testPlans) { - for (int tp = 0; tp < agentRunData.getNumUsers(); tp++) { - TestPlanRunner session = new TestPlanRunner(httpClient, starter.getPlan(), tp, tankHttpClientClass); - Thread thread = new Thread(threadGroup, session, "AGENT"); - thread.setDaemon(true);// system won't shut down normally until all user threads stop - starter.addThread(thread); - session.setUniqueName( - thread.getThreadGroup().getName() + "-" + - thread.getId()); - sessionThreads.add(thread); - } - } LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Have all testPlan runners configured"))); // start status thread first only if (!isDebug()) { @@ -709,7 +652,7 @@ public CloudVmStatus getInitialStatus() { return status; } - synchronized public void threadComplete() { + public synchronized void threadComplete() { currentUsers--; doneSignal.countDown(); long count = doneSignal.getCount(); @@ -736,7 +679,8 @@ public WatsAgentStatusResponse getStatus() { currentUsers, agentRunData.getNumUsers(), ramp); } - public synchronized void threadStarted() { + public synchronized void threadStarted(Thread thread) { + sessionThreads.add(thread); currentNumThreads++; currentUsers++; } @@ -764,18 +708,16 @@ public long getSimulationEndTimeMillis() { } public boolean hasMetSimulationTime() { - boolean ret = false; if (agentRunData.getSimulationTime() > 0) { - long currentTime = System.currentTimeMillis(); - if (currentTime > getSimulationEndTimeMillis()) { + if (System.currentTimeMillis() > getSimulationEndTimeMillis()) { if (!loggedSimTime) { LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Simulation time met"))); loggedSimTime = true; } - ret = true; + return true; } } - return ret; + return false; } public long getStartTime() { @@ -790,26 +732,25 @@ public long getMaxSimulationEndTimeMillis() { * check the agent threads if simulation time has been met. */ public void checkAgentThreads() { - int activeCount = threadGroup.activeCount(); - Thread[] threads = new Thread[activeCount]; - threadGroup.enumerate(threads); - int activeThreads = (int) Arrays.stream(threads).filter(Objects::nonNull).filter( - t -> t.getState() == Thread.State.TIMED_WAITING || t.getState() == Thread.State.WAITING).count(); - LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Have " + activeThreads + " of " + activeCount - + " active Threads in thread group " - + threadGroup.getName()))); - if (agentRunData.getSimulationTime() != 0 && hasMetSimulationTime() && doneSignal.getCount() != 0) { - boolean exceededTimeLimit = System.currentTimeMillis() > getMaxSimulationEndTimeMillis(); - if (exceededTimeLimit) { - LOG.info(LogUtil.getLogMessage("Max simulation time has been met and there are " - + doneSignal.getCount() + " threads not reporting done.")); - for (Thread t : sessionThreads) { - if (t.isAlive()) { - LOG.warn(LogUtil.getLogMessage("thread " + t.getName() + '-' + t.getId() - + " is still running with a State of " + t.getState().name(), LogEventType.System)); - t.interrupt(); - doneSignal.countDown(); - } + for (ThreadGroup threadGroup : threadGroupArray) { + int activeCount = threadGroup.activeCount(); + Thread[] threads = new Thread[activeCount]; + threadGroup.enumerate(threads); + int activeThreads = (int) Arrays.stream(threads).filter(Objects::nonNull).filter( + t -> t.getState() == Thread.State.TIMED_WAITING || t.getState() == Thread.State.WAITING).count(); + LOG.info(new ObjectMessage(ImmutableMap.of("Message", "Have " + activeThreads + " of " + activeCount + + " active Threads in thread group " + + threadGroup.getName()))); + } + if (hasMetSimulationTime()) { // && doneSignal.getCount() != 0) { + LOG.info(LogUtil.getLogMessage("Max simulation time has been met and there are " + + doneSignal.getCount() + " threads not reporting done.")); + for (Thread t : sessionThreads) { + if (t.isAlive()) { + LOG.warn(LogUtil.getLogMessage("thread " + t.getName() + '-' + t.getId() + + " is still running with a State of " + t.getState().name(), LogEventType.System)); + t.interrupt(); + doneSignal.countDown(); } } } diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/CommandListener.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/CommandListener.java index 4344b26b5..b9136e033 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/CommandListener.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/CommandListener.java @@ -109,9 +109,7 @@ public void handle(Request req, Response response) { } public void startTest() { - Thread t = new Thread( () -> { - APITestHarness.getInstance().runConcurrentTestPlans(); - }); + Thread t = new Thread( () -> APITestHarness.getInstance().runConcurrentTestPlans()); t.setDaemon(true); t.start(); } diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/TestPlanStarter.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/TestPlanStarter.java index 466d95d85..ab5058301 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/TestPlanStarter.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/TestPlanStarter.java @@ -13,8 +13,7 @@ * #L% */ -import java.util.Stack; - +import com.intuit.tank.runner.TestPlanRunner; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -27,28 +26,36 @@ public class TestPlanStarter implements Runnable { private static final Logger LOG = LogManager.getLogger(TestPlanStarter.class); - private HDTestPlan plan; - private int numThreads; - private Stack runners = new Stack(); - private int threadsStarted; + private final Object httpClient; + private final HDTestPlan plan; + private final int numThreads; + private final ThreadGroup threadGroup; + private final String tankHttpClientClass; + private int threadsStarted = 0; + private final long rampDelay; private boolean done = false; - public TestPlanStarter(HDTestPlan plan, int numThreads) { + public TestPlanStarter(Object httpClient, HDTestPlan plan, int numThreads, String tankHttpClientClass, ThreadGroup threadGroup) { super(); + this.httpClient = httpClient; this.plan = plan; + this.threadGroup = threadGroup; + this.tankHttpClientClass = tankHttpClientClass; this.numThreads = (int) Math.floor(numThreads * (plan.getUserPercentage() / 100D)); + this.rampDelay = calcRampTime(); } public void run() { // start initial users - int numStartUsers = APITestHarness.getInstance().getAgentRunData().getNumStartUsers(); - if (threadsStarted < numStartUsers && threadsStarted < numThreads) { - LOG.info(LogUtil.getLogMessage("Starting initial " + numStartUsers + " users for plan " + int numInitialUsers = APITestHarness.getInstance().getAgentRunData().getNumStartUsers(); + if (threadsStarted < numInitialUsers && threadsStarted < numThreads) { + LOG.info(LogUtil.getLogMessage("Starting initial " + numInitialUsers + " users for plan " + plan.getTestPlanName() + "...")); - while (threadsStarted < numStartUsers && threadsStarted < numThreads && !runners.isEmpty()) { - runners.pop().start(); - APITestHarness.getInstance().threadStarted(); + while (threadsStarted < numInitialUsers && threadsStarted < numThreads) { + Thread thread = createThread(httpClient, threadsStarted); + APITestHarness.getInstance().threadStarted(thread); + thread.start(); threadsStarted++; } } @@ -56,10 +63,15 @@ public void run() { // start rest of users sleeping between each interval LOG.info(LogUtil.getLogMessage("Starting ramp of additional " + (numThreads - threadsStarted) + " users for plan " + plan.getTestPlanName() + "...")); - while (threadsStarted < numThreads && !runners.isEmpty()) { - if ((threadsStarted - numStartUsers) % APITestHarness.getInstance().getAgentRunData().getUserInterval() == 0) { - waitForRampTime(); + while (!done) { + if ((threadsStarted - numInitialUsers) % APITestHarness.getInstance().getAgentRunData().getUserInterval() == 0) { + try { + Thread.sleep(rampDelay); + } catch (InterruptedException e) { + LOG.error(LogUtil.getLogMessage("Error trying to wait for ramp", LogEventType.System), e); + } } + // Loop while in pause or pause_ramp state while (APITestHarness.getInstance().getCmd() == WatsAgentCommand.pause_ramp || APITestHarness.getInstance().getCmd() == WatsAgentCommand.pause) { if (APITestHarness.getInstance().hasMetSimulationTime()) { @@ -73,13 +85,19 @@ public void run() { } } } - if (APITestHarness.getInstance().getCmd() == WatsAgentCommand.stop - || APITestHarness.getInstance().getCmd() == WatsAgentCommand.kill) { + if ( APITestHarness.getInstance().getCmd() == WatsAgentCommand.stop + || APITestHarness.getInstance().getCmd() == WatsAgentCommand.kill + || APITestHarness.getInstance().hasMetSimulationTime() + || APITestHarness.getInstance().isDebug() ) { + done = true; break; } - runners.pop().start(); - APITestHarness.getInstance().threadStarted(); - threadsStarted++; + if (threadGroup.activeCount() < numThreads) { + Thread thread = createThread(httpClient, threadsStarted); + thread.start(); + APITestHarness.getInstance().threadStarted(thread); + threadsStarted++; + } } done = true; } @@ -96,37 +114,27 @@ public int getNumThreads() { return numThreads; } - public void setNumThreads(int numThreads) { - this.numThreads = numThreads; - } - public boolean isDone() { return done; } - public void addThread(Thread t) { - runners.add(t); - } - - private void waitForRampTime() { - - try { - long rampDelay = 0; - int ramp = (numThreads - APITestHarness.getInstance().getAgentRunData().getNumStartUsers()); - if (ramp > 0) { - rampDelay = (APITestHarness.getInstance().getAgentRunData().getRampTime() * APITestHarness - .getInstance().getAgentRunData().getUserInterval()) - / ramp; - } - if (rampDelay > 0) { - Thread.sleep(rampDelay); - } else if (APITestHarness.getInstance().getAgentRunData().getRampTime() > 0) { - LOG.info(LogUtil.getLogMessage("No Ramp - " + rampDelay, LogEventType.System)); - } - - } catch (Exception t) { - LOG.error(LogUtil.getLogMessage("Error trying to wait for ramp", LogEventType.System), t); + private long calcRampTime() { + int ramp = (numThreads - APITestHarness.getInstance().getAgentRunData().getNumStartUsers()); + if (ramp > 0) { + return (APITestHarness.getInstance().getAgentRunData().getRampTime() * + APITestHarness.getInstance().getAgentRunData().getUserInterval()) + / ramp; + } else if (APITestHarness.getInstance().getAgentRunData().getRampTime() > 0) { + LOG.info(LogUtil.getLogMessage("No Ramp - " + rampDelay, LogEventType.System)); } + return 1; //Return minimum wait time 1 millisecond } + private Thread createThread(Object httpClient, int threadNumber) { + TestPlanRunner session = new TestPlanRunner(httpClient, plan, threadNumber, tankHttpClientClass); + Thread thread = new Thread(threadGroup, session, "AGENT"); + thread.setDaemon(true);// system won't shut down normally until all user threads stop + session.setUniqueName(threadGroup.getName() + "-" + thread.getId()); + return thread; + } } diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/UserTracker.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/UserTracker.java index 7527dd922..625c237a1 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/UserTracker.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/UserTracker.java @@ -47,12 +47,7 @@ public synchronized List getSnapshot() { * @param script */ public synchronized void add(String script) { - Integer i = userMap.get(script); - if (i == null) { - userMap.put(script, 1); - } else { - userMap.put(script, i + 1); - } + userMap.merge(script, 1, Integer::sum); } /** diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java index b823649c4..2ba676734 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/logging/ThreadLocalLogEvent.java @@ -17,7 +17,6 @@ import com.intuit.tank.harness.AmazonUtil; import com.intuit.tank.harness.HostInfo; import com.intuit.tank.logging.SourceType; -import com.intuit.tank.vm.api.enumerated.VMRegion; import org.apache.logging.log4j.ThreadContext; /** diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasySSLProtocolSocketFactory.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasySSLProtocolSocketFactory.java deleted file mode 100644 index e91736873..000000000 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasySSLProtocolSocketFactory.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.intuit.tank.harness.ssl; - -/* - * #%L - * Intuit Tank Agent (apiharness) - * %% - * Copyright (C) 2011 - 2015 Intuit Inc. - * %% - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * #L% - */ - -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; -import java.net.UnknownHostException; - -import org.apache.commons.httpclient.ConnectTimeoutException; -import org.apache.commons.httpclient.HttpClientError; -import org.apache.commons.httpclient.params.HttpConnectionParams; -import org.apache.commons.httpclient.protocol.ControllerThreadSocketFactory; -import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import com.sun.net.ssl.SSLContext; -import com.sun.net.ssl.TrustManager; - -/** - *

- * EasySSLProtocolSocketFactory can be used to creats SSL {@link Socket}s that accept self-signed certificates. - *

- *

- * This socket factory SHOULD NOT be used for productive systems due to security reasons, unless it is a concious - * decision and you are perfectly aware of security implications of accepting self-signed certificates - *

- * - *

- * Example of using custom protocol socket factory for a specific host: - * - *

- * Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
- * 
- * HttpClient client = new HttpClient();
- * client.getHostConfiguration().setHost("localhost", 443, easyhttps);
- * // use relative url only
- * GetMethod httpget = new GetMethod("/");
- * client.executeMethod(httpget);
- * 
- * - *

- *

- * Example of using custom protocol socket factory per default instead of the standard one: - * - *

- * Protocol easyhttps = new Protocol("https", new EasySSLProtocolSocketFactory(), 443);
- * Protocol.registerProtocol("https", easyhttps);
- * 
- * HttpClient client = new HttpClient();
- * GetMethod httpget = new GetMethod("https://localhost/");
- * client.executeMethod(httpget);
- * 
- * - *

- * - * @author Oleg Kalnichevski - * - *

- * DISCLAIMER: HttpClient developers DO NOT actively support this component. The component is provided as a - * reference material, which may be inappropriate for use without additional customization. - *

- */ - -@SuppressWarnings({ "restriction", "deprecation" }) -public class EasySSLProtocolSocketFactory implements SecureProtocolSocketFactory { - - /** Log object for this class. */ - private static final Log LOG = LogFactory.getLog(EasySSLProtocolSocketFactory.class); - - private SSLContext sslcontext = null; - - /** - * Constructor for EasySSLProtocolSocketFactory. - */ - public EasySSLProtocolSocketFactory() { - super(); - } - - private static SSLContext createEasySSLContext() { - try { - SSLContext context = SSLContext.getInstance("SSL"); - context.init( - null, - new TrustManager[] { new EasyX509TrustManager(null) }, - null); - return context; - } catch (Exception e) { - LOG.error(e.getMessage(), e); - throw new HttpClientError(e.toString()); - } - } - - private SSLContext getSSLContext() { - if (this.sslcontext == null) { - this.sslcontext = createEasySSLContext(); - } - return this.sslcontext; - } - - /** - * @see SecureProtocolSocketFactory#createSocket(java.lang.String,int,java.net.InetAddress,int) - */ - public Socket createSocket( - String host, - int port, - InetAddress clientHost, - int clientPort) - throws IOException, UnknownHostException { - - return getSSLContext().getSocketFactory().createSocket( - host, - port, - clientHost, - clientPort - ); - } - - /** - * Attempts to get a new socket connection to the given host within the given time limit. - *

- * To circumvent the limitations of older JREs that do not support connect timeout a controller thread is executed. - * The controller thread attempts to create a new socket within the given limit of time. If socket constructor does - * not return until the timeout expires, the controller terminates and throws an {@link ConnectTimeoutException} - *

- * - * @param host - * the host name/IP - * @param port - * the port on the host - * @param clientHost - * the local host name/IP to bind the socket to - * @param clientPort - * the port on the local machine - * @param params - * {@link HttpConnectionParams Http connection parameters} - * - * @return Socket a new socket - * - * @throws IOException - * if an I/O error occurs while creating the socket - * @throws UnknownHostException - * if the IP address of the host cannot be determined - */ - public Socket createSocket( - final String host, - final int port, - final InetAddress localAddress, - final int localPort, - final HttpConnectionParams params - ) throws IOException, UnknownHostException, ConnectTimeoutException { - if (params == null) { - throw new IllegalArgumentException("Parameters may not be null"); - } - int timeout = params.getConnectionTimeout(); - if (timeout == 0) { - return createSocket(host, port, localAddress, localPort); - } else { - // To be eventually deprecated when migrated to Java 1.4 or above - return ControllerThreadSocketFactory.createSocket( - this, host, port, localAddress, localPort, timeout); - } - } - - /** - * @see SecureProtocolSocketFactory#createSocket(java.lang.String,int) - */ - public Socket createSocket(String host, int port) - throws IOException, UnknownHostException { - return getSSLContext().getSocketFactory().createSocket( - host, - port - ); - } - - /** - * @see SecureProtocolSocketFactory#createSocket(java.net.Socket,java.lang.String,int,boolean) - */ - public Socket createSocket( - Socket socket, - String host, - int port, - boolean autoClose) - throws IOException, UnknownHostException { - return getSSLContext().getSocketFactory().createSocket( - socket, - host, - port, - autoClose - ); - } - - public boolean equals(Object obj) { - return ((obj != null) && obj.getClass().equals(EasySSLProtocolSocketFactory.class)); - } - - public int hashCode() { - return EasySSLProtocolSocketFactory.class.hashCode(); - } - -} diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasyX509TrustManager.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasyX509TrustManager.java deleted file mode 100644 index 435a1dddd..000000000 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/ssl/EasyX509TrustManager.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.intuit.tank.harness.ssl; - -/* - * #%L - * Intuit Tank Agent (apiharness) - * %% - * Copyright (C) 2011 - 2015 Intuit Inc. - * %% - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * #L% - */ - -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.intuit.tank.harness.logging.LogUtil; -import com.intuit.tank.logging.LogEventType; -import com.sun.net.ssl.TrustManager; -import com.sun.net.ssl.TrustManagerFactory; -import com.sun.net.ssl.X509TrustManager; - -/** - *

- * EasyX509TrustManager unlike default {@link X509TrustManager} accepts self-signed certificates. - *

- *

- * This trust manager SHOULD NOT be used for productive systems due to security reasons, unless it is a concious - * decision and you are perfectly aware of security implications of accepting self-signed certificates - *

- * - * @author Adrian Sutton - * @author Oleg Kalnichevski - * - *

- * DISCLAIMER: HttpClient developers DO NOT actively support this component. The component is provided as a - * reference material, which may be inappropriate for use without additional customization. - *

- */ - -@SuppressWarnings({ "deprecation", "restriction" }) -public class EasyX509TrustManager implements X509TrustManager { - private static final Logger LOG = LogManager.getLogger(EasyX509TrustManager.class); - private X509TrustManager standardTrustManager = null; - - /** - * Constructor for EasyX509TrustManager. - */ - public EasyX509TrustManager(KeyStore keystore) throws NoSuchAlgorithmException, KeyStoreException { - super(); - TrustManagerFactory factory = TrustManagerFactory.getInstance("SunX509"); - factory.init(keystore); - TrustManager[] trustmanagers = factory.getTrustManagers(); - if (trustmanagers.length == 0) { - throw new NoSuchAlgorithmException("SunX509 trust manager not supported"); - } - this.standardTrustManager = (X509TrustManager) trustmanagers[0]; - } - - /** - * @see com.sun.net.ssl.X509TrustManager#isClientTrusted(X509Certificate[]) - */ - public boolean isClientTrusted(X509Certificate[] certificates) { - // return this.standardTrustManager.isClientTrusted(certificates); - boolean clientTrusted = this.standardTrustManager.isClientTrusted(certificates); - if (!clientTrusted) { - LOG.warn("Client not natively trusted. Ignoring and Trusting anyway.", - LogEventType.System); - } - return true; - } - - /** - * @see com.sun.net.ssl.X509TrustManager#isServerTrusted(X509Certificate[]) - */ - public boolean isServerTrusted(X509Certificate[] certificates) { - // if ((certificates != null) && LOG.isDebugEnabled()) { - // LOG.debug("Server certificate chain:"); - // for (int i = 0; i < certificates.length; i++) { - // LOG.debug("X509Certificate[" + i + "]=" + certificates[i]); - // } - // } - if ((certificates != null) && (certificates.length == 1)) { - X509Certificate certificate = certificates[0]; - try { - certificate.checkValidity(); - } catch (CertificateException e) { - LOG.warn(LogUtil.getLogMessage("Sertver not natively trusted. Ignoring and Trusting anyway. Reason: " - + e.toString(), LogEventType.System)); - // return false; - } - } else { - boolean serverTrusted = this.standardTrustManager.isServerTrusted(certificates); - if (!serverTrusted) { - LOG.warn("Server not natively trusted. Ignoring and Trusting anyway."); - } - } - return true; - } - - /** - * @see com.sun.net.ssl.X509TrustManager#getAcceptedIssuers() - */ - public X509Certificate[] getAcceptedIssuers() { - return this.standardTrustManager.getAcceptedIssuers(); - } -} diff --git a/agent/apiharness_pkg/pom.xml b/agent/apiharness_pkg/pom.xml index 16b6b6ec7..48428616f 100644 --- a/agent/apiharness_pkg/pom.xml +++ b/agent/apiharness_pkg/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 diff --git a/agent/http_client_3/pom.xml b/agent/http_client_3/pom.xml index 8d50b49ae..23cbb754d 100644 --- a/agent/http_client_3/pom.xml +++ b/agent/http_client_3/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 http_client_commons_3 diff --git a/agent/http_client_4/pom.xml b/agent/http_client_4/pom.xml index 44b49b23d..3f3164f00 100644 --- a/agent/http_client_4/pom.xml +++ b/agent/http_client_4/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 http_client_commons_4 diff --git a/agent/http_client_5/pom.xml b/agent/http_client_5/pom.xml index 704ef4c33..623c76341 100644 --- a/agent/http_client_5/pom.xml +++ b/agent/http_client_5/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank agent-parent - 2.3.0 + 2.3.1 http_client_commons_5 diff --git a/agent/pom.xml b/agent/pom.xml index 90d71952e..fb9c2165d 100644 --- a/agent/pom.xml +++ b/agent/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 agent-parent diff --git a/all-in-one.sh b/all-in-one.sh index 4c23fe2c2..02089b194 100644 --- a/all-in-one.sh +++ b/all-in-one.sh @@ -32,36 +32,41 @@ rm -fr $INSTALL_DIR/tomcat6/webapps/docs $INSTALL_DIR/tomcat6/webapps/examples $ wget -O $INSTALL_DIR/tomcat6/webapps/ROOT.war http://tank-public.s3-website-us-east-1.amazonaws.com/tank.war 2>/dev/null echo "Creating start script at $INSTALL_DIR/start.sh ..." -echo "#!/bin/bash">$INSTALL_DIR/start.sh -echo "echo \"Starting Tomcat...\"">>$INSTALL_DIR/start.sh -echo "export JAVA_OPTS=\"-Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -Djava.awt.headless=true\"">>$INSTALL_DIR/start.sh -echo "cd $INSTALL_DIR/tomcat6/">>$INSTALL_DIR/start.sh -echo "bin/startup.sh 2> \&1 >/dev/null">>$INSTALL_DIR/start.sh -echo "echo \"Tomcat started.\"">>$INSTALL_DIR/start.sh -echo "cd $INSTALL_DIR/agent-standalone/">>$INSTALL_DIR/start.sh -echo "echo \"Starting Agent...\"">>$INSTALL_DIR/start.sh -echo "./run.sh 2> \&1 >/dev/null">>$INSTALL_DIR/start.sh -echo "echo \"Agent started.\"">>$INSTALL_DIR/start.sh +cat << EOF > $INSTALL_DIR/start.sh +#!/bin/bash +echo "Starting Tomcat..." +export JAVA_OPTS="-Xms256m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=128m -Djava.awt.headless=true" +cd $INSTALL_DIR/tomcat6/ +bin/startup.sh &> /dev/null +echo "Tomcat started." +cd $INSTALL_DIR/agent-standalone/ +echo "Starting Agent..." +./run.sh &> /dev/null +echo "Agent started." +EOF chmod 755 $INSTALL_DIR/start.sh 2>/dev/null echo "Creating stop script at $INSTALL_DIR/stop.sh..." -echo "#!/bin/bash">$INSTALL_DIR/stop.sh -echo "echo \"Stopping Tomcat...\"">>$INSTALL_DIR/stop.sh -echo "$INSTALL_DIR/tomcat6/bin/shutdown.sh 2> \&1 >/dev/null">>$INSTALL_DIR/stop.sh -echo "echo \"Stopping Agent...\"">>$INSTALL_DIR/stop.sh -echo "kill \$(ps aux | grep '[a]gent-standalone' | awk '{print \$2}') 2> \&1 >/dev/null">>$INSTALL_DIR/stop.sh -echo "kill \$(ps aux | grep '[a]piharness' | awk '{print \$2}') 2> \&1 >/dev/null">>$INSTALL_DIR/stop.sh -echo "kill \$(ps aux | grep '[t]omcat' | awk '{print \$2}') 2> \&1 >/dev/null">>$INSTALL_DIR/stop.sh -echo "echo \"Tomcat and Agents stopped.\"">>$INSTALL_DIR/stop.sh +cat << EOF > $INSTALL_DIR/stop.sh +#!/bin/bash +echo "Stopping Tomcat..." +$INSTALL_DIR/tomcat6/bin/shutdown.sh &> /dev/null +echo "Stopping Agent..." +kill $(ps aux | grep '[a]gent-standalone' | awk '{print $2}') &> /dev/null +kill $(ps aux | grep '[a]piharness' | awk '{print $2}') &> /dev/null +kill $(ps aux | grep '[t]omcat' | awk '{print $2}') &> /dev/null +echo "Tomcat and Agents stopped." +EOF chmod 755 $INSTALL_DIR/stop.sh 2>/dev/null -echo "#!/bin/bash">$INSTALL_DIR/agent-standalone/run.sh -echo "controller=\"http://localhost:8080\"">>$INSTALL_DIR/agent-standalone/run.sh -echo "host=\`hostname\`">>$INSTALL_DIR/agent-standalone/run.sh -echo "capacity=400">>$INSTALL_DIR/agent-standalone/run.sh -echo "nohup java -jar agent-standalone-all.jar -controller=\$controller -host=\$host -capacity=\$capacity &">>$INSTALL_DIR/agent-standalone/run.sh - - +mkdir -p $INSTALL_DIR/agent-standalone +cat << EOF > $INSTALL_DIR/agent-standalone/run.sh +#!/bin/bash +controller="http://localhost:8080" +host=`hostname` +capacity=400 +nohup java -jar agent-standalone-all.jar -controller=$controller -host=$host -capacity=$capacity & +EOF echo "Installing all in one in $INSTALL_DIR" -echo "Run $INSTALL_DIR/start.sh to start the all in one server and $INSTALL_DIR/stop.sh to kill it" \ No newline at end of file +echo "Run $INSTALL_DIR/start.sh to start the all in one server and $INSTALL_DIR/stop.sh to kill it" diff --git a/api/pom.xml b/api/pom.xml index 97042d57b..db82841aa 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 api @@ -49,7 +49,12 @@ org.apache.commons commons-math3 - + + + org.apache.commons + commons-lang3 + + org.json json @@ -59,15 +64,15 @@ javax.xml.bind jaxb-api - + com.amazonaws - aws-java-sdk-ec2 + aws-java-sdk-s3 - com.amazonaws - aws-java-sdk-s3 + com.google.guava + guava diff --git a/api/src/test/resources/settings.xml b/api/src/test/resources/settings.xml new file mode 100644 index 000000000..33baad811 --- /dev/null +++ b/api/src/test/resources/settings.xml @@ -0,0 +1,558 @@ + + + + + + datafiles + + + timing + + + jars + + + tmpfiles + + + tank + + + http://localhost:8080/tank + + + false + + + false + + + true + + + + All Products + My Product + + + + + + + + + + + localhost + 25 + do_not_reply@mydomain.com + + + + + + com.intuit.tank.reporting.db.DatabaseResultsReporter + + com.intuit.tank.reporting.db.DatabaseResultsReader + + + + + + + + + + + + + + + + + + /tmp + + + 8090 + + + 5000 + + + 360000 + + + 15000 + + 30000 + + + 5000 + + + 180000 + + + 7200000 + + + false + + + false + + + false + + + 30 + + + + .*text.* + .*json.* + .*xml.* + + + + +
test_flag
+
+ + + + com.intuit.tank.httpclient3.TankHttpClient3 + + com.intuit.tank.httpclient4.TankHttpClient4 + + com.intuit.tank.httpclient5.TankHttpClient5 + + + Apache HttpClient 5 + +
+ + + + US_EAST + + + false + + + + + + + + security_group + myKey + + + + + + false + + + + + + AWS_SECRET_KEY_ID + AWS_SECRET_KEY + + + + + + + + + tank_admin + + + + + + [AMI-ID] + [KEYPAIR] + + + + + + + + + + [AMI-ID] + [KEYPAIR] + + + + + + + + + + + + + + + + + + + + + 5m + + 10m + + 2 + + 30s + + + + + + 50 + 10 + + com.intuit.tank.persistence.databases.AmazonDynamoDatabaseDocApi + + + + + + + + + admin + user + script-manager + project-manager + job-manager + guest + + + + + + + user + project-manager + + + + + project-manager + + + + + project-manager + + + + + + user + script-manager + + + + + script-manager + + + + + script-manager + + + + + + user + script-manager + + + + + script-manager + + + + + script-manager + + + + + + user + script-manager + project-manager + + + + + script-manager + project-manager + + + + + + job-manager + project-manager + + + + + + + admin + admin + admin@example.com + admin + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/buildspec.yml b/buildspec.yml index 9f5499b0d..7a89ab0e3 100644 --- a/buildspec.yml +++ b/buildspec.yml @@ -7,7 +7,7 @@ env: phases: build: commands: - - mvn clean install -P release -Dmaven.test.skip=true + - mvn clean install -P release artifacts: type: NONE diff --git a/data_access/pom.xml b/data_access/pom.xml index b245a8d49..2527bd9fe 100644 --- a/data_access/pom.xml +++ b/data_access/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 diff --git a/data_access/src/main/java/com/intuit/tank/dao/DataFileDao.java b/data_access/src/main/java/com/intuit/tank/dao/DataFileDao.java index 9e59ed5a8..1bee79b29 100644 --- a/data_access/src/main/java/com/intuit/tank/dao/DataFileDao.java +++ b/data_access/src/main/java/com/intuit/tank/dao/DataFileDao.java @@ -72,9 +72,7 @@ public DataFile storeDataFile(@Nonnull DataFile df, @Nullable InputStream is) { storeFile(is, df); df = saveOrUpdate(df); delete = false; - } catch (IOException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { + } catch (IOException | IllegalAccessException e) { throw new RuntimeException(e); } finally { if (delete) { diff --git a/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java b/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java index 91d1c4f52..d9293e6f6 100644 --- a/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java +++ b/data_access/src/main/java/com/intuit/tank/dao/ScriptDao.java @@ -24,7 +24,6 @@ import javax.annotation.Nonnull; import javax.persistence.EntityManager; -import org.apache.commons.io.IOUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.AnnotationException; diff --git a/data_model/pom.xml b/data_model/pom.xml index e09f28ca0..c917c377c 100644 --- a/data_model/pom.xml +++ b/data_model/pom.xml @@ -6,16 +6,14 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 - data-model jar Intuit Tank data model - ${project.groupId} @@ -27,17 +25,16 @@ org.hibernate hibernate-envers - + + - commons-io - commons-io + javax.validation + validation-api - + - org.picketlink - picketlink + commons-io + commons-io - - diff --git a/doc/doc_xslt/pom.xml b/doc/doc_xslt/pom.xml index 67a1efab9..1aa46a8e4 100644 --- a/doc/doc_xslt/pom.xml +++ b/doc/doc_xslt/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent-doc - 2.3.0 + 2.3.1 pressgang-xslt-ns diff --git a/doc/jdocbook_style/pom.xml b/doc/jdocbook_style/pom.xml index b316b8bb8..19618a6e6 100644 --- a/doc/jdocbook_style/pom.xml +++ b/doc/jdocbook_style/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent-doc - 2.3.0 + 2.3.1 tank-common-jdocbook-style diff --git a/doc/pom.xml b/doc/pom.xml index 78774280c..6fb4b1a3f 100755 --- a/doc/pom.xml +++ b/doc/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 tank-parent-doc diff --git a/doc/tank_installation_guide/pom.xml b/doc/tank_installation_guide/pom.xml index 410a2bbcb..d18e7f1f8 100644 --- a/doc/tank_installation_guide/pom.xml +++ b/doc/tank_installation_guide/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank tank-parent-doc - 2.3.0 + 2.3.1 tank-installation-guide diff --git a/doc/tank_user_guide/pom.xml b/doc/tank_user_guide/pom.xml index 1771defa3..af9a57c38 100755 --- a/doc/tank_user_guide/pom.xml +++ b/doc/tank_user_guide/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank tank-parent-doc - 2.3.0 + 2.3.1 tank-user-guide diff --git a/harness_data/pom.xml b/harness_data/pom.xml index 778b82db6..6e8acbf12 100644 --- a/harness_data/pom.xml +++ b/harness_data/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 harness-data diff --git a/mail/pom.xml b/mail/pom.xml index dd745c1fd..0a9c88a41 100644 --- a/mail/pom.xml +++ b/mail/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 tank-mail @@ -22,21 +22,11 @@ ${project.version} - - javax.enterprise - cdi-api - - javax.mail mail - - commons-io - commons-io - - org.apache.commons commons-lang3 diff --git a/pom.xml b/pom.xml index 854fbdf2b..d380ee1e3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 pom Tank Parent @@ -28,12 +28,12 @@ self_signed_tank.p12 4.2.21.Final - 1.11.516 + 1.11.650 - 9.0.14 + 9.0.27 - 3.1.0.Final - 2.0 + 3.1.1.Final + 2.0 2.7.1.Final 2.11.1 @@ -44,16 +44,17 @@ 7.0 1.7.0 3.0.0-M3 - 2.28 + 2.29 1.4.1.Final - 4.5.7 + 4.5.9 5.0-beta2 + 8.0.0 - 2.4.9 - 1.1-groovy-2.4 + 2.4.17 + 1.3-groovy-2.5 - 3.8.0 + 3.8.1 8 8 @@ -115,13 +116,48 @@ - org.codehaus.mojo - cobertura-maven-plugin + org.jacoco + jacoco-maven-plugin + + + default-prepare-agent + + prepare-agent + + + + default-report + test + + report + + + + default-aggregate + verify + + report-aggregate + + + + default-check + + check + + + + org/**/*.class + **/trial/**/*.class + **/tools/**/*.class + **/proxy/**/*.class + + + + + - - @@ -224,23 +260,11 @@ - - - org.apache.commons - commons-lang3 - - org.apache.logging.log4j log4j-core - - com.webcohesion.enunciate - enunciate-core - provided - - com.google.code.findbugs jsr305 @@ -262,7 +286,7 @@ ${project.groupId} test-support - 2.3.0 + 2.3.1 test @@ -291,12 +315,6 @@ test - - com.h2database - h2 - test - - org.apache.tomcat.embed tomcat-embed-core @@ -318,13 +336,6 @@ tomcat-jasper provided - - - org.jboss.weld.servlet - weld-servlet-shaded - - - javax.servlet.jsp javax.servlet.jsp-api @@ -337,6 +348,17 @@ + + mysql + mysql-connector-java + 8.0.17 + + + + com.google.guava + guava + 28.0-jre + net.sf.docbook @@ -506,7 +528,7 @@ org.apache.commons commons-compress - 1.18 + 1.19 @@ -560,7 +582,8 @@ org.apache.logging.log4j log4j-core - 2.11.1 + + 2.11.2 commons-logging @@ -640,11 +663,6 @@ ${version.jersey} - - saxpath - saxpath - 1.0-FCS - com.metaparadigm json-rpc @@ -740,17 +758,17 @@ org.apache.lucene lucene-core - 4.10.4 + ${version.lucene} org.apache.lucene lucene-analyzers-common - 4.10.4 + ${version.lucene} org.apache.lucene lucene-queryparser - 4.10.4 + ${version.lucene} jaxen @@ -776,20 +794,20 @@ javax.enterprise cdi-api - ${cdi-version} + ${cdi.version} provided org.jboss.weld.servlet weld-servlet-shaded - ${weld-version} + ${weld.version} runtime org.junit.jupiter junit-jupiter-api - 5.2.0 + 5.5.1 test @@ -849,7 +867,7 @@ org.codehaus.mojo license-maven-plugin - 1.16 + 2.0.0 @@ -867,7 +885,7 @@ org.apache.maven.plugins maven-war-plugin - 3.2.2 + 3.2.3 @@ -897,6 +915,12 @@ + + org.apache.maven.plugins + maven-surefire-plugin + ${version.surefire} + + org.apache.maven.plugins maven-surefire-report-plugin @@ -945,12 +969,12 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.0.0 + 3.1.0 ${project.groupId} test-support - 2.3.0 + 2.3.1 @@ -1002,41 +1026,9 @@ - org.codehaus.mojo - cobertura-maven-plugin - 2.7 - - - org.ow2.asm - asm - 7.0 - - - - true - - html - xml - - - - org.fife.** - - - org/**/*.class - **/trial/**/*.class - **/tools/**/*.class - **/proxy/**/*.class - - - - - - - clean - - - + org.jacoco + jacoco-maven-plugin + 0.8.4 @@ -1133,8 +1125,9 @@ org.apache.maven.plugins maven-surefire-plugin - ${version.surefire} + + ${argLine} manual,integration,experimental **/*Test.java diff --git a/proxy-parent/WebConversation/pom.xml b/proxy-parent/WebConversation/pom.xml index 93831860e..55be9cae9 100644 --- a/proxy-parent/WebConversation/pom.xml +++ b/proxy-parent/WebConversation/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank proxy-parent - 2.3.0 + 2.3.1 WebConversation diff --git a/proxy-parent/WebConversation/src/main/java/com/intuit/tank/util/HeaderParser.java b/proxy-parent/WebConversation/src/main/java/com/intuit/tank/util/HeaderParser.java index 9e1a7c9a1..abb549eae 100644 --- a/proxy-parent/WebConversation/src/main/java/com/intuit/tank/util/HeaderParser.java +++ b/proxy-parent/WebConversation/src/main/java/com/intuit/tank/util/HeaderParser.java @@ -67,11 +67,7 @@ public HeaderParser(HeaderType type, String firstLine, Collection
header this.firstLine = firstLine != null ? firstLine.split("\\s") : new String[0]; for (Header header : headers) { - List list = headerMap.get(header.getKey().toLowerCase()); - if (list == null) { - list = new ArrayList(); - headerMap.put(header.getKey().toLowerCase(), list); - } + List list = headerMap.computeIfAbsent(header.getKey().toLowerCase(), k -> new ArrayList()); String value = header.getValue(); if (this.headerType == HeaderType.Request && header.getKey().equalsIgnoreCase("Authorization")) { int index = value.indexOf(':'); diff --git a/proxy-parent/owasp-proxy/pom.xml b/proxy-parent/owasp-proxy/pom.xml index cdda41aeb..71092ed9d 100755 --- a/proxy-parent/owasp-proxy/pom.xml +++ b/proxy-parent/owasp-proxy/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank proxy-parent - 2.3.0 + 2.3.1 owasp-proxy @@ -78,12 +78,18 @@ jcifs 1.3.14-kohsuke-1 - - junit - junit - 4.12 - test - + + junit + junit + 4.12 + test + + + + javax.validation + validation-api + + diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/Main.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/Main.java index ca49d4541..647b0bb75 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/Main.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/Main.java @@ -148,10 +148,7 @@ private static SSLContextSelector getSSLContextSelector() try { return new AutoGeneratingContextSelector(ks, type, password, password, alias); - } catch (GeneralSecurityException e) { - System.err.println("Error loading CA keys from keystore: " - + e.getLocalizedMessage()); - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error loading CA keys from keystore: " + e.getLocalizedMessage()); } @@ -162,23 +159,15 @@ private static SSLContextSelector getSSLContextSelector() ca); try { ssl.save(ks, type, password, password, alias); - } catch (GeneralSecurityException e) { - System.err.println("Error saving CA keys to keystore: " - + e.getLocalizedMessage()); - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error saving CA keys to keystore: " + e.getLocalizedMessage()); } - FileWriter pem = null; - try { - pem = new FileWriter("auto_generated_ca.pem"); + try (FileWriter pem = new FileWriter("auto_generated_ca.pem")) { pem.write(ssl.getCACert()); } catch (IOException e) { System.err.println("Error writing CA cert : " + e.getLocalizedMessage()); - } finally { - if (pem != null) - pem.close(); } return ssl; } diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/daemon/Proxy.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/daemon/Proxy.java index 72231b341..8684db104 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/daemon/Proxy.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/daemon/Proxy.java @@ -48,8 +48,6 @@ public Proxy(InetSocketAddress listen, Executor executor, final TargetedConnectionHandler connectionHandler, final InetSocketAddress target) throws IOException { super(listen, executor, connectionHandler == null ? null - : (Socket socket) -> { - connectionHandler.handleConnection(socket, target); - }); + : (Socket socket) -> connectionHandler.handleConnection(socket, target)); } } diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/http/server/ConversationServiceHttpRequestHandler.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/http/server/ConversationServiceHttpRequestHandler.java index f24ca7478..b0f9b0f5e 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/http/server/ConversationServiceHttpRequestHandler.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/http/server/ConversationServiceHttpRequestHandler.java @@ -172,15 +172,12 @@ private StreamingResponse handleLocalRequest(StreamingRequest request) { break; } } - } catch (MessageFormatException mfe) { + } catch (MessageFormatException | NumberFormatException mfe) { mfe.printStackTrace(); return err_400(); } catch (DataAccessException dae) { dae.printStackTrace(); return err_500(); - } catch (NumberFormatException nfe) { - nfe.printStackTrace(); - return err_400(); } return err_404(); } diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/AutoGeneratingContextSelector.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/AutoGeneratingContextSelector.java index 989b10a66..27e034f51 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/AutoGeneratingContextSelector.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/AutoGeneratingContextSelector.java @@ -128,8 +128,7 @@ public AutoGeneratingContextSelector(File keystore, String type, private void initFromKeyStore(File ks, String type, char[] kspassword, char[] keyPassword, String alias) throws GeneralSecurityException, IOException { - InputStream in = new FileInputStream(ks); - try { + try (InputStream in = new FileInputStream(ks)) { KeyStore keyStore = KeyStore.getInstance(type); keyStore.load(in, kspassword); caKey = (PrivateKey) keyStore.getKey(alias, keyPassword); @@ -138,8 +137,6 @@ private void initFromKeyStore(File ks, String type, char[] kspassword, System.arraycopy(certChain, 0, caCerts, 0, certChain.length); } catch (IOException ioe) { ioe.printStackTrace(); - } finally { - in.close(); } } @@ -193,13 +190,10 @@ public void save(File keyStore, String type, char[] password, KeyStore store = KeyStore.getInstance(type); store.load(null, password); store.setKeyEntry(caAlias, caKey, keyPassword, caCerts); - OutputStream out = new FileOutputStream(keyStore); - try { + try (OutputStream out = new FileOutputStream(keyStore)) { store.store(out, password); } catch (IOException ioe) { ioe.printStackTrace(); - } finally { - out.close(); } } diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/DefaultClientContextSelector.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/DefaultClientContextSelector.java index 8b9b72c99..7a9aae496 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/DefaultClientContextSelector.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/ssl/DefaultClientContextSelector.java @@ -59,10 +59,7 @@ public SSLContext select(InetSocketAddress target) { context.init(null, new TrustManager[] { getTrustManager() }, new SecureRandom()); contextMap.put(host, context); - } catch (NoSuchAlgorithmException e) { - // should never happen - e.printStackTrace(); - } catch (KeyManagementException e) { + } catch (NoSuchAlgorithmException | KeyManagementException e) { // should never happen e.printStackTrace(); } @@ -97,10 +94,8 @@ public void checkServerTrusted(X509Certificate[] certs, }; } trustManager = manager; - } catch (NoSuchAlgorithmException nsae) { + } catch (NoSuchAlgorithmException | KeyStoreException nsae) { nsae.printStackTrace(); - } catch (KeyStoreException kse) { - kse.printStackTrace(); } } diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/Base64.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/Base64.java index 64e6e8519..931be79f4 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/Base64.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/Base64.java @@ -1304,16 +1304,12 @@ public static byte[] decode(String s, int options) int head = ((int) bytes[0] & 0xff) | ((bytes[1] << 8) & 0xff00); if (java.util.zip.GZIPInputStream.GZIP_MAGIC == head) { - java.io.ByteArrayInputStream bais = null; - java.util.zip.GZIPInputStream gzis = null; - java.io.ByteArrayOutputStream baos = null; byte[] buffer = new byte[2048]; int length = 0; - try { - baos = new java.io.ByteArrayOutputStream(); - bais = new java.io.ByteArrayInputStream(bytes); - gzis = new java.util.zip.GZIPInputStream(bais); + try (java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(); + java.io.ByteArrayInputStream bais = new java.io.ByteArrayInputStream(bytes); + java.util.zip.GZIPInputStream gzis = new java.util.zip.GZIPInputStream(bais)) { while ((length = gzis.read(buffer)) >= 0) { baos.write(buffer, 0, length); @@ -1322,25 +1318,10 @@ public static byte[] decode(String s, int options) // No error? Get new bytes. bytes = baos.toByteArray(); - } // end try - catch (java.io.IOException e) { + } catch (IOException e) { e.printStackTrace(); // Just return originally-decoded bytes - } // end catch - finally { - try { - baos.close(); - } catch (IOException e) { - } - try { - gzis.close(); - } catch (IOException e) { - } - try { - bais.close(); - } catch (IOException e) { - } - } // end finally + } } // end if: gzipped } // end if: bytes.length >= 2 @@ -1426,12 +1407,10 @@ public Class resolveClass( obj = ois.readObject(); } // end try - catch (java.io.IOException e) { - throw e; // Catch and throw in order to execute finally{} - } // end catch - catch (java.lang.ClassNotFoundException e) { + catch (IOException | ClassNotFoundException e) { throw e; // Catch and throw in order to execute finally{} } // end catch + // end catch finally { try { bais.close(); @@ -1471,21 +1450,12 @@ public static void encodeToFile(byte[] dataToEncode, String filename) throw new NullPointerException("Data to encode was null."); } // end iff - Base64.OutputStream bos = null; - try { - bos = new Base64.OutputStream( - new java.io.FileOutputStream(filename), Base64.ENCODE); + try (OutputStream bos = new OutputStream( + new java.io.FileOutputStream(filename), Base64.ENCODE)) { bos.write(dataToEncode); - } // end try - catch (java.io.IOException e) { + } catch (IOException e) { throw e; // Catch and throw to execute finally{} block - } // end catch: java.io.IOException - finally { - try { - bos.close(); - } catch (Exception e) { - } - } // end finally + } } // end encodeToFile @@ -1508,21 +1478,12 @@ public static void encodeToFile(byte[] dataToEncode, String filename) public static void decodeToFile(String dataToDecode, String filename) throws java.io.IOException { - Base64.OutputStream bos = null; - try { - bos = new Base64.OutputStream( - new java.io.FileOutputStream(filename), Base64.DECODE); + try (OutputStream bos = new OutputStream( + new java.io.FileOutputStream(filename), Base64.DECODE)) { bos.write(dataToDecode.getBytes(PREFERRED_ENCODING)); - } // end try - catch (java.io.IOException e) { + } catch (IOException e) { throw e; // Catch and throw to execute finally{} block - } // end catch: java.io.IOException - finally { - try { - bos.close(); - } catch (Exception e) { - } - } // end finally + } } // end decodeToFile @@ -1664,21 +1625,12 @@ public static void encodeFileToFile(String infile, String outfile) throws java.io.IOException { String encoded = Base64.encodeFromFile(infile); - java.io.OutputStream out = null; - try { - out = new java.io.BufferedOutputStream( - new java.io.FileOutputStream(outfile)); + try (java.io.OutputStream out = new java.io.BufferedOutputStream( + new java.io.FileOutputStream(outfile))) { out.write(encoded.getBytes("US-ASCII")); // Strict, 7-bit output. - } // end try - catch (java.io.IOException e) { + } catch (IOException e) { throw e; // Catch and release to execute finally{} - } // end catch - finally { - try { - out.close(); - } catch (Exception ex) { - } - } // end finally + } } // end encodeFileToFile /** @@ -1696,21 +1648,12 @@ public static void decodeFileToFile(String infile, String outfile) throws java.io.IOException { byte[] decoded = Base64.decodeFromFile(infile); - java.io.OutputStream out = null; - try { - out = new java.io.BufferedOutputStream( - new java.io.FileOutputStream(outfile)); + try (java.io.OutputStream out = new java.io.BufferedOutputStream( + new java.io.FileOutputStream(outfile))) { out.write(decoded); - } // end try - catch (java.io.IOException e) { + } catch (IOException e) { throw e; // Catch and release to execute finally{} - } // end catch - finally { - try { - out.close(); - } catch (Exception ex) { - } - } // end finally + } } // end decodeFileToFile /* I N N E R C L A S S I N P U T S T R E A M */ diff --git a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/PacProxySelector.java b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/PacProxySelector.java index b6936e9f9..b63d81343 100644 --- a/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/PacProxySelector.java +++ b/proxy-parent/owasp-proxy/src/main/java/org/owasp/proxy/util/PacProxySelector.java @@ -74,12 +74,9 @@ protected void init(final Reader pacReader) throws Exception { } initPacFunctions(se); - InputStreamReader isrUtils = new InputStreamReader(getClass() - .getResourceAsStream("PacUtils.js")); - try { + try (InputStreamReader isrUtils = new InputStreamReader(getClass() + .getResourceAsStream("PacUtils.js"))) { se.eval(isrUtils); - } finally { - isrUtils.close(); } try { diff --git a/proxy-parent/pom.xml b/proxy-parent/pom.xml index cc8f51c1f..4849ecd6a 100644 --- a/proxy-parent/pom.xml +++ b/proxy-parent/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 proxy-parent diff --git a/proxy-parent/proxy-extension/pom.xml b/proxy-parent/proxy-extension/pom.xml index f7e666166..ae056c026 100644 --- a/proxy-parent/proxy-extension/pom.xml +++ b/proxy-parent/proxy-extension/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank proxy-parent - 2.3.0 + 2.3.1 proxy-extension @@ -32,24 +32,5 @@ commons-cli commons-cli - - - org.springframework - spring-jdbc - 2.5.6 - compile - - - aopalliance - aopalliance - - - spring-context - org.springframework - - - true - - diff --git a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/EmbeddedProxy.java b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/EmbeddedProxy.java index 13ceeccd7..3d0b06499 100644 --- a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/EmbeddedProxy.java +++ b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/EmbeddedProxy.java @@ -180,16 +180,12 @@ public static void generateKeystore(File ks) try { ssl = new AutoGeneratingContextSelector(ca); ssl.save(ks, CA_TYPE, CA_PASSWORD, CA_PASSWORD, CA_ALIAS); - } catch (GeneralSecurityException e) { - System.err.println("Error saving CA keys to keystore: " - + e.getLocalizedMessage()); - throw e; - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error saving CA keys to keystore: " + e.getLocalizedMessage()); throw e; } - } + } /** * Attempts to load an existing certificate authority file, throws Exception @@ -203,16 +199,12 @@ private AutoGeneratingContextSelector useExistingKeystore(File ks) try { return new AutoGeneratingContextSelector(ks, CA_TYPE, CA_PASSWORD, CA_PASSWORD, CA_ALIAS); - } catch (GeneralSecurityException e) { - System.err.println("Error loading CA keys from keystore: " - + e.getLocalizedMessage()); - throw e; - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error loading CA keys from keystore: " + e.getLocalizedMessage()); throw e; } - } + } private SSLContextSelector getSSLContextSelector() throws GeneralSecurityException, IOException { diff --git a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/Main.java b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/Main.java index d65a86233..993dd596b 100644 --- a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/Main.java +++ b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/Main.java @@ -331,10 +331,7 @@ static SSLContextSelector getSSLContextSelector() try { return new AutoGeneratingContextSelector(ks, type, password, password, alias); - } catch (GeneralSecurityException e) { - System.err.println("Error loading CA keys from keystore: " - + e.getLocalizedMessage()); - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error loading CA keys from keystore: " + e.getLocalizedMessage()); } @@ -345,23 +342,15 @@ static SSLContextSelector getSSLContextSelector() ca); try { ssl.save(ks, type, password, password, alias); - } catch (GeneralSecurityException e) { - System.err.println("Error saving CA keys to keystore: " - + e.getLocalizedMessage()); - } catch (IOException e) { + } catch (GeneralSecurityException | IOException e) { System.err.println("Error saving CA keys to keystore: " + e.getLocalizedMessage()); } - FileWriter pem = null; - try { - pem = new FileWriter("auto_generated_ca.pem"); + try (FileWriter pem = new FileWriter("auto_generated_ca.pem")) { pem.write(ssl.getCACert()); } catch (IOException e) { System.err.println("Error writing CA cert : " + e.getLocalizedMessage()); - } finally { - if (pem != null) - pem.close(); } return ssl; } diff --git a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/GeneralInclusionPanel.java b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/GeneralInclusionPanel.java index 10487a13b..a22f9c464 100644 --- a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/GeneralInclusionPanel.java +++ b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/GeneralInclusionPanel.java @@ -61,9 +61,7 @@ private void initialize() { JPanel opsPanel = new JPanel(); JButton addButton = new JButton("Add"); - addButton.addActionListener((ActionEvent e) -> { - handler.addRule(ruleTableModel, dialog); - }); + addButton.addActionListener((ActionEvent e) -> handler.addRule(ruleTableModel, dialog)); JButton deleteButton = new JButton("Delete"); deleteButton.addActionListener((ActionEvent e) -> { int selectedRow = ruleTable.getSelectedRow(); diff --git a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/ProxyConfigDialog.java b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/ProxyConfigDialog.java index 69ca4bb74..9fa02676c 100644 --- a/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/ProxyConfigDialog.java +++ b/proxy-parent/proxy-extension/src/main/java/com/intuit/tank/proxy/settings/ui/ProxyConfigDialog.java @@ -93,9 +93,7 @@ private JToolBar getToolbar() { }); JButton openButton = new JButton("Open", new ImageIcon( ProxyConfigDialog.class.getResource("/icons/16/open_folder.png"))); - openButton.addActionListener((ActionEvent e) -> { - openConfig(); - }); + openButton.addActionListener((ActionEvent e) -> openConfig()); toolbar.add(Box.createHorizontalStrut(5)); toolbar.add(openButton); toolbar.add(Box.createHorizontalStrut(5)); diff --git a/proxy-parent/proxy_pkg/pom.xml b/proxy-parent/proxy_pkg/pom.xml index 727707c95..d1a93bb75 100644 --- a/proxy-parent/proxy_pkg/pom.xml +++ b/proxy-parent/proxy_pkg/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank proxy-parent - 2.3.0 + 2.3.1 diff --git a/reporting/api/pom.xml b/reporting/api/pom.xml index 932593d53..28d087026 100644 --- a/reporting/api/pom.xml +++ b/reporting/api/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank reporting-parent - 2.3.0 + 2.3.1 reporting-api diff --git a/reporting/db/pom.xml b/reporting/db/pom.xml index 090eed417..bc15f0644 100644 --- a/reporting/db/pom.xml +++ b/reporting/db/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank reporting-parent - 2.3.0 + 2.3.1 reporting-db diff --git a/reporting/db/src/main/java/com/intuit/tank/persistence/databases/AmazonSimpleDatabase.java b/reporting/db/src/main/java/com/intuit/tank/persistence/databases/AmazonSimpleDatabase.java index 1aacfc0ad..76605e306 100644 --- a/reporting/db/src/main/java/com/intuit/tank/persistence/databases/AmazonSimpleDatabase.java +++ b/reporting/db/src/main/java/com/intuit/tank/persistence/databases/AmazonSimpleDatabase.java @@ -97,9 +97,7 @@ public void deleteTable(String tableName) { */ @Override public void deleteForJob(final String tableName, String jobId, boolean asynch) { - Runnable task = () -> { - deleteTable(tableName); - }; + Runnable task = () -> deleteTable(tableName); if (asynch) { EXECUTOR.execute(task); } else { diff --git a/reporting/db/src/main/java/com/intuit/tank/persistence/databases/MetricsCalculator.java b/reporting/db/src/main/java/com/intuit/tank/persistence/databases/MetricsCalculator.java index 14013094f..ff7705aec 100644 --- a/reporting/db/src/main/java/com/intuit/tank/persistence/databases/MetricsCalculator.java +++ b/reporting/db/src/main/java/com/intuit/tank/persistence/databases/MetricsCalculator.java @@ -163,11 +163,7 @@ private boolean skipDate(Date date, Date start, Date end) { * @return */ private DescriptiveStatistics getBucketStats(String loggingKey, int period, Date periodDate) { - Map map = bucketItems.get(loggingKey); - if (map == null) { - map = new HashMap(); - bucketItems.put(loggingKey, map); - } + Map map = bucketItems.computeIfAbsent(loggingKey, k -> new HashMap()); BucketDataItem bucketDataItem = map.get(periodDate); if (bucketDataItem == null) { bucketDataItem = new BucketDataItem(period, periodDate, new DescriptiveStatistics()); diff --git a/reporting/db/src/main/java/com/intuit/tank/reporting/db/DatabaseResultsReader.java b/reporting/db/src/main/java/com/intuit/tank/reporting/db/DatabaseResultsReader.java index 847904d0d..19aa13e70 100644 --- a/reporting/db/src/main/java/com/intuit/tank/reporting/db/DatabaseResultsReader.java +++ b/reporting/db/src/main/java/com/intuit/tank/reporting/db/DatabaseResultsReader.java @@ -181,11 +181,7 @@ private Map> getTpsMap(Date minDate, String instanceI } } TPSInfo info = new TPSInfo(timestamp, loggingKey, transactions, period); - Map map = ret.get(timestamp); - if (map == null) { - map = new HashMap(); - ret.put(timestamp, map); - } + Map map = ret.computeIfAbsent(timestamp, k -> new HashMap()); TPSInfo existing = map.get(loggingKey); if (existing != null) { info = existing.add(info); diff --git a/reporting/local/pom.xml b/reporting/local/pom.xml index 854a1f5c4..75accc74c 100644 --- a/reporting/local/pom.xml +++ b/reporting/local/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank reporting-parent - 2.3.0 + 2.3.1 reporting-local-storage diff --git a/reporting/local/src/main/java/com/intuit/tank/reporting/local/ResultsStorage.java b/reporting/local/src/main/java/com/intuit/tank/reporting/local/ResultsStorage.java index 064ba568a..77a1f5e16 100644 --- a/reporting/local/src/main/java/com/intuit/tank/reporting/local/ResultsStorage.java +++ b/reporting/local/src/main/java/com/intuit/tank/reporting/local/ResultsStorage.java @@ -45,11 +45,7 @@ public void storeTimingResults(@Nonnull String jobId, @Nonnull String instanceId map = new ConcurrentHashMap>(); timingResultMap.put(jobId, map); } - List list = map.get(instanceId); - if (list == null) { - list = new ArrayList(); - map.put(instanceId, list); - } + List list = map.computeIfAbsent(instanceId, k -> new ArrayList()); list.addAll(results); } } @@ -131,11 +127,7 @@ private Map> getTpsMapForJob(Date minDate, List= minDate.getTime()) { - Map map = ret.get(info.getTimestamp()); - if (map == null) { - map = new HashMap(); - ret.put(info.getTimestamp(), map); - } + Map map = ret.computeIfAbsent(info.getTimestamp(), k -> new HashMap()); TPSInfo existing = map.get(info.getKey()); if (existing != null) { info = existing.add(info); diff --git a/reporting/pom.xml b/reporting/pom.xml index 5c303ad81..036003209 100644 --- a/reporting/pom.xml +++ b/reporting/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 reporting-parent @@ -28,11 +28,6 @@ cdi-api - - org.apache.logging.log4j - log4j-core - - commons-io commons-io diff --git a/reporting/rest/pom.xml b/reporting/rest/pom.xml index 7002f8835..34ccf59a6 100644 --- a/reporting/rest/pom.xml +++ b/reporting/rest/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank reporting-parent - 2.3.0 + 2.3.1 reporting-rest diff --git a/rest/api/agent/pom.xml b/rest/api/agent/pom.xml index 8f92325ac..90c5e24e2 100644 --- a/rest/api/agent/pom.xml +++ b/rest/api/agent/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 agent-api diff --git a/rest/api/automation/pom.xml b/rest/api/automation/pom.xml index cea819e28..9ce177df7 100644 --- a/rest/api/automation/pom.xml +++ b/rest/api/automation/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 automation-api diff --git a/rest/api/cloud/pom.xml b/rest/api/cloud/pom.xml index 8cb531431..2be516d76 100644 --- a/rest/api/cloud/pom.xml +++ b/rest/api/cloud/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 cloud-api diff --git a/rest/api/common/pom.xml b/rest/api/common/pom.xml index fe16d017a..4176f81d8 100644 --- a/rest/api/common/pom.xml +++ b/rest/api/common/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 api-common diff --git a/rest/api/datafile/pom.xml b/rest/api/datafile/pom.xml index f7957f7aa..9bea26168 100644 --- a/rest/api/datafile/pom.xml +++ b/rest/api/datafile/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 @@ -15,4 +15,11 @@ jar Datafile Rest API + + + org.apache.commons + commons-lang3 + + + diff --git a/rest/api/filter/pom.xml b/rest/api/filter/pom.xml index 030ee87cf..9f03550ca 100644 --- a/rest/api/filter/pom.xml +++ b/rest/api/filter/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 filter-api diff --git a/rest/api/job/pom.xml b/rest/api/job/pom.xml index 3bbe6d558..f231ff2ca 100644 --- a/rest/api/job/pom.xml +++ b/rest/api/job/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 job-api diff --git a/rest/api/pom.xml b/rest/api/pom.xml index 0d3462062..9a791c479 100644 --- a/rest/api/pom.xml +++ b/rest/api/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank rest-parent - 2.3.0 + 2.3.1 api-parent @@ -29,4 +29,13 @@ agent + + + + com.webcohesion.enunciate + enunciate-core + provided + + + diff --git a/rest/api/project/pom.xml b/rest/api/project/pom.xml index e0ac4656d..b8a9c6bfd 100644 --- a/rest/api/project/pom.xml +++ b/rest/api/project/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 project-api diff --git a/rest/api/reporting/pom.xml b/rest/api/reporting/pom.xml index 07b60f42e..38ff37672 100644 --- a/rest/api/reporting/pom.xml +++ b/rest/api/reporting/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 report-api diff --git a/rest/api/script/pom.xml b/rest/api/script/pom.xml index 80b0375fb..744caa598 100644 --- a/rest/api/script/pom.xml +++ b/rest/api/script/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 script-api diff --git a/rest/api/user/pom.xml b/rest/api/user/pom.xml index aa105c32b..0cf5a80c4 100644 --- a/rest/api/user/pom.xml +++ b/rest/api/user/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank api-parent - 2.3.0 + 2.3.1 user-api diff --git a/rest/client/agent/pom.xml b/rest/client/agent/pom.xml index dcff08407..1ae5cadbf 100644 --- a/rest/client/agent/pom.xml +++ b/rest/client/agent/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 agent-client diff --git a/rest/client/automation/pom.xml b/rest/client/automation/pom.xml index 45138a59a..f3ff6b327 100644 --- a/rest/client/automation/pom.xml +++ b/rest/client/automation/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 automation-client diff --git a/rest/client/cloud/pom.xml b/rest/client/cloud/pom.xml index c125e3f7d..991bc7827 100644 --- a/rest/client/cloud/pom.xml +++ b/rest/client/cloud/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 cloud-client diff --git a/rest/client/common/pom.xml b/rest/client/common/pom.xml index 9a6fc3fb5..40fe328e2 100644 --- a/rest/client/common/pom.xml +++ b/rest/client/common/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 client-common diff --git a/rest/client/datafile/pom.xml b/rest/client/datafile/pom.xml index fc0696466..788bc426e 100644 --- a/rest/client/datafile/pom.xml +++ b/rest/client/datafile/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 datafile-client diff --git a/rest/client/filter/pom.xml b/rest/client/filter/pom.xml index 69019d852..6d04bb87d 100644 --- a/rest/client/filter/pom.xml +++ b/rest/client/filter/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 filter-client diff --git a/rest/client/job/pom.xml b/rest/client/job/pom.xml index 5ceffc3c8..4bef7ad72 100644 --- a/rest/client/job/pom.xml +++ b/rest/client/job/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 job-client diff --git a/rest/client/pom.xml b/rest/client/pom.xml index 55955996c..acc962563 100644 --- a/rest/client/pom.xml +++ b/rest/client/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank rest-parent - 2.3.0 + 2.3.1 client-parent diff --git a/rest/client/project/pom.xml b/rest/client/project/pom.xml index 623b86d7d..39283862f 100644 --- a/rest/client/project/pom.xml +++ b/rest/client/project/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 project-client diff --git a/rest/client/reporting/pom.xml b/rest/client/reporting/pom.xml index 9002000ed..68fc824bb 100644 --- a/rest/client/reporting/pom.xml +++ b/rest/client/reporting/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 report-client diff --git a/rest/client/script/pom.xml b/rest/client/script/pom.xml index d93ee4b31..9387e840e 100644 --- a/rest/client/script/pom.xml +++ b/rest/client/script/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 script-client diff --git a/rest/client/script/src/main/java/com/intuit/tank/client/v1/script/ScriptServiceClient.java b/rest/client/script/src/main/java/com/intuit/tank/client/v1/script/ScriptServiceClient.java index 01bdf71aa..375b6ff66 100644 --- a/rest/client/script/src/main/java/com/intuit/tank/client/v1/script/ScriptServiceClient.java +++ b/rest/client/script/src/main/java/com/intuit/tank/client/v1/script/ScriptServiceClient.java @@ -18,7 +18,6 @@ import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.List; @@ -30,7 +29,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.apache.commons.io.IOUtils; import org.glassfish.jersey.media.multipart.BodyPart; import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.MultiPart; diff --git a/rest/client/user/pom.xml b/rest/client/user/pom.xml index 4be869355..a89411cbe 100644 --- a/rest/client/user/pom.xml +++ b/rest/client/user/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank client-parent - 2.3.0 + 2.3.1 user-client diff --git a/rest/pom.xml b/rest/pom.xml index c4fe99fcd..27b2e0c00 100644 --- a/rest/pom.xml +++ b/rest/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 rest-parent @@ -28,21 +28,11 @@ cdi-api - - org.apache.logging.log4j - log4j-core - - commons-io commons-io - - org.glassfish.jersey.core - jersey-client - - org.glassfish.jersey.media jersey-media-multipart @@ -86,7 +76,7 @@ net.bytebuddy byte-buddy - 1.6.5 + 1.9.15 test @@ -94,7 +84,7 @@ org.objenesis objenesis - 2.5.1 + 3.0.1 test diff --git a/rest/service/agent/pom.xml b/rest/service/agent/pom.xml index ccfe6af66..12810474f 100644 --- a/rest/service/agent/pom.xml +++ b/rest/service/agent/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 agent-service diff --git a/rest/service/automation/pom.xml b/rest/service/automation/pom.xml index daf54fac2..cf920a54d 100644 --- a/rest/service/automation/pom.xml +++ b/rest/service/automation/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 automation-service diff --git a/rest/service/automation/src/main/java/com/intuit/tank/service/impl/v1/automation/AutomationServiceV1.java b/rest/service/automation/src/main/java/com/intuit/tank/service/impl/v1/automation/AutomationServiceV1.java index 5bd3449bf..bb1e249d5 100644 --- a/rest/service/automation/src/main/java/com/intuit/tank/service/impl/v1/automation/AutomationServiceV1.java +++ b/rest/service/automation/src/main/java/com/intuit/tank/service/impl/v1/automation/AutomationServiceV1.java @@ -166,14 +166,10 @@ public Response runAutomationJob(@Nonnull FormDataMultiPart formData) { JAXBContext ctx = JAXBContext.newInstance(AutomationRequest.class.getPackage().getName()); request = (AutomationRequest) ctx.createUnmarshaller().unmarshal(xmlSource); - } catch (JAXBException e) { + } catch (JAXBException | ParserConfigurationException | SAXException e) { throw new RuntimeException(e); - } catch (SAXException saxe) { - throw new RuntimeException(saxe); - } catch (ParserConfigurationException pce) { - throw new RuntimeException(pce); } - } + } } else if (MediaType.APPLICATION_OCTET_STREAM_TYPE.equals(mediaType)) { // get the file is = part.getValueAs(InputStream.class); diff --git a/rest/service/cloud/pom.xml b/rest/service/cloud/pom.xml index b5a0fff34..6013cc96d 100644 --- a/rest/service/cloud/pom.xml +++ b/rest/service/cloud/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 cloud-service diff --git a/rest/service/cloud/src/main/java/com/intuit/tank/service/impl/v1/cloud/JobController.java b/rest/service/cloud/src/main/java/com/intuit/tank/service/impl/v1/cloud/JobController.java index d0035fa3a..a5f930ea4 100644 --- a/rest/service/cloud/src/main/java/com/intuit/tank/service/impl/v1/cloud/JobController.java +++ b/rest/service/cloud/src/main/java/com/intuit/tank/service/impl/v1/cloud/JobController.java @@ -119,7 +119,7 @@ public void killJob(String jobId) { public Set killAllJobs() { Set jobs = vmTracker.getAllJobs(); for (CloudVmStatusContainer job : jobs) { - String jobId = (job).getJobId(); + String jobId = job.getJobId(); killJob(jobId, true); } return jobs; @@ -139,7 +139,7 @@ public void killInstances(List instanceIds) { if (!vmTracker.isDevMode()) { for (VMRegion region : new TankConfig().getVmManagerConfig().getRegions()) { AmazonInstance amzInstance = new AmazonInstance(null, region); - amzInstance.kill(instanceIds); + amzInstance.killInstances(instanceIds); } } String jobId = null; diff --git a/rest/service/common/pom.xml b/rest/service/common/pom.xml index 65b6f46d2..cc0fe384f 100644 --- a/rest/service/common/pom.xml +++ b/rest/service/common/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 service-common @@ -21,6 +21,10 @@ ${project.version} + + org.picketlink + picketlink + diff --git a/rest/service/datafile/pom.xml b/rest/service/datafile/pom.xml index 5c5bd397e..4aa666424 100644 --- a/rest/service/datafile/pom.xml +++ b/rest/service/datafile/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 datafile-service diff --git a/rest/service/datafile/src/main/java/com/intuit/tank/service/impl/v1/datafile/DataFileServiceV1.java b/rest/service/datafile/src/main/java/com/intuit/tank/service/impl/v1/datafile/DataFileServiceV1.java index e60960355..5bb3b3cff 100644 --- a/rest/service/datafile/src/main/java/com/intuit/tank/service/impl/v1/datafile/DataFileServiceV1.java +++ b/rest/service/datafile/src/main/java/com/intuit/tank/service/impl/v1/datafile/DataFileServiceV1.java @@ -142,12 +142,8 @@ public Response saveOrUpdateDataFile(FormDataMultiPart formData) { JAXBContext ctx = JAXBContext.newInstance(DataFileDescriptor.class.getPackage().getName()); DataFileDescriptor dfd = (DataFileDescriptor) ctx.createUnmarshaller().unmarshal(xmlSource); dataFile = descriptorToDataFile(dao, dfd); - } catch (JAXBException e) { + } catch (JAXBException | ParserConfigurationException | SAXException e) { throw new RuntimeException(e); - } catch (SAXException saxe) { - throw new RuntimeException(saxe); - } catch (ParserConfigurationException pce) { - throw new RuntimeException(pce); } } } else if (MediaType.APPLICATION_OCTET_STREAM_TYPE.equals(mediaType)) { diff --git a/rest/service/filter/pom.xml b/rest/service/filter/pom.xml index fa6282d47..717f3f698 100644 --- a/rest/service/filter/pom.xml +++ b/rest/service/filter/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 filter-service diff --git a/rest/service/job/pom.xml b/rest/service/job/pom.xml index 801564709..b09faa6c2 100644 --- a/rest/service/job/pom.xml +++ b/rest/service/job/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 job-service diff --git a/rest/service/pom.xml b/rest/service/pom.xml index 6719c92c0..83657622b 100644 --- a/rest/service/pom.xml +++ b/rest/service/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank rest-parent - 2.3.0 + 2.3.1 service-parent diff --git a/rest/service/project/pom.xml b/rest/service/project/pom.xml index 71e63fad0..47a1cbf16 100644 --- a/rest/service/project/pom.xml +++ b/rest/service/project/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 project-service diff --git a/rest/service/reporting/pom.xml b/rest/service/reporting/pom.xml index e26067e19..04c46c40c 100644 --- a/rest/service/reporting/pom.xml +++ b/rest/service/reporting/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 report-service diff --git a/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/FileReader.java b/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/FileReader.java index 1496ca189..dfb6767a7 100644 --- a/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/FileReader.java +++ b/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/FileReader.java @@ -74,15 +74,11 @@ public static StreamingOutput getFileStreamingOutput(final File f, long total, S final long from = l; StreamingOutput streamer = (final OutputStream output) -> { - final FileChannel inputChannel = new FileInputStream(f).getChannel(); - final WritableByteChannel outputChannel = Channels.newChannel(output); - try { + try (FileChannel inputChannel = new FileInputStream(f).getChannel(); + WritableByteChannel outputChannel = Channels.newChannel(output)) { inputChannel.transferTo(from, to, outputChannel); - } finally { - // closing the channels - inputChannel.close(); - outputChannel.close(); } + // closing the channels }; LOG.debug("returning data from " + from + " - " + to + " of total " + total); return streamer; diff --git a/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/ReportServiceV1.java b/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/ReportServiceV1.java index 58a9f8a2d..e0e77e54f 100644 --- a/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/ReportServiceV1.java +++ b/rest/service/reporting/src/main/java/com/intuit/tank/service/impl/v1/report/ReportServiceV1.java @@ -146,9 +146,7 @@ public Response deleteTiming(String jobId) { public Response processSummary(final String jobId) { ResponseBuilder responseBuilder = Response.ok(); try { - Thread t = new Thread( () -> { - SummaryReportRunner.generateSummary(jobId); - }); + Thread t = new Thread( () -> SummaryReportRunner.generateSummary(jobId)); t.setDaemon(true); t.start(); responseBuilder.entity("Generating summary data for job " + jobId); @@ -479,9 +477,7 @@ public Response getTimingBucketHtml(String jobId, int period) { public Response setTPSInfos(final TPSReportingPackage reportingPackage) { ResponseBuilder responseBuilder = null; try { - new Thread( () -> { - ResultsStorage.instance().storeTpsResults(reportingPackage.getJobId(), reportingPackage.getInstanceId(), reportingPackage.getContainer()); - }).start(); + new Thread( () -> ResultsStorage.instance().storeTpsResults(reportingPackage.getJobId(), reportingPackage.getInstanceId(), reportingPackage.getContainer())).start(); responseBuilder = Response.status(Status.ACCEPTED); } catch (Exception e) { @@ -495,9 +491,7 @@ public Response setTPSInfos(final TPSReportingPackage reportingPackage) { public Response sendTimingResults(final TankResultPackage results) { ResponseBuilder responseBuilder = null; try { - new Thread( () -> { - ResultsStorage.instance().storeTimingResults(results.getJobId(), results.getInstanceId(), results.getResults()); - }).start(); + new Thread( () -> ResultsStorage.instance().storeTimingResults(results.getJobId(), results.getInstanceId(), results.getResults())).start(); responseBuilder = Response.status(Status.ACCEPTED); } catch (Exception e) { diff --git a/rest/service/script/pom.xml b/rest/service/script/pom.xml index b94d2ecf8..ae1c33816 100644 --- a/rest/service/script/pom.xml +++ b/rest/service/script/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 script-service diff --git a/rest/service/script/src/main/java/com/intuit/tank/service/impl/v1/script/ScriptServiceV1.java b/rest/service/script/src/main/java/com/intuit/tank/service/impl/v1/script/ScriptServiceV1.java index e48c116c1..0b33039f1 100644 --- a/rest/service/script/src/main/java/com/intuit/tank/service/impl/v1/script/ScriptServiceV1.java +++ b/rest/service/script/src/main/java/com/intuit/tank/service/impl/v1/script/ScriptServiceV1.java @@ -208,12 +208,8 @@ public Response convertScript(FormDataMultiPart formData) { JAXBContext ctx = JAXBContext.newInstance(ScriptUploadRequest.class.getPackage().getName()); request = (ScriptUploadRequest) ctx.createUnmarshaller().unmarshal(xmlSource); - } catch (JAXBException e) { + } catch (JAXBException | ParserConfigurationException | SAXException e) { throw new RuntimeException(e); - } catch (SAXException saxe) { - throw new RuntimeException(saxe); - } catch (ParserConfigurationException pce) { - throw new RuntimeException(pce); } } } else if (MediaType.APPLICATION_OCTET_STREAM_TYPE.equals(mediaType)) { diff --git a/rest/service/user/pom.xml b/rest/service/user/pom.xml index cbfabb44a..7ea3b3ba5 100644 --- a/rest/service/user/pom.xml +++ b/rest/service/user/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank service-parent - 2.3.0 + 2.3.1 user-service diff --git a/script_processor/pom.xml b/script_processor/pom.xml index f5b7429cb..5fde1defa 100644 --- a/script_processor/pom.xml +++ b/script_processor/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 tank-script-processor @@ -50,22 +50,6 @@ ${project.version} - - org.json - json - - - - commons-io - commons-io - - - - org.apache.tomcat - tomcat-servlet-api - provided - - com.h2database h2 diff --git a/search/document_util/pom.xml b/search/document_util/pom.xml index 59a3936c6..3402b4b2a 100644 --- a/search/document_util/pom.xml +++ b/search/document_util/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank search-parent - 2.3.0 + 2.3.1 document-util @@ -23,6 +23,9 @@ org.apache.lucene lucene-queryparser - + + org.apache.commons + commons-lang3 + diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/FieldSearchParam.java b/search/document_util/src/main/java/com/intuit/tank/search/util/FieldSearchParam.java index 2220a7536..81e34ec08 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/FieldSearchParam.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/FieldSearchParam.java @@ -51,17 +51,16 @@ public String getQuery() { * {@inheritDoc} */ public Query getLuceneQuery() { - QueryParser qp = new QueryParser(SearchConstants.version, fieldName, SearchConstants.analyzer); + QueryParser queryParser = new QueryParser(fieldName, SearchConstants.analyzer); if (value.startsWith("*")) { - qp.setAllowLeadingWildcard(true); + queryParser.setAllowLeadingWildcard(true); } - Query parse = null; try { - parse = qp.parse(value); + return queryParser.parse(value); } catch (ParseException e) { e.printStackTrace(); } - return parse; + return null; // return new TermQuery(new Term(fieldName, value)); } diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/MultiSearchParam.java b/search/document_util/src/main/java/com/intuit/tank/search/util/MultiSearchParam.java index e98c44d18..beb0fd39a 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/MultiSearchParam.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/MultiSearchParam.java @@ -90,13 +90,13 @@ public String getQuery() { * {@inheritDoc} */ public Query getLuceneQuery() { - BooleanQuery ret = new BooleanQuery(); + BooleanQuery.Builder builder = new BooleanQuery.Builder(); for (SearchParam param : params) { if (param != null) { - ret.add(new BooleanClause(param.getLuceneQuery(), operator.occur)); + builder.add(new BooleanClause(param.getLuceneQuery(), operator.occur)); } } - return ret; + return builder.build(); } /** diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/MustNotFieldSearchParam.java b/search/document_util/src/main/java/com/intuit/tank/search/util/MustNotFieldSearchParam.java index dde64f3f5..364898b72 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/MustNotFieldSearchParam.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/MustNotFieldSearchParam.java @@ -52,9 +52,9 @@ public String getQuery() { * {@inheritDoc} */ public Query getLuceneQuery() { - BooleanQuery booleanQuery = new BooleanQuery(); - booleanQuery.add(new TermQuery(new Term(fieldName, value)), Occur.MUST_NOT); - return booleanQuery; + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(new TermQuery(new Term(fieldName, value)), Occur.MUST_NOT); + return builder.build(); } /** diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchConstants.java b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchConstants.java index c6b1c6e44..8a7d74dde 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchConstants.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchConstants.java @@ -17,7 +17,7 @@ import org.apache.lucene.util.Version; public class SearchConstants { - public static final Version version = Version.LUCENE_4_10_4; + public static final Version version = Version.LUCENE_8_0_0; public static final Analyzer analyzer = new TankAnalyzer(version); } diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchQuery.java b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchQuery.java index 8731c9717..61e5d7b22 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchQuery.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchQuery.java @@ -17,8 +17,6 @@ import java.util.Collections; import java.util.LinkedHashSet; -import org.apache.lucene.search.Filter; - /** * SearchQuery encapsulates a search query. */ @@ -26,7 +24,6 @@ public class SearchQuery { private Collection sortOrder; private Collection searchParams; - private Filter filter; private int startIndex; private int numItems = -1; @@ -59,13 +56,6 @@ public static QueryBuilder getBuilder(SearchQuery queryToCopy) { return new QueryBuilder(queryToCopy); } - /** - * @return the filter - */ - public Filter getFilter() { - return filter; - } - /** * @return the sortOrder */ @@ -198,17 +188,6 @@ public QueryBuilder addSort(SortOrder sort) { return this; } - /** - * - * @param filter - * the filter to set - * @return the builder - */ - public QueryBuilder setFilter(Filter filter) { - query.filter = filter; - return this; - } - /** * * @return true if there is a param set on this builder diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchUtils.java b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchUtils.java index 995159340..51725bda0 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/SearchUtils.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/SearchUtils.java @@ -148,10 +148,10 @@ public static final Query createLuceneQuery(Operator operator, CompositeSearchQu .toArray((new SearchParam[0]))).getLuceneQuery(); Query otherLuceneQuery = new MultiSearchParam(Operator.OR, query.getQuery2().getSearchParams() .toArray((new SearchParam[0]))).getLuceneQuery(); - BooleanQuery booleanQuery = new BooleanQuery(); - booleanQuery.add(luceneQuery, operator.getOccur()); - booleanQuery.add(otherLuceneQuery, query.getOperator().getOccur()); - return booleanQuery; + BooleanQuery.Builder builder = new BooleanQuery.Builder(); + builder.add(luceneQuery, operator.getOccur()); + builder.add(otherLuceneQuery, query.getOperator().getOccur()); + return builder.build(); } /** diff --git a/search/document_util/src/main/java/com/intuit/tank/search/util/TankAnalyzer.java b/search/document_util/src/main/java/com/intuit/tank/search/util/TankAnalyzer.java index 46f935198..2932ccef9 100644 --- a/search/document_util/src/main/java/com/intuit/tank/search/util/TankAnalyzer.java +++ b/search/document_util/src/main/java/com/intuit/tank/search/util/TankAnalyzer.java @@ -16,8 +16,6 @@ * #L% */ -import java.io.Reader; - import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.Tokenizer; @@ -44,10 +42,9 @@ public TankAnalyzer(Version matchVersion) { } @Override - protected TokenStreamComponents createComponents(final String fieldName, - final Reader reader) { - final Tokenizer src = new WhitespaceTokenizer(matchVersion, reader); - TokenStream tok = new LowerCaseFilter(matchVersion, src); + protected TokenStreamComponents createComponents(String s) { + final Tokenizer src = new WhitespaceTokenizer(); + TokenStream tok = new LowerCaseFilter(src); return new TokenStreamComponents(src, tok); } } diff --git a/search/document_util/src/test/java/com/intuit/tank/search/util/FieldSearchParamTest.java b/search/document_util/src/test/java/com/intuit/tank/search/util/FieldSearchParamTest.java index b91d3bffc..d831445f4 100644 --- a/search/document_util/src/test/java/com/intuit/tank/search/util/FieldSearchParamTest.java +++ b/search/document_util/src/test/java/com/intuit/tank/search/util/FieldSearchParamTest.java @@ -135,7 +135,7 @@ public void testGetLuceneQuery_1() assertNotNull(result); assertEquals("*", result.toString()); - assertEquals(1.0f, result.getBoost(), 1.0f); + //assertEquals(1.0f, result.getBoost(), 1.0f); } /** diff --git a/search/document_util/src/test/java/com/intuit/tank/search/util/MustNotFieldSearchParamTest.java b/search/document_util/src/test/java/com/intuit/tank/search/util/MustNotFieldSearchParamTest.java index 741a367f2..bff07c25d 100644 --- a/search/document_util/src/test/java/com/intuit/tank/search/util/MustNotFieldSearchParamTest.java +++ b/search/document_util/src/test/java/com/intuit/tank/search/util/MustNotFieldSearchParamTest.java @@ -16,8 +16,6 @@ import org.apache.lucene.search.Query; import org.junit.jupiter.api.*; -import com.intuit.tank.search.util.MustNotFieldSearchParam; - import static org.junit.jupiter.api.Assertions.*; /** @@ -135,7 +133,7 @@ public void testGetLuceneQuery_1() assertNotNull(result); assertEquals("-", result.toString()); - assertEquals(1.0f, result.getBoost(), 1.0f); + //assertEquals(1.0f, result.getBoost(), 1.0f); } /** diff --git a/search/document_util/src/test/java/com/intuit/tank/search/util/SearchQueryTest.java b/search/document_util/src/test/java/com/intuit/tank/search/util/SearchQueryTest.java index 2e41e547f..591070720 100644 --- a/search/document_util/src/test/java/com/intuit/tank/search/util/SearchQueryTest.java +++ b/search/document_util/src/test/java/com/intuit/tank/search/util/SearchQueryTest.java @@ -18,23 +18,12 @@ import java.util.Collection; -import org.apache.lucene.search.Filter; - import org.testng.Assert; import org.apache.lucene.search.Query; -import org.junit.jupiter.api.*; - -import static org.junit.jupiter.api.Assertions.*; import org.testng.annotations.Test; -import com.intuit.tank.search.util.FieldSearchParam; -import com.intuit.tank.search.util.MultiSearchParam; -import com.intuit.tank.search.util.MustNotFieldSearchParam; -import com.intuit.tank.search.util.SearchParam; -import com.intuit.tank.search.util.SearchQuery; -import com.intuit.tank.search.util.SearchUtils; import com.intuit.tank.search.util.MultiSearchParam.Operator; import com.intuit.tank.search.util.SearchQuery.QueryBuilder; import com.intuit.tank.test.TestGroups; diff --git a/search/document_util/src/test/java/com/intuit/tank/search/util/TankAnalyzerTest.java b/search/document_util/src/test/java/com/intuit/tank/search/util/TankAnalyzerTest.java index f17fbb277..8502db96f 100644 --- a/search/document_util/src/test/java/com/intuit/tank/search/util/TankAnalyzerTest.java +++ b/search/document_util/src/test/java/com/intuit/tank/search/util/TankAnalyzerTest.java @@ -16,11 +16,10 @@ import java.io.PipedReader; import java.io.Reader; +import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.util.Version; import org.junit.jupiter.api.*; -import com.intuit.tank.search.util.TankAnalyzer; - import static org.junit.jupiter.api.Assertions.*; /** @@ -39,7 +38,7 @@ public class TankAnalyzerTest { @Test public void testTAnkAnalyzer_1() throws Exception { - Version matchVersion = Version.LUCENE_4_10_4; + Version matchVersion = Version.LUCENE_8_0_0; TankAnalyzer result = new TankAnalyzer(matchVersion); @@ -57,12 +56,10 @@ public void testTAnkAnalyzer_1() @Test public void testCreateComponents_1() throws Exception { - TankAnalyzer fixture = new TankAnalyzer(Version.LUCENE_4_10_4); + TankAnalyzer fixture = new TankAnalyzer(Version.LUCENE_8_0_0); String fieldName = ""; - Reader reader = new PipedReader(); - org.apache.lucene.analysis.Analyzer.TokenStreamComponents result = fixture.createComponents( - fieldName, reader); + Analyzer.TokenStreamComponents result = fixture.createComponents(fieldName); assertNotNull(result); } diff --git a/search/lucene_indexer/pom.xml b/search/lucene_indexer/pom.xml index cdc54cda1..3c576c3a6 100644 --- a/search/lucene_indexer/pom.xml +++ b/search/lucene_indexer/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank search-parent - 2.3.0 + 2.3.1 lucene-indexer diff --git a/search/lucene_indexer/src/main/java/com/intuit/tank/search/lucene/LuceneService.java b/search/lucene_indexer/src/main/java/com/intuit/tank/search/lucene/LuceneService.java index f636e8c5b..6ca451763 100644 --- a/search/lucene_indexer/src/main/java/com/intuit/tank/search/lucene/LuceneService.java +++ b/search/lucene_indexer/src/main/java/com/intuit/tank/search/lucene/LuceneService.java @@ -13,8 +13,8 @@ * #L% */ -import java.io.File; import java.io.IOException; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -50,7 +50,7 @@ public class LuceneService { * @throws IOException */ public LuceneService() throws IOException { - this(new SimpleFSDirectory(new File("./searchDirectory"))); + this(new SimpleFSDirectory(Paths.get("./searchDirectory"))); } /** @@ -218,16 +218,12 @@ private IndexReader getReader() { * @return */ private IndexWriter getWriter() { - IndexWriter writer = null; try { - - IndexWriterConfig iwc = new IndexWriterConfig(SearchConstants.version, SearchConstants.analyzer); - IndexWriter.unlock(directory); - writer = new IndexWriter(directory, iwc); + IndexWriterConfig iwc = new IndexWriterConfig(SearchConstants.analyzer); + return new IndexWriter(directory, iwc); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } - return writer; } } diff --git a/search/lucene_indexer/src/test/java/com/intuit/tank/search/lucene/LuceneServiceTest.java b/search/lucene_indexer/src/test/java/com/intuit/tank/search/lucene/LuceneServiceTest.java index ddfa0f3ef..34d10f545 100644 --- a/search/lucene_indexer/src/test/java/com/intuit/tank/search/lucene/LuceneServiceTest.java +++ b/search/lucene_indexer/src/test/java/com/intuit/tank/search/lucene/LuceneServiceTest.java @@ -13,7 +13,6 @@ * #L% */ -import java.io.File; import java.util.LinkedList; import java.util.List; @@ -21,12 +20,9 @@ import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; import org.apache.lucene.store.Directory; -import org.apache.lucene.store.MMapDirectory; import org.apache.lucene.store.RAMDirectory; import org.junit.jupiter.api.*; -import com.intuit.tank.search.lucene.LuceneService; - import static org.junit.jupiter.api.Assertions.*; /** @@ -183,7 +179,7 @@ public void testIndexDocuments_2() public void testRemoveDocument_1() throws Exception { LuceneService fixture = new LuceneService(); - Query query = new BooleanQuery(true); + Query query = new BooleanQuery.Builder().setMinimumNumberShouldMatch(1).build(); fixture.removeDocument(query); @@ -245,7 +241,7 @@ public void testRemoveDocuments_2() public void testSearch_1() throws Exception { LuceneService fixture = new LuceneService(); - Query query = new BooleanQuery(); + Query query = new BooleanQuery.Builder().build(); boolean prefixWildCard = true; List result = fixture.search(query, prefixWildCard); @@ -267,7 +263,7 @@ public void testSearch_1() public void testSearch_2() throws Exception { LuceneService fixture = new LuceneService(); - Query query = new BooleanQuery(); + Query query = new BooleanQuery.Builder().build(); boolean prefixWildCard = true; List result = fixture.search(query, prefixWildCard); diff --git a/search/pom.xml b/search/pom.xml index 2679e7175..cad9187cd 100755 --- a/search/pom.xml +++ b/search/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 search-parent diff --git a/search/script_search/pom.xml b/search/script_search/pom.xml index c7a01bcf4..5a9f7ab85 100644 --- a/search/script_search/pom.xml +++ b/search/script_search/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank search-parent - 2.3.0 + 2.3.1 script-search diff --git a/search/script_search/src/main/java/com/intuit/tank/search/script/ScriptSearchService.java b/search/script_search/src/main/java/com/intuit/tank/search/script/ScriptSearchService.java index 9f7955a60..6ae7295a0 100644 --- a/search/script_search/src/main/java/com/intuit/tank/search/script/ScriptSearchService.java +++ b/search/script_search/src/main/java/com/intuit/tank/search/script/ScriptSearchService.java @@ -23,6 +23,10 @@ import org.apache.logging.log4j.Logger; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; +import org.apache.lucene.document.FieldType; +import org.apache.lucene.document.StringField; +import org.apache.lucene.document.TextField; +import org.apache.lucene.index.IndexOptions; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.Query; @@ -59,9 +63,9 @@ public void saveScript(Script script) { sb.append(script.getId()).append(separator); sb.append(steps.getUuid()).append(separator); addField(document, ScriptSearchField.scriptId, String.valueOf(script.getId()), Field.Store.YES, - Field.Index.NOT_ANALYZED); + "Field.Index.NOT_ANALYZED"); addField(document, ScriptSearchField.uuid, String.valueOf(steps.getUuid()), Field.Store.YES, - Field.Index.NO); + "Field.Index.NO"); switch (steps.getType()) { case "request": updateRequestDocument(steps, sb, document); @@ -79,7 +83,7 @@ public void saveScript(Script script) { documents.add(document); } mt.markAndLog("create documents"); - QueryParser parser = new QueryParser(SearchConstants.version, ScriptSearchField.scriptId.getValue(), + QueryParser parser = new QueryParser(ScriptSearchField.scriptId.getValue(), SearchConstants.analyzer); Query query; try { @@ -107,13 +111,13 @@ private void updateSleepTimeDocument(ScriptStep steps, StringBuilder sb, Documen sleepTimeValue = value; } addField(document, ScriptSearchField.type, steps.getType(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.sleepTime, sleepTimeValue, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.data, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.search, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); } private void updateVariableDocument(ScriptStep steps, StringBuilder sb, Document document) { @@ -130,15 +134,15 @@ private void updateVariableDocument(ScriptStep steps, StringBuilder sb, Document keyValue = key; } addField(document, ScriptSearchField.type, steps.getType(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.variableKey, keyValue, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.variableValue, variableValue, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.data, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.search, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); } @@ -165,15 +169,15 @@ private void updateThinkTimeDocument(ScriptStep steps, StringBuilder sb, Documen } } addField(document, ScriptSearchField.type, steps.getType(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.minTime, minTimeValue, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.maxTime, maxTimeValue, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.data, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.search, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); } @@ -209,53 +213,63 @@ private void updateRequestDocument(ScriptStep steps, StringBuilder sb, Document sb.append(respData).append(separator); addField(document, ScriptSearchField.url, steps.getUrl(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.simplePath, steps.getSimplePath(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.label, steps.getLabel(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.method, steps.getMethod(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.protocol, steps.getProtocol(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.comments, steps.getComments(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.hostName, steps.getHostname(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.mimeType, steps.getMimetype(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.loggingKey, steps.getLoggingKey(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.name, steps.getName(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.onFail, steps.getOnFail(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.type, steps.getType(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.scriptGroupName, steps.getScriptGroupName(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.requestHeaders, reqHeader, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.responseHeaders, respHeader, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.requestCookies, reqCookies, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.responseCookies, respCookies, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.postDatas, postData, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.queryString, queryString, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.responseContent, respData, Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); addField(document, ScriptSearchField.search, sb.toString(), Field.Store.NO, - Field.Index.ANALYZED); + "Field.Index.ANALYZED"); } private static void addField(Document document, ScriptSearchField searchField, String value, Field.Store store, - Field.Index ind) { + String index) { if (value != null) { - document.add(new Field(searchField.getValue(), value, store, ind)); + if (index.equals("Field.Index.ANALYZED")) { + document.add(new TextField(searchField.getValue(), value, store)); + } else if (index.equals("Field.Index.NOT_ANALYZED")) { + FieldType ft = new FieldType(StringField.TYPE_STORED); + ft.setOmitNorms(false); + document.add(new Field(searchField.getValue(), value, ft)); + } else if (index.equals("Field.Index.NO")) { + FieldType ft = new FieldType(StringField.TYPE_STORED); + ft.setIndexOptions(IndexOptions.NONE); + document.add(new Field(searchField.getValue(), value, ft)); + } } } @@ -292,7 +306,7 @@ public List search(int scriptId, String searchQuery, SearchCriteria crit } public List search(int scriptId) { - QueryParser qp = new QueryParser(SearchConstants.version, ScriptSearchField.scriptId.getValue(), + QueryParser qp = new QueryParser(ScriptSearchField.scriptId.getValue(), SearchConstants.analyzer); Query parse; try { diff --git a/tank_common/pom.xml b/tank_common/pom.xml index 9045e1b01..b09819c23 100644 --- a/tank_common/pom.xml +++ b/tank_common/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 tank-common diff --git a/tank_vmManager/pom.xml b/tank_vmManager/pom.xml index 4caf163a8..ae584fe02 100644 --- a/tank_vmManager/pom.xml +++ b/tank_vmManager/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank tank-parent - 2.3.0 + 2.3.1 tank-vm-manager diff --git a/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/WorkLoadFactory.java b/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/WorkLoadFactory.java index a9402641b..c5c9fc14e 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/WorkLoadFactory.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/WorkLoadFactory.java @@ -126,8 +126,9 @@ private JobRegion fixJobRegion(JobRegion jobRegion, JobInstance job) { } private JobRequest jobToJobRequest(JobInstance job) { - Builder builder = JobRequestImpl.builder(); - builder.withBaselineVirtualUsers(job.getBaselineVirtualUsers()).withId(Integer.toString(job.getId())) + Builder builder = JobRequestImpl.builder() + .withBaselineVirtualUsers(job.getBaselineVirtualUsers()) + .withId(Integer.toString(job.getId())) .withIncrementStrategy(job.getIncrementStrategy()) .withLocation(job.getLocation()).withRampTime(job.getRampTime()) .withLoggingProfile(job.getLoggingProfile()) @@ -138,10 +139,10 @@ private JobRequest jobToJobRequest(JobInstance job) { .withnumUsersPerAgent(job.getNumUsersPerAgent()) .withSimulationTime(job.getSimulationTime()).withStatus(job.getStatus()) .withTerminationPolicy(job.getTerminationPolicy()) - .withUserIntervalIncrement(job.getUserIntervalIncrement()); - builder.withRegions(getRegions(job)); - builder.withNofitications(getNotifications(job)); - builder.withDataFileIds(getDataFileIds(job)); + .withUserIntervalIncrement(job.getUserIntervalIncrement()) + .withRegions(getRegions(job)) + .withNofitications(getNotifications(job)) + .withDataFileIds(getDataFileIds(job)); if (job.getTerminationPolicy() == TerminationPolicy.script) { builder.withSimulationTime(0); } diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/AgentWatchdog.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/AgentWatchdog.java index 8989a1100..17120d2ac 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/AgentWatchdog.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/AgentWatchdog.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -223,7 +224,9 @@ private void relaunch(List instances) { LOG.info(msg); // relaunch instances and remove old onesn from vmTracker // kill them first just to be sure - amazonInstance.killInstances(instances); + List instanceIds = instances.stream() + .map(VMInformation::getInstanceId).collect(Collectors.toCollection(() -> new ArrayList<>(instances.size()))); + amazonInstance.killInstances(instanceIds); VMImageDao dao = new VMImageDao(); for (VMInformation info : instances) { vmInfo.remove(info); diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/CloudWatchObserver.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/CloudWatchObserver.java index f82008453..defd06850 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/CloudWatchObserver.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/CloudWatchObserver.java @@ -98,11 +98,7 @@ private void addWatches(final JobInstance job, final JobNotification not) { Set statuses = vmStatusForJob.getStatuses(); Map> instanceMap = new HashMap>(); for (CloudVmStatus s : statuses) { - Set set = instanceMap.get(s.getVmRegion()); - if (set == null) { - set = new HashSet(); - instanceMap.put(s.getVmRegion(), set); - } + Set set = instanceMap.computeIfAbsent(s.getVmRegion(), k -> new HashSet()); set.add(s.getInstanceId()); } for (Entry> entry : instanceMap.entrySet()) { @@ -129,11 +125,7 @@ private void removeWatches(final JobInstance job, final JobNotification not) { Set statuses = vmStatusForJob.getStatuses(); Map> instanceMap = new HashMap>(); for (CloudVmStatus s : statuses) { - Set set = instanceMap.get(s.getVmRegion()); - if (set == null) { - set = new HashSet(); - instanceMap.put(s.getVmRegion(), set); - } + Set set = instanceMap.computeIfAbsent(s.getVmRegion(), k -> new HashSet()); set.add(s.getInstanceId()); } for (VMRegion vmRegion : instanceMap.keySet()) { diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/VMTrackerImpl.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/VMTrackerImpl.java index 09d2eb90d..deca8df92 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/VMTrackerImpl.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/VMTrackerImpl.java @@ -127,7 +127,7 @@ public void setStatus(@Nonnull CloudVmStatus status) { && (status.getJobStatus() == JobStatus.Completed) && !isDevMode()) { AmazonInstance amzInstance = new AmazonInstance(null, status.getVmRegion()); - amzInstance.kill(Arrays.asList(new String[] { status.getInstanceId() })); + amzInstance.killInstances(Arrays.asList(new String[] { status.getInstanceId() })); } } String jobId = status.getJobId(); diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/IEnvironmentInstance.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/IEnvironmentInstance.java index 5e3021b06..d105fe466 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/IEnvironmentInstance.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/IEnvironmentInstance.java @@ -71,8 +71,10 @@ public interface IEnvironmentInstance { * * @param instanceId * the instance to associate - * @param ip - * the ip to associate + * @param address + * the address to associate + * @param latch + * the count down latch to associate */ public void associateAddress(String instanceId, Address address, CountDownLatch latch); @@ -96,14 +98,14 @@ public interface IEnvironmentInstance { /** * @param instanceIds - * @return + * the instance ids to kill */ - public List kill(List instanceIds); + public void killInstances(List instanceIds); /** * * @param instanceIds * the instance ids to stop */ - public List stopInstances(List instanceIds); + public void stopInstances(List instanceIds); } diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/VMChannelImpl.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/VMChannelImpl.java index 336b753fb..6195b54c8 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/VMChannelImpl.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/VMChannelImpl.java @@ -56,7 +56,7 @@ public List findInstancesOfType(VMRegion region, VMImageType type public void terminateInstances(@Nonnull List instanceIds) { for (VMRegion region : new TankConfig().getVmManagerConfig().getRegions()) { AmazonInstance amazonInstance = new AmazonInstance(null, region); - amazonInstance.kill(instanceIds); + amazonInstance.killInstances(instanceIds); } } diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java index ec5db4045..708664470 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java @@ -4,6 +4,7 @@ import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.handlers.AsyncHandler; import com.amazonaws.services.ec2.AmazonEC2Async; import com.amazonaws.services.ec2.AmazonEC2AsyncClientBuilder; import com.amazonaws.services.ec2.model.Address; @@ -17,7 +18,6 @@ import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.IamInstanceProfileSpecification; import com.amazonaws.services.ec2.model.Instance; -import com.amazonaws.services.ec2.model.InstanceStateChange; import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.Placement; import com.amazonaws.services.ec2.model.RebootInstancesRequest; @@ -363,18 +363,22 @@ public List create() { @Override public void tagInstance(final List instanceIds, KeyValuePair... tag) { if (tag.length != 0) { - final List tags = Arrays.stream(tag).map(pair -> new Tag(pair.getKey(), pair.getValue())).collect(Collectors.toList()); + final List tags = Arrays.stream(tag) + .map(pair -> new Tag(pair.getKey(), pair.getValue())).collect(Collectors.toList()); new Thread( () -> { int count = 0; try { while (++count <= 5 && !instanceIds.isEmpty()) { Thread.sleep(5000); - CreateTagsRequest createTagsRequest = new CreateTagsRequest().withResources(instanceIds).withTags(tags); + CreateTagsRequest createTagsRequest + = new CreateTagsRequest().withResources(instanceIds).withTags(tags); asynchEc2Client.createTagsAsync(createTagsRequest); Thread.sleep(1000); - Future describeInstances = asynchEc2Client.describeInstancesAsync(new DescribeInstancesRequest().withInstanceIds(instanceIds)); + Future describeInstances + = asynchEc2Client.describeInstancesAsync( + new DescribeInstancesRequest().withInstanceIds(instanceIds)); for (Reservation r : describeInstances.get().getReservations()) { for (Instance i : r.getInstances()) { if (i.getTags() != null && !i.getTags().isEmpty()) { @@ -435,40 +439,30 @@ private String buildNameTag(VMInstanceRequest instanceRequest) { @Override public List kill() { - List result; - try { - VMKillRequest killRequest = (VMKillRequest) request; - TerminateInstancesRequest terminateInstancesRequest = new TerminateInstancesRequest(killRequest.getInstances()); - TerminateInstancesResult terminateInstances = asynchEc2Client.terminateInstances(terminateInstancesRequest); - result = new AmazonDataConverter().processStateChange(terminateInstances.getTerminatingInstances()); - } catch (Exception ex) { - LOG.error(ex.getMessage()); - throw new RuntimeException(ex); - } - return result; - } - - public void killInstances(List instances) { - List instanceIds = instances.stream().map(VMInformation::getInstanceId).collect(Collectors.toCollection(() -> new ArrayList<>(instances.size()))); - asynchEc2Client.terminateInstances(new TerminateInstancesRequest(instanceIds)); + VMKillRequest killRequest = (VMKillRequest) request; + TerminateInstancesRequest terminateInstancesRequest = new TerminateInstancesRequest(killRequest.getInstances()); + TerminateInstancesResult terminateInstances = asynchEc2Client.terminateInstances(terminateInstancesRequest); + return new AmazonDataConverter().processStateChange(terminateInstances.getTerminatingInstances()); } @Override - public List kill(List instanceIds) { - List result = new ArrayList<>(); - try { - List instances = describeInstances(instanceIds.toArray(new String[0])); - List ids = instances.stream().map(VMInformation::getInstanceId).collect(Collectors.toList()); - if (!ids.isEmpty()) { - TerminateInstancesRequest terminateInstancesRequest = new TerminateInstancesRequest(ids); - TerminateInstancesResult terminateInstances = asynchEc2Client.terminateInstances(terminateInstancesRequest); - result = new AmazonDataConverter().processStateChange(terminateInstances.getTerminatingInstances()); - } - } catch (Exception ex) { - LOG.error(ex.getMessage(), ex); - throw new RuntimeException(ex); - } - return result; + public void killInstances(List instanceIds) { + asynchEc2Client.terminateInstancesAsync( + new TerminateInstancesRequest(instanceIds), + new AsyncHandler() { + @Override + public void onError(Exception exception) { + LOG.warn("something went wrong killing the instances {}", + exception.getLocalizedMessage()); + } + + @Override + public void onSuccess(TerminateInstancesRequest request, TerminateInstancesResult result) { + LOG.trace("instances killed successfully {}", + result.getTerminatingInstances()); + } + }); + //return new AmazonDataConverter().processStateChange(terminateInstances.getTerminatingInstances()); } /** @@ -483,7 +477,8 @@ public List findInstancesOfType(VMRegion region, VMImageType type for (Reservation res : instances.getReservations()) { if (res.getInstances() != null) { for (com.amazonaws.services.ec2.model.Instance inst : res.getInstances()) { - if ((inst.getState().getName().equalsIgnoreCase("running") || inst.getState().getName().equalsIgnoreCase("pending")) + if ((inst.getState().getName().equalsIgnoreCase("running") + || inst.getState().getName().equalsIgnoreCase("pending")) && inst.getImageId().equals(instanceForRegionAndType.getAmi())) { ret.add(new AmazonDataConverter().instanceToVmInformation(res, inst, region)); } @@ -579,7 +574,8 @@ public void associateAddress(final String instanceId, final Address address, fin .withAllocationId(address.getAllocationId())); } Thread.sleep((new Random().nextInt(10) + 10) * 100L); - Future describeInstances = asynchEc2Client.describeInstancesAsync(new DescribeInstancesRequest().withInstanceIds(instanceId)); + Future describeInstances + = asynchEc2Client.describeInstancesAsync(new DescribeInstancesRequest().withInstanceIds(instanceId)); for (Reservation r : describeInstances.get().getReservations()) { for (Instance i : r.getInstances()) { if (address.getPublicIp().equals(i.getPublicIpAddress())) { @@ -612,7 +608,8 @@ public void associateAddress(final String instanceId, final Address address, fin @Override public void reboot(List instances) { - List instanceIds = instances.stream().map(VMInformation::getInstanceId).collect(Collectors.toCollection(() -> new ArrayList<>(instances.size()))); + List instanceIds = instances.stream() + .map(VMInformation::getInstanceId).collect(Collectors.toCollection(() -> new ArrayList<>(instances.size()))); asynchEc2Client.rebootInstancesAsync(new RebootInstancesRequest(instanceIds)); // ec2Interface.rebootInstances(instanceIds); } @@ -620,22 +617,23 @@ public void reboot(List instances) { /** * @param instanceIds */ - public List stopInstances(List instanceIds) { - List result = new ArrayList(); - try { - List instances = describeInstances(instanceIds.toArray(new String[0])); - List ids = instances.stream().map(VMInformation::getInstanceId).collect(Collectors.toList()); - if (!ids.isEmpty()) { - StopInstancesRequest stopInstancesRequest = new StopInstancesRequest(ids); - StopInstancesResult stopResult = asynchEc2Client.stopInstances(stopInstancesRequest); - List stoppingInstances = stopResult.getStoppingInstances(); - result = new AmazonDataConverter().processStateChange(stoppingInstances); - } - } catch (Exception ex) { - LOG.error(ex.getMessage(), ex); - throw new RuntimeException(ex); - } - return result; + public void stopInstances(List instanceIds) { + asynchEc2Client.stopInstancesAsync( + new StopInstancesRequest(instanceIds), + new AsyncHandler() { + @Override + public void onError(Exception exception) { + LOG.warn("something went wrong stopping the instances {}", + exception.getLocalizedMessage()); + } + + @Override + public void onSuccess(StopInstancesRequest request, StopInstancesResult result) { + LOG.trace("instances stopped successfully {}", + result.getStoppingInstances()); + } + }); + //return new AmazonDataConverter().processStateChange(stoppingInstances); } /** @@ -643,8 +641,8 @@ public List stopInstances(List instanceIds) { * @return */ private String buildUserData(@Nonnull Map userDataMap) { - String sb = userDataMap.entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining("\n")); - + String sb = userDataMap.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining("\n")); return Base64.encodeBase64String(sb.getBytes()); } diff --git a/test_support/pom.xml b/test_support/pom.xml index bc24368b2..27bcd767a 100644 --- a/test_support/pom.xml +++ b/test_support/pom.xml @@ -6,7 +6,7 @@ com.intuit.tank test-support - 2.3.0 + 2.3.1 jar Intuit Tank Test Support module @@ -27,12 +27,27 @@ + + 2.22.2 + 2.0.0 + 3.8.1 + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + org.codehaus.mojo license-maven-plugin - + ${license-maven-plugin.version} file://${env.TANK_HOME}/src/license true @@ -50,9 +65,18 @@ **/org/** - + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${version.surefire} + + + diff --git a/tools/agent_debugger/pom.xml b/tools/agent_debugger/pom.xml index 3581cc4ee..bf9672dc1 100755 --- a/tools/agent_debugger/pom.xml +++ b/tools/agent_debugger/pom.xml @@ -5,7 +5,7 @@ com.intuit.tank tools-parent - 2.3.0 + 2.3.1 agent-debugger diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ActionProducer.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ActionProducer.java index 5db2dbfa5..c975d76f5 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ActionProducer.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ActionProducer.java @@ -538,9 +538,8 @@ public Action getSelectDataFileAction() { public void actionPerformed(ActionEvent e) { try { List dataFiles = dataFileClient.getDataFiles(); - Collections.sort(dataFiles, (DataFileDescriptor o1, DataFileDescriptor o2) -> - o2.getName().compareTo(o1.getName()) - ); + dataFiles.sort((DataFileDescriptor o1, DataFileDescriptor o2) -> + o2.getName().compareTo(o1.getName())); SelectDialog selectDialog = new SelectDialog( debuggerFrame, dataFiles, "datafiles", false); @@ -889,9 +888,7 @@ public static Icon getIcon(String string, IconSize size) { private void showError(final String msg) { LOG.error(msg); - SwingUtilities.invokeLater( () -> { - JOptionPane.showMessageDialog(debuggerFrame, msg, "Error", JOptionPane.ERROR_MESSAGE); - }); + SwingUtilities.invokeLater( () -> JOptionPane.showMessageDialog(debuggerFrame, msg, "Error", JOptionPane.ERROR_MESSAGE)); } private void setFromString(String scriptXml) { @@ -911,15 +908,9 @@ private HDWorkload unmarshalWorkload(String xml) { HDWorkload ret = null; try { ret = JaxbUtil.unmarshall(xml, HDWorkload.class); - } catch (JAXBException e) { + } catch (JAXBException | ParserConfigurationException | SAXException e) { JOptionPane.showMessageDialog(debuggerFrame, e.getMessage(), "Error unmarshalling xml", JOptionPane.ERROR_MESSAGE); - } catch (SAXException saxe) { - JOptionPane.showMessageDialog(debuggerFrame, saxe.getMessage(), "Error unmarshalling xml", - JOptionPane.ERROR_MESSAGE); - } catch (ParserConfigurationException pce) { - JOptionPane.showMessageDialog(debuggerFrame, pce.getMessage(), "Error unmarshalling xml", - JOptionPane.ERROR_MESSAGE); } return ret; } diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AgentDebuggerFrame.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AgentDebuggerFrame.java index c5d387300..d8f1970d7 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AgentDebuggerFrame.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AgentDebuggerFrame.java @@ -80,8 +80,6 @@ import com.intuit.tank.harness.data.TestStep; import com.intuit.tank.harness.functions.JexlIOFunctions; import com.intuit.tank.harness.functions.JexlStringFunctions; -import com.intuit.tank.harness.logging.LogUtil; -import com.intuit.tank.logging.LogEventType; import com.intuit.tank.logging.LoggingProfile; import com.intuit.tank.runner.TestStepContext; import com.intuit.tank.tools.debugger.ActionProducer.IconSize; @@ -101,30 +99,30 @@ public class AgentDebuggerFrame extends JFrame { private RSyntaxTextArea scriptEditorTA; private RTextScrollPane scriptEditorScrollPane; - private boolean standalone; - private ActionProducer debuggerActions; + private final boolean standalone; + private final ActionProducer debuggerActions; private HDWorkload currentWorkload; private HDTestPlan currentTestPlan; - private JComboBox testPlanChooser; - private JComboBox tankClientChooser; - private List stepChangedListeners = new ArrayList(); - private List scriptChangedListeners = new ArrayList(); - private Map projectVariables = new HashMap(); - private List datafileList = new ArrayList(); - private List steps = new ArrayList(); + private final JComboBox testPlanChooser; + private final JComboBox tankClientChooser; + private final List stepChangedListeners = new ArrayList(); + private final List scriptChangedListeners = new ArrayList(); + private final Map projectVariables = new HashMap(); + private final List datafileList = new ArrayList(); + private final List steps = new ArrayList(); private int currentRunningStep; - private ActionComponents actionComponents; + private final ActionComponents actionComponents; private DebuggerFlowController flowController; private APITestHarness harness; - private File workingDir; + private final File workingDir; private Thread runningThread; private RSyntaxTextArea loggerTA; - private InfiniteProgressPanel glassPane; + private final InfiniteProgressPanel glassPane; - private Icon errorIcon; - private Icon modifiedIcon; - private Icon skippedIcon; - private RequestResponsePanel requestResponsePanel; + private final Icon errorIcon; + private final Icon modifiedIcon; + private final Icon skippedIcon; + private final RequestResponsePanel requestResponsePanel; private ScriptSource scriptSource; private int lastLine; @@ -208,7 +206,7 @@ private void maybeShow(MouseEvent e) { if (modelToView.contains(point)) { if (!multiSelect) { int line = scriptEditorTA.getLineOfOffset(offset); - scriptEditorTA.setCurrentLine(line); + setCurrentLine(line); } popup.show(e.getComponent(), e.getX(), e.getY()); } @@ -295,12 +293,12 @@ protected void moveCursor(boolean moveUp) { scriptEditorTA.grabFocus(); int caretLineNumber = this.scriptEditorTA.getCaretLineNumber() + (moveUp ? -1 : 1); if (caretLineNumber > 0 && moveUp) { - scriptEditorTA.setCurrentLine(caretLineNumber); + setCurrentLine(caretLineNumber); fireStepChanged(caretLineNumber); } int lastLine = scriptEditorTA.getLineOfOffset(this.scriptEditorTA.getText().length()); if (!moveUp && caretLineNumber <= lastLine) { - scriptEditorTA.setCurrentLine(caretLineNumber); + setCurrentLine(caretLineNumber); fireStepChanged(caretLineNumber); } } catch (BadLocationException e) { @@ -554,7 +552,7 @@ public void setCurrentStep(final int stepIndex) { } else { scriptEditorTA.setActiveLineRange(currentRunningStep + 1, currentRunningStep + 1); } - scriptEditorTA.setCurrentLine(stepToSet); + setCurrentLine(stepToSet); repaint(); if (flowController.isSkipping()) { actionComponents.skipTo(); @@ -766,9 +764,7 @@ public void start() { // start apiHarness and get the variables.... try { createHarness(); - runningThread = new Thread(() -> { - harness.runConcurrentTestPlans(); - }); + runningThread = new Thread(() -> harness.runConcurrentTestPlans()); runningThread.start(); } catch (Exception e) { @@ -859,9 +855,7 @@ public void stepStarted(final TestStepContext context) { fireStepChanged(stepIndex); fireStepStarted(stepIndex); }); - } catch (InterruptedException e) { - e.printStackTrace(); - } catch (InvocationTargetException e) { + } catch (InterruptedException | InvocationTargetException e) { e.printStackTrace(); } } @@ -930,52 +924,23 @@ public void setDataFiles(List selectedObjects) { public TestStep getStep(int stepIndex) { return steps.get(stepIndex).getStepRun(); - } public void setCurrentTitle(String string) { this.actionComponents.setCurrentTitle(string); - } public void pause() { flowController.skipTo(-1); flowController.setSkipping(false); this.actionComponents.doneSkipping(); - } /** * @param args */ public static void main(String[] args) { - try { - java.security.Security.setProperty("networkaddress.cache.ttl", "0"); - } catch (Throwable e1) { - LOG.warn(LogUtil.getLogMessage("Error setting dns timeout: " + e1.toString(), LogEventType.System)); - } - try { - System.setProperty("jdk.certpath.disabledAlgorithms", ""); - } catch (Throwable e1) { - System.err.println("Error setting property jdk.certpath.disabledAlgorithms: " + e1.toString()); - e1.printStackTrace(); - } - String url = ""; - if (args.length > 0) { - url = args[0]; - } -/* Properties props = new Properties(); - try { - InputStream configStream = AgentDebuggerFrame.class.getResourceAsStream("/log4j.properties"); - props.load(configStream); - configStream.close(); - } catch (IOException e) { - System.out.println("Error: Cannot laod configuration file "); - } - props.setProperty("log4j.appender.agent.File", "debugger.log"); - LogManager.resetConfiguration(); - PropertyConfigurator.configure(props); -*/ + String url = args.length > 0 ? args[0] : ""; new AgentDebuggerFrame(true, url).setVisible(true); } @@ -1045,6 +1010,12 @@ private void doToggleSkip(int line) { } } + private void setCurrentLine(int line) { + try { + scriptEditorTA.setCaretPosition(scriptEditorTA.getLineStartOffset(line)); + } catch (BadLocationException e) { e.printStackTrace(); } + } + public RequestResponsePanel getRequestResponsePanel() { return requestResponsePanel; } diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AppletLauncher.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AppletLauncher.java index def049e27..69ac01327 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AppletLauncher.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/AppletLauncher.java @@ -42,9 +42,7 @@ public void init() { } // Execute a job on the event-dispatching thread; creating this applet's GUI. try { - SwingUtilities.invokeAndWait( () -> { - createGUI(); - }); + SwingUtilities.invokeAndWait(this::createGUI); } catch (Exception e) { System.err.println("createGUI didn't complete successfully"); } diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FilterComboBox.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FilterComboBox.java index 4943e5f14..c2d71dee6 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FilterComboBox.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FilterComboBox.java @@ -37,9 +37,7 @@ public FilterComboBox(List array) { final JTextField textfield = (JTextField) this.getEditor().getEditorComponent(); textfield.addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent ke) { - SwingUtilities.invokeLater( () -> { - comboFilter(textfield.getText()); - }); + SwingUtilities.invokeLater( () -> comboFilter(textfield.getText())); } }); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FindReplaceDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FindReplaceDialog.java index 93d61e43d..0df049891 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FindReplaceDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/FindReplaceDialog.java @@ -36,6 +36,7 @@ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.TitledBorder; +import javax.swing.text.BadLocationException; import org.apache.commons.lang3.StringUtils; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; @@ -74,8 +75,6 @@ public enum DialogType { * The window holder * @param type * The type of the dialog: FindReplace.FIND or FindReplace.REPLACE - * @param modal - * Displays dialog as a modal window if true */ public FindReplaceDialog(AgentDebuggerFrame parent, DialogType type) { @@ -328,7 +327,9 @@ private void find(RSyntaxTextArea textArea) { if (foundIndex != -1) { int lineOfOffset = textArea.getLineOfOffset(foundIndex); // textArea.setActiveLineRange(lineOfOffset, lineOfOffset); - textArea.setCurrentLine(lineOfOffset); + try { + textArea.setCaretPosition(textArea.getLineStartOffset(lineOfOffset)); + } catch (BadLocationException e) { e.printStackTrace(); } // textArea.setCaretPosition(foundIndex + searchTerm.length()); parent.repaint(); parent.fireStepChanged(lineOfOffset); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ScriptErrorViewDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ScriptErrorViewDialog.java index 9d6c6eb4c..9739d795d 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ScriptErrorViewDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/ScriptErrorViewDialog.java @@ -63,9 +63,7 @@ public void windowClosed(WindowEvent e) { add(sp, BorderLayout.CENTER); JPanel jPanel = new JPanel(new FlowLayout()); JButton button = new JButton("Close"); - button.addActionListener((ActionEvent e) -> { - setVisible(false); - }); + button.addActionListener((ActionEvent e) -> setVisible(false)); jPanel.add(button); add(jPanel, BorderLayout.SOUTH); setSize(new Dimension(400, 500)); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/SelectDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/SelectDialog.java index f380590eb..4123f588f 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/SelectDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/SelectDialog.java @@ -82,9 +82,7 @@ public SelectDialog(Frame f, List items, String itemType, boolea list = new JList(items.toArray()); list.setSelectionMode(singleSelection ? ListSelectionModel.SINGLE_SELECTION : ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); - list.addListSelectionListener( (ListSelectionEvent e) -> { - okBT.setEnabled(list.getSelectedIndex() != -1); - }); + list.addListSelectionListener( (ListSelectionEvent e) -> okBT.setEnabled(list.getSelectedIndex() != -1)); list.addMouseListener(new MouseAdapter() { /** @@ -175,13 +173,9 @@ public void setVisible(boolean b) { private Component createButtonPanel() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING, 10, 5)); JButton cancelBT = new JButton("Cancel"); - cancelBT.addActionListener( (ActionEvent arg0) -> { - setVisible(false); - }); + cancelBT.addActionListener( (ActionEvent arg0) -> setVisible(false)); okBT = new JButton("Ok"); - okBT.addActionListener( (ActionEvent arg0) -> { - select(); - }); + okBT.addActionListener( (ActionEvent arg0) -> select()); panel.add(okBT); panel.add(cancelBT); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/StepDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/StepDialog.java index 4acf47672..fb08d7d9d 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/StepDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/StepDialog.java @@ -80,9 +80,7 @@ private Component createButtonPanel() { panel.add(saveBT); JButton cancelBT = new JButton("Close"); - cancelBT.addActionListener( (ActionEvent arg0) -> { - setVisible(false); - }); + cancelBT.addActionListener( (ActionEvent arg0) -> setVisible(false)); panel.add(cancelBT); return panel; } diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariableDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariableDialog.java index 15240c9b4..e128451eb 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariableDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariableDialog.java @@ -119,9 +119,7 @@ private Component createButtonPanel() { panel.add(saveBT); JButton cancelBT = new JButton("Close"); - cancelBT.addActionListener( (ActionEvent arg0) -> { - setVisible(false); - }); + cancelBT.addActionListener( (ActionEvent arg0) -> setVisible(false)); panel.add(cancelBT); JButton addBt = new JButton("Add Variable"); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariablesPanel.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariablesPanel.java index de2852f54..45d02a4f0 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariablesPanel.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/VariablesPanel.java @@ -68,9 +68,7 @@ private JPanel createVarsPanel(final boolean isInitialValues) { top.add(BorderLayout.WEST, new JLabel(isInitialValues ? "Initial Varaible Values" : "Completed Variable Values")); JButton copyBtn = new JButton(ActionProducer.getIcon("copying_and_distribution.png", IconSize.SMALL)); - copyBtn.addActionListener( (ActionEvent arg0) -> { - displayVars(isInitialValues); - }); + copyBtn.addActionListener( (ActionEvent arg0) -> displayVars(isInitialValues)); top.add(BorderLayout.EAST, copyBtn); ret.add(BorderLayout.NORTH, top); VarsTableModel model = new VarsTableModel(); diff --git a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/XMlViewDialog.java b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/XMlViewDialog.java index ce2a8e1e8..dacc0a727 100644 --- a/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/XMlViewDialog.java +++ b/tools/agent_debugger/src/main/java/com/intuit/tank/tools/debugger/XMlViewDialog.java @@ -34,7 +34,9 @@ import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rtextarea.RTextScrollPane; +import org.fife.ui.rtextarea.SearchContext; import org.fife.ui.rtextarea.SearchEngine; +import org.fife.ui.rtextarea.SearchResult; /** * XMlViewDialog @@ -56,7 +58,6 @@ public class XMlViewDialog extends JDialog implements ActionListener { /** * @param parent - * @param xmlViewTA */ public XMlViewDialog(Frame parent) { super(parent); @@ -73,9 +74,7 @@ public void windowClosed(WindowEvent e) { RTextScrollPane sp = new RTextScrollPane(xmlViewTA); add(sp, BorderLayout.CENTER); JButton button = new JButton("Close"); - button.addActionListener( (ActionEvent e) -> { - setVisible(false); - }); + button.addActionListener( (ActionEvent e) -> setVisible(false)); add(button, BorderLayout.SOUTH); // Create a toolbar with searching options. @@ -114,13 +113,12 @@ public void actionPerformed(ActionEvent e) { if (text.length() == 0) { return; } - boolean forward = true; - boolean matchCase = matchCaseCB.isSelected(); - boolean wholeWord = false; - boolean regex = regexCB.isSelected(); - boolean found = SearchEngine.find(xmlViewTA, text, forward, - matchCase, wholeWord, regex); - if (!found) { + SearchContext searchContext = new SearchContext(text, matchCaseCB.isSelected()); + searchContext.setSearchForward(true); + searchContext.setWholeWord(false); + searchContext.setRegularExpression(regexCB.isSelected()); + SearchResult found = SearchEngine.find(xmlViewTA, searchContext); + if (!found.wasFound()) { JOptionPane.showMessageDialog(this, "Text not found"); } } @@ -130,13 +128,12 @@ else if ("FindPrev".equals(command)) { if (text.length() == 0) { return; } - boolean forward = false; - boolean matchCase = matchCaseCB.isSelected(); - boolean wholeWord = false; - boolean regex = regexCB.isSelected(); - boolean found = SearchEngine.find(xmlViewTA, text, forward, - matchCase, wholeWord, regex); - if (!found) { + SearchContext searchContext = new SearchContext(text, matchCaseCB.isSelected()); + searchContext.setSearchForward(false); + searchContext.setWholeWord(false); + searchContext.setRegularExpression(regexCB.isSelected()); + SearchResult found = SearchEngine.find(xmlViewTA, searchContext); + if (!found.wasFound()) { JOptionPane.showMessageDialog(this, "Text not found"); } } diff --git a/tools/agent_debugger/src/main/java/org/fife/io/DocumentReader.java b/tools/agent_debugger/src/main/java/org/fife/io/DocumentReader.java old mode 100644 new mode 100755 index d1a582912..e0bcc44e5 --- a/tools/agent_debugger/src/main/java/org/fife/io/DocumentReader.java +++ b/tools/agent_debugger/src/main/java/org/fife/io/DocumentReader.java @@ -3,210 +3,219 @@ * * DocumentReader.java - A reader for javax.swing.text.Document * objects. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.io; import java.io.Reader; + import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Segment; + /** * A Reader for javax.swing.text.Document objects. - * + * * @author Robert Futrell * @version 1.0 */ public class DocumentReader extends Reader { - /** - * The stream's position in the document. - */ - private long position; - - /** - * A remembered position in the document. - */ - private long mark; - - /** - * The document we're working on. - */ - private Document document; - - /** - * Used for fast character access. - */ - private Segment segment; - - /** - * Constructor. - * - * @param document - * The document we're 'reading'. - */ - public DocumentReader(Document document) { - position = 0; - mark = -1; - this.document = document; - this.segment = new Segment(); - } - - /** - * This currently does nothing... - */ - public void close() { - } - - /** - * Marks the present position in the stream. Subsequent calls to reset() will reposition the stream to - * this point. - * - * @param readAheadLimit - * Ignored. - */ - public void mark(int readAheadLimit) { - mark = position; - } - - /** - * Tells whether this reader supports the mark operation. This always returns true for - * DocumentReader. - */ - public boolean markSupported() { - return true; - } - - /** - * Reads the single character at the current position in the document. - */ - public int read() { - if (position >= document.getLength()) { - return -1; // Read past end of document. - } - try { - document.getText((int) position, 1, segment); - position++; - return segment.array[segment.offset]; - } catch (BadLocationException ble) { - /* Should never happen?? */ - ble.printStackTrace(); - return -1; - } - } - - /** - * Read array.length characters from the beginning of the document into array. - * - * @param array - * The array to read characters into. - * @return The number of characters read. - */ - public int read(char array[]) { - return read(array, 0, array.length); - } - - /** - * Reads characters into a portion of an array. - * - * @param cbuf - * The destination buffer. - * @param off - * Offset at which to start storing characters. - * @param len - * Maximum number of characters to read. - * @return The number of characters read, or -1 if the end of the stream (document) has been reached. - */ - public int read(char cbuf[], int off, int len) { - int k; - if (position >= document.getLength()) { - return -1; // Read past end of document. - } - k = len; - if ((position + k) >= document.getLength()) - k = document.getLength() - (int) position; - if (off + k >= cbuf.length) - k = cbuf.length - off; - try { - document.getText((int) position, k, segment); - position += k; - System.arraycopy(segment.array, segment.offset, - cbuf, off, - k); - return k; - } catch (BadLocationException ble) { - /* Should never happen ? */ - return -1; - } - } - - /** - * Tells whether this reader is ready to be read without blocking for input. DocumentReader will always - * return true. - * - * @return true if the next read operation will return without blocking. - */ - public boolean ready() { - return true; - } - - /** - * Resets the stream. If the stream has been marked, then attempt to reposition it at the mark. If the stream has - * not been marked, then move it to the beginning of the document. - */ - public void reset() { - if (mark == -1) { - position = 0; - } - else { - position = mark; - mark = -1; - } - } - - /** - * Skips characters. This will not 'skip' past the end of the document. - * - * @param n - * The number of characters to skip. - * @return The number of characters actually skipped. - */ - public long skip(long n) { - if (position + n <= document.getLength()) { - position += n; - return n; - } - long temp = position; - position = document.getLength(); - return document.getLength() - temp; - } - - /** - * Move to the specified position in the document. If pos is greater than the document's length, the - * stream's position is moved to the end of the document. - * - * @param pos - * The position in the document to move to. - */ - public void seek(long pos) { - position = Math.min(pos, document.getLength()); - } - -} \ No newline at end of file + /** + * The stream's position in the document. + */ + private long position; + + /** + * A remembered position in the document. + */ + private long mark; + + /** + * The document we're working on. + */ + private Document document; + + /** + * Used for fast character access. + */ + private Segment segment; + + + /** + * Constructor. + * + * @param document The document we're 'reading'. + */ + public DocumentReader(Document document) { + position = 0; + mark = -1; + this.document = document; + this.segment = new Segment(); + } + + + /** + * This currently does nothing... + */ + @Override + public void close() { + } + + + /** + * Marks the present position in the stream. Subsequent calls to + * reset() will reposition the stream to this point. + * + * @param readAheadLimit Ignored. + */ + @Override + public void mark(int readAheadLimit) { + mark = position; + } + + + /** + * Tells whether this reader supports the mark operation. + * This always returns true for DocumentReader. + */ + @Override + public boolean markSupported() { + return true; + } + + + /** + * Reads the single character at the current position in the document. + */ + @Override + public int read() { + if(position>=document.getLength()) { + return -1; // Read past end of document. + } + try { + document.getText((int)position,1, segment); + position++; + return segment.array[segment.offset]; + } catch (BadLocationException ble) { + /* Should never happen?? */ + ble.printStackTrace(); + return -1; + } + } + + + /** + * Read array.length characters from the beginning + * of the document into array. + * + * @param array The array to read characters into. + * @return The number of characters read. + */ + @Override + public int read(char[] array) { + return read(array, 0, array.length); + } + + + /** + * Reads characters into a portion of an array. + * + * @param cbuf The destination buffer. + * @param off Offset at which to start storing characters. + * @param len Maximum number of characters to read. + * @return The number of characters read, or -1 if the + * end of the stream (document) has been reached. + */ + @Override + public int read(char[] cbuf, int off, int len) { + int k; + if(position>=document.getLength()) { + return -1; // Read past end of document. + } + k = len; + if((position+k)>=document.getLength()) { + k = document.getLength() - (int)position; + } + if(off + k >= cbuf.length) { + k = cbuf.length - off; + } + try { + document.getText((int)position, k, segment); + position += k; + System.arraycopy(segment.array,segment.offset, + cbuf,off, + k); + return k; + } catch (BadLocationException ble) { + /* Should never happen ? */ + return -1; + } + } + + + /** + * Tells whether this reader is ready to be read without + * blocking for input. DocumentReader will + * always return true. + * + * @return true if the next read operation will + * return without blocking. + */ + @Override + public boolean ready() { + return true; + } + + + /** + * Resets the stream. If the stream has been marked, then attempt to + * reposition it at the mark. If the stream has not been marked, then + * move it to the beginning of the document. + */ + @Override + public void reset() { + if(mark==-1) { + position = 0; + } + else { + position = mark; + mark = -1; + } + } + + + /** + * Skips characters. This will not 'skip' past the end of the document. + * + * @param n The number of characters to skip. + * @return The number of characters actually skipped. + */ + @Override + public long skip(long n) { + if (position+n<=document.getLength()) { + position += n; + return n; + } + long temp = position; + position = document.getLength(); + return document.getLength() - temp; + } + + + /** + * Move to the specified position in the document. If pos + * is greater than the document's length, the stream's position is moved + * to the end of the document. + * + * @param pos The position in the document to move to. + */ + public void seek(long pos) { + position = Math.min(pos, document.getLength()); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/io/UnicodeReader.java b/tools/agent_debugger/src/main/java/org/fife/io/UnicodeReader.java old mode 100644 new mode 100755 index f87e3e2ad..d3b8f4a3e --- a/tools/agent_debugger/src/main/java/org/fife/io/UnicodeReader.java +++ b/tools/agent_debugger/src/main/java/org/fife/io/UnicodeReader.java @@ -3,272 +3,260 @@ * * UnicodeReader.java - A reader for Unicode input streams that is capable of * discerning which particular encoding is being used via the BOM. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.io; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.IOException; import java.io.PushbackInputStream; import java.io.Reader; + /** - * A reader capable of identifying Unicode streams by their BOMs. This class will recognize the following encodings: + * A reader capable of identifying Unicode streams by their BOMs. This class + * will recognize the following encodings: *
    - *
  • UTF-8 - *
  • UTF-16LE - *
  • UTF-16BE - *
  • UTF-32LE - *
  • UTF-32BE + *
  • UTF-8 + *
  • UTF-16LE + *
  • UTF-16BE + *
  • UTF-32LE + *
  • UTF-32BE *
- * If the stream is not found to be any of the above, then a default encoding is used for reading. The user can specify - * this default encoding, or a system default will be used. - *

- * - * For optimum performance, it is recommended that you wrap all instances of UnicodeReader with a - * java.io.BufferedReader. - *

- * - * This class is mostly ripped off from the workaround in the description of Java Bug 4508058. - * + * If the stream is not found to be any of the above, then a default encoding + * is used for reading. The user can specify this default encoding, or a system + * default will be used.

+ * + * For optimum performance, it is recommended that you wrap all instances of + * UnicodeReader with a java.io.BufferedReader.

+ * + * This class is mostly ripped off from the workaround in the description of + * Java Bug 4508058. + * * @author Robert Futrell * @version 0.9 */ +@SuppressWarnings({ "checkstyle:magicnumber" }) public class UnicodeReader extends Reader { - /** - * The input stream from which we're really reading. - */ - private InputStreamReader internalIn = null; - - /** - * The encoding being used. We keep our own instead of using the string returned by - * java.io.InputStreamReader since that class does not return user-friendly names. - */ - private String encoding; - - /** - * The size of a BOM. - */ - private static final int BOM_SIZE = 4; - - /** - * This utility constructor is here because you will usually use a UnicodeReader on files. - *

- * Creates a reader using the encoding specified by the BOM in the file; if there is no recognized BOM, then a - * system default encoding is used. - * - * @param file - * The file from which you want to read. - * @throws IOException - * If an error occurs when checking for/reading the BOM. - * @throws FileNotFoundException - * If the file does not exist, is a directory, or cannot be opened for reading. - * @throws SecurityException - * If a security manager exists and its checkRead method denies read access to the file. - */ - public UnicodeReader(String file) throws IOException, - FileNotFoundException, SecurityException { - this(new File(file)); - } - - /** - * This utility constructor is here because you will usually use a UnicodeReader on files. - *

- * Creates a reader using the encoding specified by the BOM in the file; if there is no recognized BOM, then a - * system default encoding is used. - * - * @param file - * The file from which you want to read. - * @throws IOException - * If an error occurs when checking for/reading the BOM. - * @throws FileNotFoundException - * If the file does not exist, is a directory, or cannot be opened for reading. - * @throws SecurityException - * If a security manager exists and its checkRead method denies read access to the file. - */ - public UnicodeReader(File file) throws IOException, FileNotFoundException, - SecurityException { - this(new FileInputStream(file)); - } - - /** - * This utility constructor is here because you will usually use a UnicodeReader on files. - *

- * Creates a reader using the encoding specified by the BOM in the file; if there is no recognized BOM, then a - * specified default encoding is used. - * - * @param file - * The file from which you want to read. - * @param defaultEncoding - * The encoding to use if no BOM is found. If this value is null, a system default is used. - * @throws IOException - * If an error occurs when checking for/reading the BOM. - * @throws FileNotFoundException - * If the file does not exist, is a directory, or cannot be opened for reading. - * @throws SecurityException - * If a security manager exists and its checkRead method denies read access to the file. - */ - public UnicodeReader(File file, String defaultEncoding) - throws IOException, FileNotFoundException, - SecurityException { - this(new FileInputStream(file), defaultEncoding); - } - - /** - * Creates a reader using the encoding specified by the BOM in the file; if there is no recognized BOM, then a - * system default encoding is used. - * - * @param in - * The input stream from which to read. - * @throws IOException - * If an error occurs when checking for/reading the BOM. - */ - public UnicodeReader(InputStream in) throws IOException { - this(in, null); - } - - /** - * Creates a reader using the encoding specified by the BOM in the file; if there is no recognized BOM, then - * defaultEncoding is used. - * - * @param in - * The input stream from which to read. - * @param defaultEncoding - * The encoding to use if no recognized BOM is found. If this value is null, a system - * default is used. - * @throws IOException - * If an error occurs when checking for/reading the BOM. - */ - public UnicodeReader(InputStream in, String defaultEncoding) - throws IOException { - init(in, defaultEncoding); - } - - /** - * Closes this reader. - */ - public void close() throws IOException { - internalIn.close(); - } - - /** - * Returns the encoding being used to read this input stream (i.e., the encoding of the file). If a BOM was - * recognized, then the specific Unicode type is returned; otherwise, either the default encoding passed into the - * constructor or the system default is returned. - * - * @return The encoding of the stream. - */ - public String getEncoding() { - return encoding; - } - - /** - * Read-ahead four bytes and check for BOM marks. Extra bytes are unread back to the stream, only BOM bytes are - * skipped. - * - * @param defaultEncoding - * The encoding to use if no BOM was recognized. If this value is null, then a system - * default is used. - * @throws IOException - * If an error occurs when trying to read a BOM. - */ - protected void init(InputStream in, String defaultEncoding) - throws IOException { - - PushbackInputStream tempIn = new PushbackInputStream(in, BOM_SIZE); - - byte bom[] = new byte[BOM_SIZE]; - int n, unread; - n = tempIn.read(bom, 0, bom.length); - - if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00) && - (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) { - encoding = "UTF-32BE"; - unread = n - 4; - } - - else if (n == BOM_SIZE && // Last 2 bytes are 0; could be an empty UTF-16 - (bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE) && - (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) { - encoding = "UTF-32LE"; - unread = n - 4; - } - - else if ((bom[0] == (byte) 0xEF) && - (bom[1] == (byte) 0xBB) && - (bom[2] == (byte) 0xBF)) { - encoding = "UTF-8"; - unread = n - 3; - } - - else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) { - encoding = "UTF-16BE"; - unread = n - 2; - } - - else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) { - encoding = "UTF-16LE"; - unread = n - 2; - } - - else { - // Unicode BOM mark not found, unread all bytes - encoding = defaultEncoding; - unread = n; - } - - if (unread > 0) - tempIn.unread(bom, (n - unread), unread); - else if (unread < -1) - tempIn.unread(bom, 0, 0); - - // Use given encoding - if (encoding == null) { - internalIn = new InputStreamReader(tempIn); - encoding = internalIn.getEncoding(); // Get the default. - } - else { - internalIn = new InputStreamReader(tempIn, encoding); - } - - } - - /** - * Read characters into a portion of an array. This method will block until some input is available, an I/O error - * occurs, or the end of the stream is reached. - * - * @param cbuf - * The buffer into which to read. - * @param off - * The offset at which to start storing characters. - * @param len - * The maximum number of characters to read. - * - * @return The number of characters read, or -1 if the end of the stream has been reached. - */ - public int read(char[] cbuf, int off, int len) throws IOException { - return internalIn.read(cbuf, off, len); - } - -} \ No newline at end of file + /** + * The input stream from which we're really reading. + */ + private InputStreamReader internalIn = null; + + /** + * The encoding being used. We keep our own instead of using the string + * returned by java.io.InputStreamReader since that class + * does not return user-friendly names. + */ + private String encoding; + + /** + * The size of a BOM. + */ + private static final int BOM_SIZE = 4; + + + /** + * This utility constructor is here because you will usually use a + * UnicodeReader on files.

+ * Creates a reader using the encoding specified by the BOM in the file; + * if there is no recognized BOM, then a system default encoding is used. + * + * @param file The file from which you want to read. + * @throws IOException If an error occurs when checking for/reading the + * BOM. + * @throws SecurityException If a security manager exists and its + * checkRead method denies read access to the file. + */ + public UnicodeReader(String file) throws IOException { + this(new File(file)); + } + + + /** + * This utility constructor is here because you will usually use a + * UnicodeReader on files.

+ * Creates a reader using the encoding specified by the BOM in the file; + * if there is no recognized BOM, then a system default encoding is used. + * + * @param file The file from which you want to read. + * @throws IOException If an error occurs when checking for/reading the + * BOM. + * @throws SecurityException If a security manager exists and its + * checkRead method denies read access to the file. + */ + public UnicodeReader(File file) throws IOException { + this(new FileInputStream(file)); + } + + + /** + * This utility constructor is here because you will usually use a + * UnicodeReader on files.

+ * Creates a reader using the encoding specified by the BOM in the file; + * if there is no recognized BOM, then a specified default encoding is + * used. + * + * @param file The file from which you want to read. + * @param defaultEncoding The encoding to use if no BOM is found. If + * this value is null, a system default is used. + * @throws IOException If an error occurs when checking for/reading the + * BOM. + * @throws SecurityException If a security manager exists and its + * checkRead method denies read access to the file. + */ + public UnicodeReader(File file, String defaultEncoding) throws IOException { + this(new FileInputStream(file), defaultEncoding); + } + + + /** + * Creates a reader using the encoding specified by the BOM in the file; + * if there is no recognized BOM, then a system default encoding is used. + * + * @param in The input stream from which to read. + * @throws IOException If an error occurs when checking for/reading the + * BOM. + */ + public UnicodeReader(InputStream in) throws IOException { + this(in, null); + } + + + /** + * Creates a reader using the encoding specified by the BOM in the file; + * if there is no recognized BOM, then defaultEncoding is + * used. + * + * @param in The input stream from which to read. + * @param defaultEncoding The encoding to use if no recognized BOM is + * found. If this value is null, a system default + * is used. + * @throws IOException If an error occurs when checking for/reading the + * BOM. + */ + public UnicodeReader(InputStream in, String defaultEncoding) + throws IOException { + init(in, defaultEncoding); + } + + + /** + * Closes this reader. + */ + @Override + public void close() throws IOException { + internalIn.close(); + } + + + /** + * Returns the encoding being used to read this input stream (i.e., the + * encoding of the file). If a BOM was recognized, then the specific + * Unicode type is returned; otherwise, either the default encoding passed + * into the constructor or the system default is returned. + * + * @return The encoding of the stream. + */ + public String getEncoding() { + return encoding; + } + + + /** + * Read-ahead four bytes and check for BOM marks. Extra bytes are + * unread back to the stream, only BOM bytes are skipped. + * + * @param defaultEncoding The encoding to use if no BOM was recognized. If + * this value is null, then a system default is used. + * @throws IOException If an error occurs when trying to read a BOM. + */ + protected void init(InputStream in, String defaultEncoding) + throws IOException { + + PushbackInputStream tempIn = new PushbackInputStream(in, BOM_SIZE); + + byte[] bom = new byte[BOM_SIZE]; + int n, unread; + n = tempIn.read(bom, 0, bom.length); + + if ((bom[0]==(byte)0x00) && (bom[1]==(byte)0x00) && + (bom[2]==(byte)0xFE) && (bom[3]==(byte)0xFF)) { + encoding = "UTF-32BE"; + unread = n - 4; + } + + else if (n==BOM_SIZE && // Last 2 bytes are 0; could be an empty UTF-16 + (bom[0]==(byte)0xFF) && (bom[1]==(byte)0xFE) && + (bom[2]==(byte)0x00) && (bom[3]==(byte)0x00)) { + encoding = "UTF-32LE"; + unread = n - 4; + } + + else if ((bom[0]==(byte)0xEF) && + (bom[1]==(byte)0xBB) && + (bom[2]==(byte)0xBF)) { + encoding = "UTF-8"; + unread = n - 3; + } + + else if ((bom[0]==(byte)0xFE) && (bom[1] == (byte)0xFF)) { + encoding = "UTF-16BE"; + unread = n - 2; + } + + else if ((bom[0]==(byte)0xFF) && (bom[1]== (byte)0xFE)) { + encoding = "UTF-16LE"; + unread = n - 2; + } + + else { + // Unicode BOM mark not found, unread all bytes + encoding = defaultEncoding; + unread = n; + } + + if (unread > 0) { + tempIn.unread(bom, (n - unread), unread); + } + else if (unread < -1) { + tempIn.unread(bom, 0, 0); + } + + // Use given encoding + if (encoding == null) { + internalIn = new InputStreamReader(tempIn); + encoding = internalIn.getEncoding(); // Get the default. + } + else { + internalIn = new InputStreamReader(tempIn, encoding); + } + + } + + + /** + * Read characters into a portion of an array. This method will block until + * some input is available, an I/O error occurs, or the end of the stream + * is reached. + * + * @param cbuf The buffer into which to read. + * @param off The offset at which to start storing characters. + * @param len The maximum number of characters to read. + * + * @return The number of characters read, or -1 if the end + * of the stream has been reached. + */ + @Override + public int read(char[] cbuf, int off, int len) throws IOException { + return internalIn.read(cbuf, off, len); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/io/UnicodeWriter.java b/tools/agent_debugger/src/main/java/org/fife/io/UnicodeWriter.java old mode 100644 new mode 100755 index 929b8a942..28bfd01bc --- a/tools/agent_debugger/src/main/java/org/fife/io/UnicodeWriter.java +++ b/tools/agent_debugger/src/main/java/org/fife/io/UnicodeWriter.java @@ -2,23 +2,9 @@ * 09/24/2004 * * UnicodeWriter.java - Writes Unicode output with the proper BOM. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.io; @@ -27,243 +13,249 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; import java.io.Writer; + /** - * Writes Unicode text to an output stream. If the specified encoding is a Unicode, then the text is preceeded by the - * proper Unicode BOM. If it is any other encoding, this class behaves just like OutputStreamWriter. This - * class is here because Java's OutputStreamWriter apparently doesn't believe in writing BOMs. + * Writes Unicode text to an output stream. If the specified encoding is a + * Unicode, then the text is preceded by the proper Unicode BOM. If it is any + * other encoding, this class behaves just like OutputStreamWriter. + * This class is here because Java's OutputStreamWriter apparently + * doesn't believe in writing BOMs. *

- * - * For optimum performance, it is recommended that you wrap all instances of UnicodeWriter with a - * java.io.BufferedWriter. - * + * + * For optimum performance, it is recommended that you wrap all instances of + * UnicodeWriter with a java.io.BufferedWriter. + * * @author Robert Futrell * @version 0.7 */ public class UnicodeWriter extends Writer { - /** - * If this system property evaluates to "false", ignoring case, files written out as UTF-8 will not - * have a BOM written for them. Otherwise (even if the property is not set), UTF-8 files will have a BOM written. - */ - public static final String PROPERTY_WRITE_UTF8_BOM = - "UnicodeWriter.writeUtf8BOM"; - - /** - * The writer actually doing the writing. - */ - private OutputStreamWriter internalOut; - - private static final byte[] UTF8_BOM = new byte[] { - (byte) 0xEF, - (byte) 0xBB, - (byte) 0xBF - }; - - private static final byte[] UTF16LE_BOM = new byte[] { - (byte) 0xFF, - (byte) 0xFE - }; - - private static final byte[] UTF16BE_BOM = new byte[] { - (byte) 0xFE, - (byte) 0xFF - }; - - private static final byte[] UTF32LE_BOM = new byte[] { - (byte) 0xFF, - (byte) 0xFE, - (byte) 0x00, - (byte) 0x00 - }; - - private static final byte[] UTF32BE_BOM = new byte[] { - (byte) 0x00, - (byte) 0x00, - (byte) 0xFE, - (byte) 0xFF - }; - - /** - * This is a utility constructor since the vast majority of the time, this class will be used to write Unicode - * files. - * - * @param fileName - * The file to which to write the Unicode output. - * @param encoding - * The encoding to use. - * @throws UnsupportedEncodingException - * If the specified encoding is not supported. - * @throws IOException - * If an IO exception occurs. - */ - public UnicodeWriter(String fileName, String encoding) - throws UnsupportedEncodingException, IOException { - this(new FileOutputStream(fileName), encoding); - } - - /** - * This is a utility constructor since the vast majority of the time, this class will be used to write Unicode - * files. - * - * @param file - * The file to which to write the Unicode output. - * @param encoding - * The encoding to use. - * @throws UnsupportedEncodingException - * If the specified encoding is not supported. - * @throws IOException - * If an IO exception occurs. - */ - public UnicodeWriter(File file, String encoding) - throws UnsupportedEncodingException, IOException { - this(new FileOutputStream(file), encoding); - } - - /** - * Creates a new writer. - * - * @param out - * The output stream to write. - * @param encoding - * The encoding to use. - * @throws UnsupportedEncodingException - * If the specified encoding is not supported. - * @throws IOException - * If an IO exception occurs. - */ - public UnicodeWriter(OutputStream out, String encoding) - throws UnsupportedEncodingException, IOException { - init(out, encoding); - } - - /** - * Closes this writer. - * - * @throws IOException - * If an IO exception occurs. - */ - public void close() throws IOException { - internalOut.close(); - } - - /** - * Flushes the stream. - * - * @throws IOException - * If an IO exception occurs. - */ - public void flush() throws IOException { - internalOut.flush(); - } - - /** - * Returns the encoding being used to write this output stream (i.e., the encoding of the file). - * - * @return The encoding of the stream. - */ - public String getEncoding() { - return internalOut.getEncoding(); - } - - /** - * Returns whether UTF-8 files should have a BOM in them when written. - * - * @return Whether to write a BOM for UTF-8 files. - */ - public static boolean getWriteUtf8BOM() { - String prop = System.getProperty(PROPERTY_WRITE_UTF8_BOM); - if (prop != null && Boolean.valueOf(prop).equals(Boolean.FALSE)) { - return false; - } - return true; - } - - /** - * Initializes the internal output stream and writes the BOM if the specified encoding is a Unicode encoding. - * - * @param out - * The output stream we are writing. - * @param encoding - * The encoding in which to write. - * @throws UnsupportedEncodingException - * If the specified encoding isn't supported. - * @throws IOException - * If an I/O error occurs while writing a BOM. - */ - private void init(OutputStream out, String encoding) - throws UnsupportedEncodingException, IOException { - - internalOut = new OutputStreamWriter(out, encoding); - - // Write the proper BOM if they specified a Unicode encoding. - // NOTE: Creating an OutputStreamWriter with encoding "UTF-16" DOES - // DOES write out the BOM; "UTF-16LE", "UTF-16BE", "UTF-32", "UTF-32LE" - // and "UTF-32BE" don't. - if ("UTF-8".equals(encoding)) { - if (getWriteUtf8BOM()) { - out.write(UTF8_BOM, 0, UTF8_BOM.length); - } - } - else if ("UTF-16LE".equals(encoding)) { - out.write(UTF16LE_BOM, 0, UTF16LE_BOM.length); - } - else if (/* "UTF-16".equals(encoding) || */"UTF-16BE".equals(encoding)) { - out.write(UTF16BE_BOM, 0, UTF16BE_BOM.length); - } - else if ("UTF-32LE".equals(encoding)) { - out.write(UTF32LE_BOM, 0, UTF32LE_BOM.length); - } - else if ("UTF-32".equals(encoding) || "UTF-32BE".equals(encoding)) { - out.write(UTF32BE_BOM, 0, UTF32BE_BOM.length); - } - - } - - /** - * Writes a portion of an array of characters. - * - * @param cbuf - * The buffer of characters. - * @param off - * The offset from which to start writing characters. - * @param len - * The number of characters to write. - * @throws IOException - * If an I/O error occurs. - */ - public void write(char[] cbuf, int off, int len) throws IOException { - internalOut.write(cbuf, off, len); - } - - /** - * Writes a single character. - * - * @param c - * An integer specifying the character to write. - * @throws IOException - * If an IO error occurs. - */ - public void write(int c) throws IOException { - internalOut.write(c); - } - - /** - * Writes a portion of a string. - * - * @param str - * The string from which to write. - * @param off - * The offset from which to start writing characters. - * @param len - * The number of characters to write. - * @throws IOException - * If an IO error occurs. - */ - public void write(String str, int off, int len) throws IOException { - internalOut.write(str, off, len); - } - -} \ No newline at end of file + /** + * If this system property evaluates to "false", ignoring + * case, files written out as UTF-8 will not have a BOM written for them. + * Otherwise (even if the property is not set), UTF-8 files will have a + * BOM written. + */ + public static final String PROPERTY_WRITE_UTF8_BOM = + "UnicodeWriter.writeUtf8BOM"; + + + /** + * The writer actually doing the writing. + */ + private OutputStreamWriter internalOut; + + private static final byte[] UTF8_BOM = new byte[] { + (byte)0xEF, + (byte)0xBB, + (byte)0xBF + }; + + private static final byte[] UTF16LE_BOM = new byte[] { + (byte)0xFF, + (byte)0xFE + }; + + private static final byte[] UTF16BE_BOM = new byte[] { + (byte)0xFE, + (byte)0xFF + }; + + private static final byte[] UTF32LE_BOM = new byte[] { + (byte)0xFF, + (byte)0xFE, + (byte)0x00, + (byte)0x00 + }; + + private static final byte[] UTF32BE_BOM = new byte[] { + (byte)0x00, + (byte)0x00, + (byte)0xFE, + (byte)0xFF + }; + + + /** + * This is a utility constructor since the vast majority of the time, this + * class will be used to write Unicode files. + * + * @param fileName The file to which to write the Unicode output. + * @param encoding The encoding to use. + * @throws IOException If an IO exception occurs. + */ + public UnicodeWriter(String fileName, String encoding) throws IOException { + this(new FileOutputStream(fileName), encoding); + } + + + + /** + * This is a utility constructor since the vast majority of the time, this + * class will be used to write Unicode files. + * + * @param file The file to which to write the Unicode output. + * @param encoding The encoding to use. + * @throws IOException If an IO exception occurs. + */ + public UnicodeWriter(File file, String encoding) throws IOException { + this(new FileOutputStream(file), encoding); + } + + + + /** + * Creates a new writer. + * + * @param out The output stream to write. + * @param encoding The encoding to use. + * @throws IOException If an IO exception occurs. + */ + public UnicodeWriter(OutputStream out, String encoding) throws IOException { + init(out, encoding); + } + + + /** + * Closes this writer. + * + * @throws IOException If an IO exception occurs. + */ + @Override + public void close() throws IOException { + internalOut.close(); + } + + + /** + * Flushes the stream. + * + * @throws IOException If an IO exception occurs. + */ + @Override + public void flush() throws IOException { + internalOut.flush(); + } + + + /** + * Returns the encoding being used to write this output stream (i.e., the + * encoding of the file). + * + * @return The encoding of the stream. + */ + public String getEncoding() { + return internalOut.getEncoding(); + } + + + /** + * Returns whether UTF-8 files should have a BOM in them when written. + * + * @return Whether to write a BOM for UTF-8 files. + * @see #setWriteUtf8BOM(boolean) + * @see UnicodeWriter + */ + public static boolean getWriteUtf8BOM() { + String prop = System.getProperty(PROPERTY_WRITE_UTF8_BOM); + // We default to writing the BOM, for some reason. + if (prop!=null && Boolean.valueOf(prop).equals(Boolean.FALSE)) { + return false; + } + return true; + } + + + /** + * Initializes the internal output stream and writes the BOM if the + * specified encoding is a Unicode encoding. + * + * @param out The output stream we are writing. + * @param encoding The encoding in which to write. + * @throws IOException If an I/O error occurs while writing a BOM. + */ + private void init(OutputStream out, String encoding) throws IOException { + + internalOut = new OutputStreamWriter(out, encoding); + + // Write the proper BOM if they specified a Unicode encoding. + // NOTE: Creating an OutputStreamWriter with encoding "UTF-16" DOES + // DOES write out the BOM; "UTF-16LE", "UTF-16BE", "UTF-32", "UTF-32LE" + // and "UTF-32BE" don't. + if ("UTF-8".equals(encoding)) { + if (getWriteUtf8BOM()) { + out.write(UTF8_BOM, 0, UTF8_BOM.length); + } + } + else if ("UTF-16LE".equals(encoding)) { + out.write(UTF16LE_BOM, 0, UTF16LE_BOM.length); + } + else if (/*"UTF-16".equals(encoding) || */"UTF-16BE".equals(encoding)) { + out.write(UTF16BE_BOM, 0, UTF16BE_BOM.length); + } + else if ("UTF-32LE".equals(encoding)) { + out.write(UTF32LE_BOM, 0, UTF32LE_BOM.length); + } + else if ("UTF-32".equals(encoding) || "UTF-32BE".equals(encoding)) { + out.write(UTF32BE_BOM, 0, UTF32BE_BOM.length); + } + + } + + + /** + * Sets whether UTF-8 files should have a BOM written in them. + * + * @param write Whether to write a BOM. + * @see #getWriteUtf8BOM() + * @see UnicodeWriter + */ + public static void setWriteUtf8BOM(boolean write) { + System.setProperty(UnicodeWriter.PROPERTY_WRITE_UTF8_BOM, + Boolean.toString(write)); + } + + + /** + * Writes a portion of an array of characters. + * + * @param cbuf The buffer of characters. + * @param off The offset from which to start writing characters. + * @param len The number of characters to write. + * @throws IOException If an I/O error occurs. + */ + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + internalOut.write(cbuf, off, len); + } + + + /** + * Writes a single character. + * + * @param c An integer specifying the character to write. + * @throws IOException If an IO error occurs. + */ + @Override + public void write(int c) throws IOException { + internalOut.write(c); + } + + + /** + * Writes a portion of a string. + * + * @param str The string from which to write. + * @param off The offset from which to start writing characters. + * @param len The number of characters to write. + * @throws IOException If an IO error occurs. + */ + @Override + public void write(String str, int off, int len) throws IOException { + internalOut.write(str, off, len); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/print/RPrintUtilities.java b/tools/agent_debugger/src/main/java/org/fife/print/RPrintUtilities.java old mode 100644 new mode 100755 index 0c55ab4f1..364bb4a33 --- a/tools/agent_debugger/src/main/java/org/fife/print/RPrintUtilities.java +++ b/tools/agent_debugger/src/main/java/org/fife/print/RPrintUtilities.java @@ -3,545 +3,556 @@ * * RPrintUtilities.java - A collection of static methods useful for printing * text from Swing text components. - * Copyright (C) 2003 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.print; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.print.PageFormat; +import java.awt.print.Printable; + import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; -import javax.swing.text.Segment; import javax.swing.text.JTextComponent; +import javax.swing.text.Segment; import javax.swing.text.TabExpander; import javax.swing.text.Utilities; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics; -import java.awt.print.*; + + /** * A collection of static methods useful for printing text from Swing text components. - * + * * @author Robert Futrell * @version 1.0 */ public abstract class RPrintUtilities { - private static int currentDocLineNumber; // The line number in the document we are currently on. - private static int numDocLines; // The number of lines in the current document. - private static Element rootElement; // The first Element (line) in the current document. - - // The characters at which to break a line if implementing word wrap. - private static final char[] breakChars = { ' ', '\t', ',', '.', ';', '?', '!' }; - - // These variables are 'global' because RPrintTabExpander uses them. - private static int xOffset; // The x-offset (for the page margin) when printing. - private static int tabSizeInSpaces; // The length of a tab, in spaces. - private static FontMetrics fm; // The metrics of the font currently being used to print. - - /** - * Returns the position closest to, but before, position maxCharsPerLine in line of one of - * the chars in breakChars, or simply returns maxCharsPerLine-1 if none of the - * breakChars comes before that position. This position represents the logical line break for this - * java.lang.String if it is being printed in a monospaced font when lines can only be - * maxCharsPerLine characters long. - * - * @param line - * The text being printed. - * @param maxCharsPerLine - * Only up-to this many characters from line can be printed on one line. - * @return The logical position at which to stop printing line to simulate word wrap. - */ - private static int getLineBreakPoint(String line, final int maxCharsPerLine) { - - int breakPoint = -1; - for (char breakChar : breakChars) { - int breakCharPos = line.lastIndexOf(breakChar, maxCharsPerLine - 1); - if (breakCharPos > breakPoint) - breakPoint = breakCharPos; - } - - return (breakPoint == -1 ? maxCharsPerLine - 1 : breakPoint); - - } - - /** - * Prints a Document using a monospaced font, and does no word wrapping (ie, words will wrap mid-word - * to the next line). This method is expected to be called from Printable 'print(Graphics g)' functions. - * - * @param g - * The graphics context to write to. - * @param doc - * The javax.swing.text.Document to print. - * @param fontSize - * the point size to use for the monospaced font. - * @param pageIndex - * The page number to print. - * @param pageFormat - * The format to print the page with. - * @param tabSize - * The number of spaces to expand tabs to. - * - * @see #printDocumentMonospacedWordWrap - */ - public static int printDocumentMonospaced(Graphics g, Document doc, int fontSize, int pageIndex, - PageFormat pageFormat, int tabSize) { - - g.setColor(Color.BLACK); - g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); - - // Initialize our static variables (these are used by our tab expander below). - tabSizeInSpaces = tabSize; - fm = g.getFontMetrics(); - - // Create our tab expander. - // RPrintTabExpander tabExpander = new RPrintTabExpander(); - - // Get width and height of characters in this monospaced font. - int fontWidth = fm.charWidth('w'); // Any character will do as font is monospaced. - int fontHeight = fm.getHeight(); - - int MAX_CHARS_PER_LINE = (int) pageFormat.getImageableWidth() / fontWidth; - int MAX_LINES_PER_PAGE = (int) pageFormat.getImageableHeight() / fontHeight; - - final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; - - // The (x,y) coordinate to print at (in pixels, not characters). - // Since y is the baseline of where we'll start printing (not the top-left - // corner), we offset it by the font's ascent ( + 1 just for good measure). - xOffset = (int) pageFormat.getImageableX(); - int y = (int) pageFormat.getImageableY() + fm.getAscent() + 1; - - // A counter to keep track of the number of lines that WOULD HAVE been - // printed if we were printing all lines. - int numPrintedLines = 0; - - // Keep going while there are more lines in the document. - currentDocLineNumber = 0; // The line number of the document we're currently on. - rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. - numDocLines = rootElement.getElementCount(); // The number of lines in our document. - while (currentDocLineNumber < numDocLines) { - - // Get the line we are going to print. - String curLineString; - Element currentLine = rootElement.getElement(currentDocLineNumber); - int startOffs = currentLine.getStartOffset(); - try { - curLineString = doc.getText(startOffs, currentLine.getEndOffset() - startOffs); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - return Printable.NO_SUCH_PAGE; - } - - // Get rid of newlines, because they end up as boxes if you don't; this is a monospaced font. - curLineString = curLineString.replaceAll("\n", ""); - - // Replace tabs with how many spaces they should be. - if (tabSizeInSpaces == 0) { - curLineString = curLineString.replaceAll("\t", ""); - } - else { - int tabIndex = curLineString.indexOf('\t'); - while (tabIndex > -1) { - int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); - String replacementString = ""; - for (int i = 0; i < spacesNeeded; i++) - replacementString += ' '; - // Note that "\t" is actually a regex for this method. - curLineString = curLineString.replaceFirst("\t", replacementString); - tabIndex = curLineString.indexOf('\t'); - } - } - - // If this document line is too long to fit on one printed line on the page, - // break it up into multpile lines. - while (curLineString.length() > MAX_CHARS_PER_LINE) { - - numPrintedLines++; - if (numPrintedLines > STARTING_LINE_NUMBER) { - g.drawString(curLineString.substring(0, MAX_CHARS_PER_LINE), xOffset, y); - y += fontHeight; - if (numPrintedLines == STARTING_LINE_NUMBER + MAX_LINES_PER_PAGE) - return Printable.PAGE_EXISTS; - } - - curLineString = curLineString.substring(MAX_CHARS_PER_LINE, curLineString.length()); - - } - - currentDocLineNumber += 1; // We have printed one more line from the document. - - numPrintedLines++; - if (numPrintedLines > STARTING_LINE_NUMBER) { - g.drawString(curLineString, xOffset, y); - y += fontHeight; - if (numPrintedLines == STARTING_LINE_NUMBER + MAX_LINES_PER_PAGE) - return Printable.PAGE_EXISTS; - } - - } - - // Now, the whole document has been "printed." Decide if this page had any text on it or not. - if (numPrintedLines > STARTING_LINE_NUMBER) - return Printable.PAGE_EXISTS; - return Printable.NO_SUCH_PAGE; - - } - - /** - * Prints a Document using a monospaced font, word wrapping on the characters ' ', '\t', '\n', ',', - * '.', and ';'. This method is expected to be called from Printable 'print(Graphics g)' functions. - * - * @param g - * The graphics context to write to. - * @param doc - * The javax.swing.text.Document to print. - * @param fontSize - * the point size to use for the monospaced font. - * @param pageIndex - * The page number to print. - * @param pageFormat - * The format to print the page with. - * @param tabSize - * The number of spaces to expand tabs to. - * - * @see #printDocumentMonospaced - */ - public static int printDocumentMonospacedWordWrap(Graphics g, Document doc, - int fontSize, int pageIndex, - PageFormat pageFormat, int tabSize) { - - g.setColor(Color.BLACK); - g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); - - // Initialize our static variables (these are used by our tab expander below). - tabSizeInSpaces = tabSize; - fm = g.getFontMetrics(); - - // Create our tab expander. - // RPrintTabExpander tabExpander = new RPrintTabExpander(); - - // Get width and height of characters in this monospaced font. - int fontWidth = fm.charWidth('w'); // Any character will do here, since font is monospaced. - int fontHeight = fm.getHeight(); - - int MAX_CHARS_PER_LINE = (int) pageFormat.getImageableWidth() / fontWidth; - int MAX_LINES_PER_PAGE = (int) pageFormat.getImageableHeight() / fontHeight; - - final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; - - // The (x,y) coordinate to print at (in pixels, not characters). - // Since y is the baseline of where we'll start printing (not the top-left - // corner), we offset it by the font's ascent ( + 1 just for good measure). - xOffset = (int) pageFormat.getImageableX(); - int y = (int) pageFormat.getImageableY() + fm.getAscent() + 1; - - // A counter to keep track of the number of lines that WOULD HAVE been - // printed if we were printing all lines. - int numPrintedLines = 0; - - // Keep going while there are more lines in the document. - currentDocLineNumber = 0; // The line number of the document we're currently on. - rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. - numDocLines = rootElement.getElementCount(); // The number of lines in our document. - while (currentDocLineNumber < numDocLines) { - - // Get the line we are going to print. - String curLineString; - Element currentLine = rootElement.getElement(currentDocLineNumber); - int startOffs = currentLine.getStartOffset(); - try { - curLineString = doc.getText(startOffs, currentLine.getEndOffset() - startOffs); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - return Printable.NO_SUCH_PAGE; - } - - // Remove newlines, because they end up as boxes if you don't; this is a monospaced font. - curLineString = curLineString.replaceAll("\n", ""); - - // Replace tabs with how many spaces they should be. - if (tabSizeInSpaces == 0) { - curLineString = curLineString.replaceAll("\t", ""); - } - else { - int tabIndex = curLineString.indexOf('\t'); - while (tabIndex > -1) { - int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); - String replacementString = ""; - for (int i = 0; i < spacesNeeded; i++) - replacementString += ' '; - // Note that "\t" is actually a regex for this method. - curLineString = curLineString.replaceFirst("\t", replacementString); - tabIndex = curLineString.indexOf('\t'); - } - } - - // If this document line is too long to fit on one printed line on the page, - // break it up into multpile lines. - while (curLineString.length() > MAX_CHARS_PER_LINE) { - - int breakPoint = getLineBreakPoint(curLineString, MAX_CHARS_PER_LINE) + 1; - - numPrintedLines++; - if (numPrintedLines > STARTING_LINE_NUMBER) { - g.drawString(curLineString.substring(0, breakPoint), xOffset, y); - y += fontHeight; - if (numPrintedLines == STARTING_LINE_NUMBER + MAX_LINES_PER_PAGE) - return Printable.PAGE_EXISTS; - } - - curLineString = curLineString.substring(breakPoint, curLineString.length()); - - } - - currentDocLineNumber += 1; // We have printed one more line from the document. - - numPrintedLines++; - if (numPrintedLines > STARTING_LINE_NUMBER) { - g.drawString(curLineString, xOffset, y); - y += fontHeight; - if (numPrintedLines == STARTING_LINE_NUMBER + MAX_LINES_PER_PAGE) - return Printable.PAGE_EXISTS; - } - - } - - // Now, the whole document has been "printed." Decide if this page had any text on it or not. - if (numPrintedLines > STARTING_LINE_NUMBER) - return Printable.PAGE_EXISTS; - return Printable.NO_SUCH_PAGE; - - } - - /** - * Prints a Document using the specified font, word wrapping on the characters ' ', '\t', '\n', ',', - * '.', and ';'. This method is expected to be called from Printable 'print(Graphics g)' functions. - * - * @param g - * The graphics context to write to. - * @param textComponent - * The javax.swing.text.JTextComponent whose text you're printing. - * @param font - * The font to use for printing. If null, then textComponent's font is used. - * @param pageIndex - * The page number to print. - * @param pageFormat - * The format to print the page with. - * @param tabSize - * The number of spaces to convert tabs to. - * - */ - public static int printDocumentWordWrap(Graphics g, JTextComponent textComponent, - Font font, int pageIndex, - PageFormat pageFormat, - int tabSize) { - - // Initialize our graphics object. - g.setColor(Color.BLACK); - g.setFont(font != null ? font : textComponent.getFont()); - - // Initialize our static variables (these are used by our tab expander below). - tabSizeInSpaces = tabSize; - fm = g.getFontMetrics(); - int fontHeight = fm.getHeight(); - - final int LINE_LENGTH_IN_PIXELS = (int) pageFormat.getImageableWidth(); - final int MAX_LINES_PER_PAGE = (int) pageFormat.getImageableHeight() / fontHeight; - - final int STARTING_LINE_NUMBER = MAX_LINES_PER_PAGE * pageIndex; - - // Create our tab expander. - RPrintTabExpander tabExpander = new RPrintTabExpander(); - - // The (x,y) coordinate to print at (in pixels, not characters). - // Since y is the baseline of where we'll start printing (not the top-left - // corner), we offset it by the font's ascent ( + 1 just for good measure). - xOffset = (int) pageFormat.getImageableX(); - int y = (int) pageFormat.getImageableY() + fm.getAscent() + 1; - - // A counter to keep track of the number of lines that WOULD HAVE been - // printed if we were printing all lines. - int numPrintedLines = 0; - - // Keep going while there are more lines in the document. - Document doc = textComponent.getDocument(); - rootElement = doc.getDefaultRootElement(); - numDocLines = rootElement.getElementCount(); // The number of lines in our document. - currentDocLineNumber = 0; // The line number of the document we're currently on. - int startingOffset = 0; // Used when a line is so long it has to be wrapped. - while (currentDocLineNumber < numDocLines) { - - Segment currentLineSeg = new Segment(); - - // Get the current line (as an Element), and its starting and ending offset in doc. - Element currentLine = rootElement.getElement(currentDocLineNumber); - int currentLineStart = currentLine.getStartOffset(); - int currentLineEnd = currentLine.getEndOffset(); - - // Put the chars of this line in currentLineSeg, but only starting at our desired offset - // (because this line may be the second part of a wrapped line, so we'd start after the part - // that has already been printed). - try { - doc.getText(currentLineStart + startingOffset, currentLineEnd - (currentLineStart + startingOffset), - currentLineSeg); - } catch (BadLocationException ble) { - System.err.println("BadLocationException in print (where there shouldn't be one!): " + ble); - return Printable.NO_SUCH_PAGE; - } - - // Remove any spaces and/or tabs from the end of the segment (would cause problems if you left 'em). - currentLineSeg = removeEndingWhitespace(currentLineSeg); - - // Figger out how long the line is, in pixels. - int currentLineLengthInPixels = Utilities.getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); - - // System.err.println("'" + currentLineSeg + "' - " + currentLineLengthInPixels + "/" + - // LINE_LENGTH_IN_PIXELS); - // If it'll fit by itself on a printed line, great. - if (currentLineLengthInPixels <= LINE_LENGTH_IN_PIXELS) { - currentDocLineNumber += 1; // We (will) have printed one more line from the document. - startingOffset = 0; // Start at the first character in the new document line. - } - - // If it won't fit on a printed line by itself (i.e., it needs to be wrapped)... - else { - - // Loop while the current line is too long to fit on a printed line. - int currentPos = -1; - while (currentLineLengthInPixels > LINE_LENGTH_IN_PIXELS) { - - // System.err.println("'" + currentLineSeg + "' - " + currentLineLengthInPixels + "/" + - // LINE_LENGTH_IN_PIXELS); - - // Remove any spaces and/or tabs from the end of the segment (would cause problems if you left 'em). - currentLineSeg = removeEndingWhitespace(currentLineSeg); - - // currentPos will be the last position in the current text of a "line break character." - currentPos = -1; - String currentLineString = currentLineSeg.toString(); - for (char breakChar : breakChars) { - // "+1" below so we include the character on the line. - int pos = currentLineString.lastIndexOf(breakChar) + 1; - // if (pos>-1 && pos>currentPos) - // currentPos = pos; - if (pos > 0 && pos > currentPos & pos != currentLineString.length()) - currentPos = pos; - } - - // If we didn't find a line break character, we'll simply break the line at - // the last character that fits on a printed line. - // So here, we set currentPos to be the position of the last character that fits - // on the current printed line. - if (currentPos == -1) { - - // Fix currentLineSeg so that it contains exactly enough text to fit in - // LINE_LENGTH_IN_PIXELS pixels... - currentPos = 0; - do { - currentPos++; - try { - doc.getText(currentLineStart + startingOffset, currentPos, currentLineSeg); - } catch (BadLocationException ble) { - System.err.println(ble); - return Printable.NO_SUCH_PAGE; - } - currentLineLengthInPixels = Utilities. - getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); - } while (currentLineLengthInPixels <= LINE_LENGTH_IN_PIXELS); - currentPos--; - - } - - try { - doc.getText((currentLineStart + startingOffset), currentPos, currentLineSeg); - } catch (BadLocationException ble) { - System.err.println("BadLocationException in print (a):"); - System.err.println("==> currentLineStart: " + currentLineStart + - "; startingOffset: " + startingOffset + "; currentPos: " + currentPos); - System.err.println("==> Range: " + (currentLineStart + startingOffset) + " - " + - (currentLineStart + startingOffset + currentPos)); - ble.printStackTrace(); - return Printable.NO_SUCH_PAGE; - } - - currentLineLengthInPixels = Utilities.getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); - } // End of while (currentLineLengthInPixels > LINE_LENGTH_IN_PIXELS). - - startingOffset += currentPos; // Where to start (offset from line's start), since this line wraps. - - } // End of else. - - numPrintedLines++; - if (numPrintedLines > STARTING_LINE_NUMBER) { - // g.drawString(currentLineSeg.toString(), xOffset,y); - Utilities.drawTabbedText(currentLineSeg, xOffset, y, g, tabExpander, 0); - y += fontHeight; - if (numPrintedLines == STARTING_LINE_NUMBER + MAX_LINES_PER_PAGE) - return Printable.PAGE_EXISTS; - } - - } - - // Now, the whole document has been "printed." Decide if this page had any text on it or not. - if (numPrintedLines > STARTING_LINE_NUMBER) - return Printable.PAGE_EXISTS; - return Printable.NO_SUCH_PAGE; - - } - - /** - * Removes any spaces or tabs from the end of the segment. - * - * @param segment - * The segment from which to remove tailing whitespace. - * @return segment with trailing whitespace removed. - */ - private static Segment removeEndingWhitespace(Segment segment) { - int toTrim = 0; - char currentChar = segment.setIndex(segment.getEndIndex() - 1); - while ((currentChar == ' ' || currentChar == '\t') && currentChar != Segment.DONE) { - toTrim++; - currentChar = segment.previous(); - } - String stringVal = segment.toString(); - String newStringVal = stringVal.substring(0, stringVal.length() - toTrim); - return new Segment(newStringVal.toCharArray(), 0, newStringVal.length()); - } - - /** - * A tab expander for the document currently being printed with the font being used for the printing. - */ - private static class RPrintTabExpander implements TabExpander { - - RPrintTabExpander() { - } - - public float nextTabStop(float x, int tabOffset) { - if (tabSizeInSpaces == 0) - return x; - int tabSizeInPixels = tabSizeInSpaces * fm.charWidth(' '); - int ntabs = (((int) x) - xOffset) / tabSizeInPixels; - return xOffset + ((ntabs + 1) * tabSizeInPixels); - } - - } - -} \ No newline at end of file + private static int currentDocLineNumber; // The line number in the document we are currently on. + private static int numDocLines; // The number of lines in the current document. + private static Element rootElement; // The first Element (line) in the current document. + + // The characters at which to break a line if implementing word wrap. + private static final char [] BREAK_CHARS = { ' ', '\t', ',', '.', ';', '?', '!' }; + + // These variables are 'global' because RPrintTabExpander uses them. + + /** + * The x-offset (for the page margin) when printing. + */ + private static int xOffset; + + /** + * The length of a tab, in spaces. + */ + private static int tabSizeInSpaces; + + /** + * The metrics of the font currently being used to print. + */ + private static FontMetrics fm; + + + /** + * Returns the position closest to, but before, position maxCharsPerLine in + * line of one of the chars in breakChars, or simply returns + * maxCharsPerLine-1 if none of the breakChars comes before + * that position. This position represents the logical line break for this java.lang.String + * if it is being printed in a monospaced font when lines can only be maxCharsPerLine + * characters long. + * + * @param line The text being printed. + * @param maxCharsPerLine Only up-to this many characters from + * line can be printed on one line. + * @return The logical position at which to stop printing line + * to simulate word wrap. + */ + private static int getLineBreakPoint(String line, final int maxCharsPerLine) { + + int breakPoint = -1; + for (char breakChar : BREAK_CHARS) { + int breakCharPos = line.lastIndexOf(breakChar, maxCharsPerLine - 1); + if (breakCharPos > breakPoint) { + breakPoint = breakCharPos; + } + } + + return (breakPoint==-1 ? maxCharsPerLine-1 : breakPoint); + + } + + + /** + * Prints a Document using a monospaced font, and does no word wrapping (ie, + * words will wrap mid-word to the next line). This method is expected to be called from + * Printable 'print(Graphics g)' functions. + * + * @param g The graphics context to write to. + * @param doc The javax.swing.text.Document to print. + * @param fontSize the point size to use for the monospaced font. + * @param pageIndex The page number to print. + * @param pageFormat The format to print the page with. + * @param tabSize The number of spaces to expand tabs to. + * + * @see #printDocumentMonospacedWordWrap + */ + public static int printDocumentMonospaced(Graphics g, Document doc, int fontSize, int pageIndex, + PageFormat pageFormat, int tabSize) { + + g.setColor(Color.BLACK); + g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); + + // Initialize our static variables (these are used by our tab expander below). + tabSizeInSpaces = tabSize; + fm = g.getFontMetrics(); + + // Create our tab expander. + //RPrintTabExpander tabExpander = new RPrintTabExpander(); + + // Get width and height of characters in this monospaced font. + int fontWidth = fm.charWidth('w'); // Any character will do as font is monospaced. + int fontHeight = fm.getHeight(); + + int maxCharsPerLine = (int)pageFormat.getImageableWidth() / fontWidth; + int maxLinesPerPage = (int)pageFormat.getImageableHeight() / fontHeight; + + final int startingLineNumber = maxLinesPerPage * pageIndex; + + // The (x,y) coordinate to print at (in pixels, not characters). + // Since y is the baseline of where we'll start printing (not the top-left + // corner), we offset it by the font's ascent ( + 1 just for good measure). + xOffset = (int)pageFormat.getImageableX(); + int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; + + // A counter to keep track of the number of lines that WOULD HAVE been + // printed if we were printing all lines. + int numPrintedLines = 0; + + // Keep going while there are more lines in the document. + currentDocLineNumber = 0; // The line number of the document we're currently on. + rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. + numDocLines = rootElement.getElementCount(); // The number of lines in our document. + while (currentDocLineNumber -1) { + int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); + StringBuilder stringBuilder = new StringBuilder(); + for (int i=0; i maxCharsPerLine) { + + numPrintedLines++; + if (numPrintedLines > startingLineNumber) { + g.drawString(curLineString.substring(0,maxCharsPerLine), xOffset,y); + y += fontHeight; + if (numPrintedLines==startingLineNumber+maxLinesPerPage) { + return Printable.PAGE_EXISTS; + } + } + + curLineString = curLineString.substring(maxCharsPerLine, curLineString.length()); + + } + + currentDocLineNumber += 1; // We have printed one more line from the document. + + numPrintedLines++; + if (numPrintedLines>startingLineNumber) { + g.drawString(curLineString, xOffset,y); + y += fontHeight; + if (numPrintedLines==startingLineNumber+maxLinesPerPage) { + return Printable.PAGE_EXISTS; + } + } + + + } + + // Now, the whole document has been "printed." Decide if this page had any text on it or not. + if (numPrintedLines > startingLineNumber) { + return Printable.PAGE_EXISTS; + } + return Printable.NO_SUCH_PAGE; + + } + + + /** + * Prints a Document using a monospaced font, word wrapping on + * the characters ' ', '\t', '\n', ',', '.', and ';'. This method is + * expected to be called from Printable 'print(Graphics g)' functions. + * + * @param g The graphics context to write to. + * @param doc The javax.swing.text.Document to print. + * @param fontSize the point size to use for the monospaced font. + * @param pageIndex The page number to print. + * @param pageFormat The format to print the page with. + * @param tabSize The number of spaces to expand tabs to. + * + * @see #printDocumentMonospaced + */ + public static int printDocumentMonospacedWordWrap(Graphics g, Document doc, + int fontSize, int pageIndex, + PageFormat pageFormat, int tabSize) { + + g.setColor(Color.BLACK); + g.setFont(new Font("Monospaced", Font.PLAIN, fontSize)); + + // Initialize our static variables (these are used by our tab expander below). + tabSizeInSpaces = tabSize; + fm = g.getFontMetrics(); + + // Create our tab expander. + //RPrintTabExpander tabExpander = new RPrintTabExpander(); + + // Get width and height of characters in this monospaced font. + int fontWidth = fm.charWidth('w'); // Any character will do here, since font is monospaced. + int fontHeight = fm.getHeight(); + + int maxCharsPerLine = (int)pageFormat.getImageableWidth() / fontWidth; + int maxLinesPerPage = (int)pageFormat.getImageableHeight() / fontHeight; + + final int startingLineNumber = maxLinesPerPage * pageIndex; + + // The (x,y) coordinate to print at (in pixels, not characters). + // Since y is the baseline of where we'll start printing (not the top-left + // corner), we offset it by the font's ascent ( + 1 just for good measure). + xOffset = (int)pageFormat.getImageableX(); + int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; + + // A counter to keep track of the number of lines that WOULD HAVE been + // printed if we were printing all lines. + int numPrintedLines = 0; + + // Keep going while there are more lines in the document. + currentDocLineNumber = 0; // The line number of the document we're currently on. + rootElement = doc.getDefaultRootElement(); // To shorten accesses in our loop. + numDocLines = rootElement.getElementCount(); // The number of lines in our document. + while (currentDocLineNumber -1) { + int spacesNeeded = tabSizeInSpaces - (tabIndex % tabSizeInSpaces); + StringBuilder stringBuilder = new StringBuilder(); + for (int i=0; i maxCharsPerLine) { + + int breakPoint = getLineBreakPoint(curLineString, maxCharsPerLine) + 1; + + numPrintedLines++; + if (numPrintedLines > startingLineNumber) { + g.drawString(curLineString.substring(0,breakPoint), xOffset,y); + y += fontHeight; + if (numPrintedLines==startingLineNumber+maxLinesPerPage) { + return Printable.PAGE_EXISTS; + } + } + + curLineString = curLineString.substring(breakPoint, curLineString.length()); + + } + + currentDocLineNumber += 1; // We have printed one more line from the document. + + numPrintedLines++; + if (numPrintedLines>startingLineNumber) { + g.drawString(curLineString, xOffset,y); + y += fontHeight; + if (numPrintedLines==startingLineNumber+maxLinesPerPage) { + return Printable.PAGE_EXISTS; + } + } + + + } + + // Now, the whole document has been "printed." Decide if this page had any text on it or not. + if (numPrintedLines > startingLineNumber) { + return Printable.PAGE_EXISTS; + } + return Printable.NO_SUCH_PAGE; + + } + + + /** + * Prints a Document using the specified font, word wrapping + * on the characters ' ', '\t', '\n', ',', '.', and ';'. This method is + * expected to be called from Printable 'print(Graphics g)' functions. + * + * @param g The graphics context to write to. + * @param textComponent The javax.swing.text.JTextComponent + * whose text you're printing. + * @param font The font to use for printing. If null, then + * textComponent's font is used. + * @param pageIndex The page number to print. + * @param pageFormat The format to print the page with. + * @param tabSize The number of spaces to convert tabs to. + * + */ + public static int printDocumentWordWrap(Graphics g, JTextComponent textComponent, + Font font, int pageIndex, + PageFormat pageFormat, + int tabSize) { + + // Initialize our graphics object. + g.setColor(Color.BLACK); + g.setFont(font!=null ? font : textComponent.getFont()); + + // Initialize our static variables (these are used by our tab expander below). + tabSizeInSpaces = tabSize; + fm = g.getFontMetrics(); + int fontHeight = fm.getHeight(); + + final int lineLengthInPixels = (int)pageFormat.getImageableWidth(); + final int maxLinesPerPage = (int)pageFormat.getImageableHeight() / fontHeight; + + final int startingLineNumber = maxLinesPerPage * pageIndex; + + // Create our tab expander. + RPrintTabExpander tabExpander = new RPrintTabExpander(); + + // The (x,y) coordinate to print at (in pixels, not characters). + // Since y is the baseline of where we'll start printing (not the top-left + // corner), we offset it by the font's ascent ( + 1 just for good measure). + xOffset = (int)pageFormat.getImageableX(); + int y = (int)pageFormat.getImageableY() + fm.getAscent() + 1; + + // A counter to keep track of the number of lines that WOULD HAVE been + // printed if we were printing all lines. + int numPrintedLines = 0; + + // Keep going while there are more lines in the document. + Document doc = textComponent.getDocument(); + rootElement = doc.getDefaultRootElement(); + numDocLines = rootElement.getElementCount(); // The number of lines in our document. + currentDocLineNumber = 0; // The line number of the document we're currently on. + int startingOffset = 0; // Used when a line is so long it has to be wrapped. + while (currentDocLineNumber lineLengthInPixels) { + +//System.err.println("'" + currentLineSeg + "' - " + currentLineLengthInPixels + "/" + LINE_LENGTH_IN_PIXELS); + + // Remove any spaces and/or tabs from the end of the segment (would cause problems if you left 'em). + currentLineSeg = removeEndingWhitespace(currentLineSeg); + + // currentPos will be the last position in the current text of a "line break character." + currentPos = -1; + String currentLineString = currentLineSeg.toString(); + for (char breakChar : BREAK_CHARS) { + // "+1" below so we include the character on the line. + int pos = currentLineString.lastIndexOf(breakChar) + 1; + //if (pos>-1 && pos>currentPos) + // currentPos = pos; + if (pos > 0 && pos > currentPos && pos != currentLineString.length()) { + currentPos = pos; + } + } + + // If we didn't find a line break character, we'll simply break the line at + // the last character that fits on a printed line. + // So here, we set currentPos to be the position of the last character that fits + // on the current printed line. + if (currentPos == -1) { + + // Fix currentLineSeg so that it contains exactly enough text to fit in + // LINE_LENGTH_IN_PIXELS pixels... + currentPos = 0; + do { + currentPos++; + try { + doc.getText(currentLineStart+startingOffset, currentPos, currentLineSeg); + } catch (BadLocationException ble) { + System.err.println(ble); + return Printable.NO_SUCH_PAGE; + } + currentLineLengthInPixels = Utilities. + getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); + } while (currentLineLengthInPixels <= lineLengthInPixels); + currentPos--; + + } + + try { + doc.getText((currentLineStart+startingOffset), currentPos, currentLineSeg); + } catch (BadLocationException ble) { + System.err.println("BadLocationException in print (a):"); + System.err.println("==> currentLineStart: " + currentLineStart + + "; startingOffset: " + startingOffset + "; currentPos: " + currentPos); + System.err.println("==> Range: " + (currentLineStart+startingOffset) + " - " + + (currentLineStart+startingOffset+currentPos)); + ble.printStackTrace(); + return Printable.NO_SUCH_PAGE; + } + + currentLineLengthInPixels = Utilities.getTabbedTextWidth(currentLineSeg, fm, 0, tabExpander, 0); + } // End of while (currentLineLengthInPixels > LINE_LENGTH_IN_PIXELS). + + startingOffset += currentPos; // Where to start (offset from line's start), since this line wraps. + + } // End of else. + + numPrintedLines++; + if (numPrintedLines>startingLineNumber) { + //g.drawString(currentLineSeg.toString(), xOffset,y); + Utilities.drawTabbedText(currentLineSeg, xOffset,y, g, tabExpander, 0); + y += fontHeight; + if (numPrintedLines==startingLineNumber+maxLinesPerPage) { + return Printable.PAGE_EXISTS; + } + } + + } + + // Now, the whole document has been "printed." Decide if this page had any text on it or not. + if (numPrintedLines > startingLineNumber) { + return Printable.PAGE_EXISTS; + } + return Printable.NO_SUCH_PAGE; + + } + + + /** + * Removes any spaces or tabs from the end of the segment. + * + * @param segment The segment from which to remove tailing whitespace. + * @return segment with trailing whitespace removed. + */ + private static Segment removeEndingWhitespace(Segment segment) { + int toTrim = 0; + char currentChar = segment.setIndex(segment.getEndIndex()-1); + while ((currentChar==' ' || currentChar=='\t') && currentChar!=Segment.DONE) { + toTrim++; + currentChar = segment.previous(); + } + String stringVal = segment.toString(); + String newStringVal = stringVal.substring(0,stringVal.length()-toTrim); + return new Segment(newStringVal.toCharArray(), 0, newStringVal.length()); + } + + + /** + * A tab expander for the document currently being printed with the + * font being used for the printing. + */ + private static class RPrintTabExpander implements TabExpander { + + RPrintTabExpander() { + } + + @Override + public float nextTabStop(float x, int tabOffset) { + if (tabSizeInSpaces == 0) { + return x; + } + int tabSizeInPixels = tabSizeInSpaces * fm.charWidth(' '); + int ntabs = (((int) x) - xOffset) / tabSizeInPixels; + return xOffset + ((ntabs + 1f) * tabSizeInPixels); + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java old mode 100644 new mode 100755 index 85bfdb747..cedfb7d20 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractJFlexCTokenMaker.java @@ -3,23 +3,9 @@ * * AbstractJFlexCTokenMaker.java - Base class for token makers that use curly * braces to denote code blocks, such as C, C++, Java, Perl, etc. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -32,181 +18,271 @@ import org.fife.ui.rtextarea.RTextArea; + /** - * Base class for JFlex-based token makers using C-style syntax. This class knows how to auto-indent after opening - * braces and parens. - * + * Base class for JFlex-based token makers using C-style syntax. This class + * knows how to: + * + *

    + *
  • Auto-indent after opening braces and parens + *
  • Automatically close multi-line and documentation comments + *
+ * * @author Robert Futrell * @version 1.0 */ public abstract class AbstractJFlexCTokenMaker extends AbstractJFlexTokenMaker { - protected static final Action INSERT_BREAK_ACTION = new InsertBreakAction(); - - /** - * Returns true always as C-style languages use curly braces to denote code blocks. - * - * @return true always. - */ - public boolean getCurlyBracesDenoteCodeBlocks() { - return true; - } - - /** - * Returns an action to handle "insert break" key presses (i.e. Enter). An action is returned that handles newlines - * differently in multi-line comments. - * - * @return The action. - */ - public Action getInsertBreakAction() { - return INSERT_BREAK_ACTION; - } - - /** - * {@inheritDoc} - */ - public boolean getShouldIndentNextLineAfter(Token t) { - if (t != null && t.textCount == 1) { - char ch = t.text[t.textOffset]; - return ch == '{' || ch == '('; - } - return false; - } - - /** - * Action that knows how to special-case inserting a newline in a multi-line comment for languages like C and Java. - */ - private static class InsertBreakAction extends - RSyntaxTextAreaEditorKit.InsertBreakAction { - - private static final Pattern p = - Pattern.compile("([ \\t]*)(/?[\\*]+)([ \\t]*)"); - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - RSyntaxTextArea rsta = (RSyntaxTextArea) getTextComponent(e); - RSyntaxDocument doc = (RSyntaxDocument) rsta.getDocument(); - - int line = textArea.getCaretLineNumber(); - int type = doc.getLastTokenTypeOnLine(line); - - // Only in MLC's should we try this - if (type == Token.COMMENT_DOCUMENTATION || - type == Token.COMMENT_MULTILINE) { - insertBreakInMLC(e, rsta, line); - } - else { - handleInsertBreak(rsta, true); - } - - } - - /** - * Returns whether the MLC token containing offs appears to have a "nested" comment (i.e., contains - * "/*" somewhere inside of it). This implies that it is likely a "new" MLC and needs to be closed. - * While not foolproof, this is usually good enough of a sign. - * - * @param textArea - * @param line - * @param offs - * @return Whether a comment appears to be nested inside this one. - */ - private boolean appearsNested(RSyntaxTextArea textArea, - int line, int offs) { - - final int firstLine = line; // Remember the line we start at. - - while (line < textArea.getLineCount()) { - Token t = textArea.getTokenListForLine(line); - int i = 0; - // If examining the first line, start at offs. - if (line++ == firstLine) { - t = RSyntaxUtilities.getTokenAtOffset(t, offs); - if (t == null) { // offs was at end of the line - continue; - } - i = t.documentToToken(offs); - } - else { - i = t.textOffset; - } - while (i < t.textOffset + t.textCount - 1) { - if (t.text[i] == '/' && t.text[i + 1] == '*') { - return true; - } - i++; - } - // If tokens come after this one on this line, our MLC ended. - if (t.getNextToken() != null) { - return false; - } - } - - return true; // No match - MLC goes to the end of the file - - } - - private void insertBreakInMLC(ActionEvent e, RSyntaxTextArea textArea, - int line) { - - Matcher m = null; - int start = -1; - int end = -1; - try { - start = textArea.getLineStartOffset(line); - end = textArea.getLineEndOffset(line); - String text = textArea.getText(start, end - start); - m = p.matcher(text); - } catch (BadLocationException ble) { // Never happens - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - ble.printStackTrace(); - return; - } - - if (m.lookingAt()) { - - String leadingWS = m.group(1); - String mlcMarker = m.group(2); - - // If the caret is "inside" any leading whitespace or MLC - // marker, move it to the end of the line. - int dot = textArea.getCaretPosition(); - if (dot >= start && - dot < start + leadingWS.length() + mlcMarker.length()) { - // If we're in the whitespace before the very start of the - // MLC though, just insert a normal newline - if (mlcMarker.charAt(0) == '/') { - handleInsertBreak(textArea, true); - return; - } - textArea.setCaretPosition(end - 1); - } - - boolean firstMlcLine = mlcMarker.charAt(0) == '/'; - boolean nested = appearsNested(textArea, line, - start + leadingWS.length() + 2); - String header = leadingWS + - (firstMlcLine ? " * " : "*") + - m.group(3); - textArea.replaceSelection("\n" + header); - if (nested) { - dot = textArea.getCaretPosition(); // Has changed - textArea.insert("\n" + leadingWS + " */", dot); - textArea.setCaretPosition(dot); - } - - } - else { - handleInsertBreak(textArea, true); - } - - } - - } - -} \ No newline at end of file + private final Action INSERT_BREAK_ACTION; + + private static final Pattern MLC_PATTERN = + Pattern.compile("([ \\t]*)(/?[\\*]+)([ \\t]*)"); + + + protected AbstractJFlexCTokenMaker() { + INSERT_BREAK_ACTION = createInsertBreakAction(); + } + + + /** + * Creates and returns the action to use when the user inserts a newline. + * The default implementation intelligently closes multi-line comments. + * Subclasses can override. + * + * @return The action. + * @see #getInsertBreakAction() + */ + protected Action createInsertBreakAction() { + return new CStyleInsertBreakAction(); + } + + + /** + * Returns true always as C-style languages use curly braces + * to denote code blocks. + * + * @return true always. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return true; + } + + + /** + * Returns an action to handle "insert break" key presses (i.e. Enter). + * An action is returned that handles newlines differently in multi-line + * comments. + * + * @return The action. + */ + @Override + public Action getInsertBreakAction() { + return INSERT_BREAK_ACTION; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.FUNCTION; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getShouldIndentNextLineAfter(Token t) { + if (t!=null && t.length()==1) { + char ch = t.charAt(0); + return ch=='{' || ch=='('; + } + return false; + } + + + /** + * Returns whether a given token is an internal token type that represents + * an MLC or documentation comment continuing on to the next line. This is + * done by languages such as JavaScript that are a little more verbose + * than necessary so that their code can be copy-and-pasted into other + * TokenMakers that use them as nested languages (such as + * HTML, JSP, etc.). + * + * @param t The token to check. This cannot be null. + * @return Whether the token is an internal token representing the end of + * a line for an MLC/doc comment continuing on to the next line. + */ + private boolean isInternalEolTokenForMLCs(Token t) { + int type = t.getType(); + if (type<0) { + type = getClosestStandardTokenTypeForInternalType(type); + return type==TokenTypes.COMMENT_MULTILINE || + type==TokenTypes.COMMENT_DOCUMENTATION; + } + return false; + } + + + /** + * Action that knows how to special-case inserting a newline in a + * multi-line comment for languages like C and Java. + */ + protected class CStyleInsertBreakAction extends + RSyntaxTextAreaEditorKit.InsertBreakAction { + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxTextArea rsta = (RSyntaxTextArea)getTextComponent(e); + RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); + + int line = textArea.getCaretLineNumber(); + int type = doc.getLastTokenTypeOnLine(line); + if (type<0) { + type = doc.getClosestStandardTokenTypeForInternalType(type); + } + + // Only in MLC's should we try this + if (type==Token.COMMENT_DOCUMENTATION || + type==Token.COMMENT_MULTILINE) { + insertBreakInMLC(e, rsta, line); + } + else { + handleInsertBreak(rsta, true); + } + + } + + + /** + * Returns whether the MLC token containing offs appears + * to have a "nested" comment (i.e., contains "/*" + * somewhere inside of it). This implies that it is likely a "new" MLC + * and needs to be closed. While not foolproof, this is usually good + * enough of a sign. + * + * @param textArea + * @param line + * @param offs + * @return Whether a comment appears to be nested inside this one. + */ + private boolean appearsNested(RSyntaxTextArea textArea, + int line, int offs) { + + final int firstLine = line; // Remember the line we start at. + + while (line=start && + dotalmost could be factored out into this class, but cannot because they reference JFlex variables - * that we cannot access from this class. - * + * Base class for JFlex-generated token makers. This class attempts to factor + * out all common code from these classes. Many methods almost could + * be factored out into this class, but cannot because they reference JFlex + * variables that we cannot access from this class. + * * @author Robert Futrell * @version 0.1 */ public abstract class AbstractJFlexTokenMaker extends TokenMakerBase { - protected Segment s; + protected Segment s; + + protected int start; // Just for states. + protected int offsetShift; // As parser always starts at 0, but our line doesn't. + + + /** + * Declared here so we can define overloads that refer to this method. + * + * @param newState The new JFlex state to enter. + */ + public abstract void yybegin(int newState); + + + /** + * Starts a new JFlex state and changes the current language index. + * + * @param state The new JFlex state to enter. + * @param languageIndex The new language index. + */ + protected void yybegin(int state, int languageIndex) { + yybegin(state); + setLanguageIndex(languageIndex); + } - protected int start; // Just for states. - protected int offsetShift; // As parser always starts at 0, but our line doesn't. -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java old mode 100644 new mode 100755 index 58906ed4b..4b7ae45d8 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMaker.java @@ -2,70 +2,66 @@ * 11/07/2004 * * AbstractTokenMaker.java - An abstract implementation of TokenMaker. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; + /** - * An abstract implementation of the {@link org.fife.ui.rsyntaxtextarea.TokenMaker} interface. It should be overridden - * for every language for which you want to provide syntax highlighting. - *

- * + * An abstract implementation of the + * {@link org.fife.ui.rsyntaxtextarea.TokenMaker} interface. It should + * be overridden for every language for which you want to provide + * syntax highlighting.

+ * * @see Token - * + * * @author Robert Futrell * @version 0.2 */ public abstract class AbstractTokenMaker extends TokenMakerBase { - /** - * Hash table of words to highlight and what token type they are. The keys are the words to highlight, and their - * values are the token types, for example, Token.RESERVED_WORD or Token.FUNCTION. - */ - protected TokenMap wordsToHighlight; + /** + * Hash table of words to highlight and what token type they are. + * The keys are the words to highlight, and their values are the + * token types, for example, Token.RESERVED_WORD or + * Token.FUNCTION. + */ + protected TokenMap wordsToHighlight; + + + /** + * Constructor. + */ + public AbstractTokenMaker() { + wordsToHighlight = getWordsToHighlight(); + } + + + /** + * Returns the words to highlight for this programming language. + * + * @return A TokenMap containing the words to highlight for + * this programming language. + */ + public abstract TokenMap getWordsToHighlight(); - /** - * Constructor. - */ - public AbstractTokenMaker() { - wordsToHighlight = getWordsToHighlight(); - } - /** - * Returns the words to highlight for this programming language. - * - * @return A TokenMap containing the words to highlight for this programming language. - */ - public abstract TokenMap getWordsToHighlight(); + /** + * Removes the token last added from the linked list of tokens. The + * programmer should never have to call this directly; it can be called + * by subclasses of TokenMaker if necessary. + */ + public void removeLastToken() { + if (previousToken==null) { + firstToken = currentToken = null; + } + else { + currentToken = previousToken; + currentToken.setNextToken(null); + } + } - /** - * Removes the token last added from the linked list of tokens. The programmer should never have to call this - * directly; it can be called by subclasses of TokenMaker if necessary. - */ - public void removeLastToken() { - if (previousToken == null) { - firstToken = currentToken = null; - } - else { - currentToken = previousToken; - currentToken.setNextToken(null); - } - } -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java old mode 100644 new mode 100755 index 7825614a6..7df3841e9 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/AbstractTokenMakerFactory.java @@ -2,100 +2,133 @@ * 12/14/08 * * AbstractTokenMakerFactory.java - Base class for TokenMaker implementations. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; +import java.util.HashMap; import java.util.Map; import java.util.Set; + /** - * Base class for {@link TokenMakerFactory} implementations. A java.util.Map maps keys to the names of - * {@link TokenMaker} classes. - * + * Base class for {@link TokenMakerFactory} implementations. A mapping from + * language keys to the names of {@link TokenMaker} classes is stored. + * * @author Robert Futrell * @version 1.0 */ public abstract class AbstractTokenMakerFactory extends TokenMakerFactory { - /** - * A mapping from keys to the names of {@link TokenMaker} implementation class names. When - * {@link #getTokenMaker(String)} is called with a key defined in this map, a TokenMaker of the - * corresponding type is returned. - */ - private Map tokenMakerMap; - - /** - * Constructor. - */ - protected AbstractTokenMakerFactory() { - tokenMakerMap = createTokenMakerKeyToClassNameMap(); - } - - /** - * Creates and returns a mapping from keys to the names of {@link TokenMaker} implementation classes. When - * {@link #getTokenMaker(String)} is called with a key defined in this map, a TokenMaker of the - * corresponding type is returned. - * - * @return The map. - */ - protected abstract Map createTokenMakerKeyToClassNameMap(); - - /** - * Returns a {@link TokenMaker} for the specified key. - * - * @param key - * The key. - * @return The corresponding TokenMaker, or null if none matches the specified key. - */ - protected TokenMaker getTokenMakerImpl(String key) { - String clazz = (String) tokenMakerMap.get(key); - if (clazz != null) { - try { - return (TokenMaker) Class.forName(clazz).newInstance(); - } catch (RuntimeException re) { // FindBugs - throw re; - } catch (Exception e) { - e.printStackTrace(); - } - } - return null; - } - - /** - * {@inheritDoc} - */ - public Set keySet() { - return tokenMakerMap.keySet(); - } - - /** - * Adds a mapping from a key to a TokenMaker implementation class name. - * - * @param key - * The key. - * @param className - * The TokenMaker class name. - * @return The previous value for the specified key, or null if there was none. - */ - public String putMapping(String key, String className) { - return (String) tokenMakerMap.put(key, className); - } - -} \ No newline at end of file + /** + * A mapping from keys to the names of {@link TokenMaker} implementation + * class names. When {@link #getTokenMaker(String)} is called with a key + * defined in this map, a TokenMaker of the corresponding type + * is returned. + */ + private Map tokenMakerMap; + + + /** + * Constructor. + */ + protected AbstractTokenMakerFactory() { + tokenMakerMap = new HashMap<>(); + initTokenMakerMap(); + } + + + /** + * Returns a {@link TokenMaker} for the specified key. + * + * @param key The key. + * @return The corresponding TokenMaker, or null + * if none matches the specified key. + */ + @Override + protected TokenMaker getTokenMakerImpl(String key) { + TokenMakerCreator tmc = (TokenMakerCreator)tokenMakerMap.get(key); + if (tmc!=null) { + try { + return tmc.create(); + } catch (RuntimeException re) { // FindBugs + throw re; + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + + /** + * Populates the mapping from keys to instances of + * TokenMakerCreators. Subclasses should override this method + * and call one of the putMapping overloads to register + * {@link TokenMaker}s for syntax constants. + * + * @see #putMapping(String, String) + * @see #putMapping(String, String, ClassLoader) + */ + protected abstract void initTokenMakerMap(); + + + /** + * {@inheritDoc} + */ + @Override + public Set keySet() { + return tokenMakerMap.keySet(); + } + + + /** + * Adds a mapping from a key to a TokenMaker implementation + * class name. + * + * @param key The key. + * @param className The TokenMaker class name. + * @see #putMapping(String, String, ClassLoader) + */ + public void putMapping(String key, String className) { + putMapping(key, className, null); + } + + + /** + * Adds a mapping from a key to a TokenMaker implementation + * class name. + * + * @param key The key. + * @param className The TokenMaker class name. + * @param cl The class loader to use when loading the class. + * @see #putMapping(String, String) + */ + public void putMapping(String key, String className, ClassLoader cl) { + tokenMakerMap.put(key, new TokenMakerCreator(className, cl)); + } + + + /** + * Wrapper that handles the creation of TokenMaker instances. + */ + private static class TokenMakerCreator { + + private String className; + private ClassLoader cl; + + public TokenMakerCreator(String className, ClassLoader cl) { + this.className = className; + this.cl = cl!=null ? cl : getClass().getClassLoader(); + } + + public TokenMaker create() throws Exception { + return (TokenMaker)Class.forName(className, true, cl).newInstance(); + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java old mode 100644 new mode 100755 index 698429b3e..c6b221798 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeEvent.java @@ -3,73 +3,66 @@ * * ActiveLineRangeEvent.java - Notifies listeners of an "active line range" * change in an RSyntaxTextArea. - * Copyright (C) 2011 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.EventObject; + /** - * The event fired by {@link RSyntaxTextArea}s when the active line range changes. - * + * The event fired by {@link RSyntaxTextArea}s when the active line range + * changes. + * * @author Robert Futrell * @version 1.0 */ public class ActiveLineRangeEvent extends EventObject { - private int min; - private int max; + private int min; + private int max; + + + /** + * Constructor. + * + * @param source The text area. + * @param min The first line in the active line range, or + * -1 if the line range is being cleared. + * @param max The last line in the active line range, or + * -1 if the line range is being cleared. + */ + public ActiveLineRangeEvent(RSyntaxTextArea source, int min, int max) { + super(source); + this.min = min; + this.max = max; + } + + + /** + * Returns the last line in the active line range. + * + * @return The last line, or -1 if the range is being + * cleared. + * @see #getMin() + */ + public int getMax() { + return max; + } - /** - * Constructor. - * - * @param source - * The text area. - * @param min - * The first line in the active line range, or -1 if the line range is being cleared. - * @param max - * The last line in the active line range, or -1 if the line range is being cleared. - */ - public ActiveLineRangeEvent(RSyntaxTextArea source, int min, int max) { - super(source); - this.min = min; - this.max = max; - } - /** - * Returns the last line in the active line range. - * - * @return The last line, or -1 if the range is being cleared. - * @see #getMin() - */ - public int getMax() { - return max; - } + /** + * Returns the first line in the active line range. + * + * @return The first line, or -1 if the range is being + * cleared. + * @see #getMax() + */ + public int getMin() { + return min; + } - /** - * Returns the first line in the active line range. - * - * @return The first line, or -1 if the range is being cleared. - * @see #getMax() - */ - public int getMin() { - return min; - } -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java old mode 100644 new mode 100755 index f51feb30b..54917697f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ActiveLineRangeListener.java @@ -3,50 +3,42 @@ * * ActiveLineRangeListener.java - Listens for "active line range" changes * in an RSyntaxTextArea. - * Copyright (C) 2011 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.util.EventListener; + /** - * Listens for "active line range" events from an RSyntaxTextArea. If a text area contains some semantic - * knowledge of the programming language being edited, it may broadcast {@link ActiveLineRangeEvent}s whenever the caret - * moves into a new "block" of code. Listeners can listen for these events and respond accordingly. - *

- * - * See the RSTALanguageSupport project at http://fifesoft.com for some - * LanguageSupport implementations that may broadcast these events. Note that if an RSTA/LanguageSupport - * does not support broadcasting these events, the listener will simply never receive any notifications. - * + * Listens for "active line range" events from an RSyntaxTextArea. + * If a text area contains some semantic knowledge of the programming language + * being edited, it may broadcast {@link ActiveLineRangeEvent}s whenever the + * caret moves into a new "block" of code. Listeners can listen for these + * events and respond accordingly.

+ * + * See the RSTALanguageSupport project at + * http://fifesoft.com for some + * LanguageSupport implementations that may broadcast these + * events. Note that if an RSTA/LanguageSupport does not support broadcasting + * these events, the listener will simply never receive any notifications. + * * @author Robert Futrell * @version 1.0 */ public interface ActiveLineRangeListener extends EventListener { - /** - * Called whenever the "active line range" changes. - * - * @param e - * Information about the line range change. If there is no longer an "active line range," the "minimum" - * and "maximum" line values should both be -1. - */ - public void activeLineRangeChanged(ActiveLineRangeEvent e); -} \ No newline at end of file + /** + * Called whenever the "active line range" changes. + * + * @param e Information about the line range change. If there is no longer + * an "active line range," the "minimum" and "maximum" line values + * should both be -1. + */ + void activeLineRangeChanged(ActiveLineRangeEvent e); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ChangeableColorHighlightPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ChangeableColorHighlightPainter.java deleted file mode 100644 index 47638f1d3..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ChangeableColorHighlightPainter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 07/23/2009 - * - * ChangeableColorHighlightPainter.java - A highlighter whose color you can - * change. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -import java.awt.Color; -import javax.swing.text.DefaultHighlighter.DefaultHighlightPainter; - -/** - * A highlighter whose color you can change. - * - * @author Robert Futrell - * @version 1.0 - */ -class ChangeableColorHighlightPainter extends DefaultHighlightPainter { - - /** - * DefaultHighlightPainter doesn't allow changing color, so we must cache ours here. - */ - private Color color; - - /** - * Constructor. - * - * @param color - * The initial color to use. This cannot be null. - */ - public ChangeableColorHighlightPainter(Color color) { - super(color); - setColor(color); - } - - /** - * Returns the color to paint with. - * - * @return The color. - * @see #setColor(Color) - */ - public Color getColor() { - return color; - } - - /** - * Sets the color to paint the bounding boxes with. - * - * @param color - * The new color. This cannot be null. - * @see #getColor() - */ - public void setColor(Color color) { - if (color == null) { - throw new IllegalArgumentException("color cannot be null"); - } - this.color = color; - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java old mode 100644 new mode 100755 index 22f44f7f2..aa7994b5f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/CodeTemplateManager.java @@ -2,28 +2,12 @@ * 02/21/2005 * * CodeTemplateManager.java - manages code templates. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.BufferedInputStream; @@ -34,420 +18,383 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.Serializable; -import java.util.*; -import javax.swing.KeyStroke; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.templates.CodeTemplate; + /** - * Manages "code templates." - *

- * - * All methods in this class are synchronized for thread safety, but as a best practice, you should probably only modify - * the templates known to a CodeTemplateManager on the EDT. Modifying a CodeTemplate retrieved - * from a CodeTemplateManager while not on the EDT could cause problems. - * + * Manages "code templates."

+ * + * All methods in this class are synchronized for thread safety, but as a + * best practice, you should probably only modify the templates known to a + * CodeTemplateManager on the EDT. Modifying a + * CodeTemplate retrieved from a CodeTemplateManager + * while not on the EDT could cause problems.

+ * + * For more flexible boilerplate code insertion, consider using the + * + * TemplateCompletion class in the + * AutoComplete + * add-on library. + * * @author Robert Futrell - * @version 0.1 + * @version 1.0 */ public class CodeTemplateManager { - private int maxTemplateIDLength; - private List templates; - - private KeyStroke insertTrigger; - private String insertTriggerString; - private Segment s; - private TemplateComparator comparator; - private File directory; - - private static final int mask = InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK; - static final KeyStroke TEMPLATE_KEYSTROKE = KeyStroke. - getKeyStroke(KeyEvent.VK_SPACE, mask); - - /** - * Constructor. - */ - public CodeTemplateManager() { - - // Default insert trigger is a space. - // FIXME: See notes in RSyntaxTextAreaDefaultInputMap. - setInsertTrigger(TEMPLATE_KEYSTROKE); - - s = new Segment(); - comparator = new TemplateComparator(); - templates = new ArrayList(); - - } - - /** - * Registers the specified template with this template manager. - * - * @param template - * The template to register. - * @throws IllegalArgumentException - * If template is null. - * @see #removeTemplate(CodeTemplate) - * @see #removeTemplate(String) - */ - public synchronized void addTemplate(CodeTemplate template) { - if (template == null) { - throw new IllegalArgumentException("template cannot be null"); - } - templates.add(template); - sortTemplates(); - } - - /** - * Returns the keystroke that is the "insert trigger" for templates; that is, the character that, when inserted into - * an instance of RSyntaxTextArea, triggers the search for a template matching the token ending at the - * caret position. - * - * @return The insert trigger. - * @see #getInsertTriggerString() - * @see #setInsertTrigger(KeyStroke) - */ - /* - * FIXME: This text IS what's inserted if the trigger character is pressed in a text area but no template matches, - * but it is NOT the trigger character used in the text areas. This is because space (" ") is hard-coded into - * RSyntaxTextAreaDefaultInputMap.java. We need to make this dynamic somehow. See - * RSyntaxTextAreaDefaultInputMap.java. - */ - public KeyStroke getInsertTrigger() { - return insertTrigger; - } - - /** - * Returns the "insert trigger" for templates; that is, the character that, when inserted into an instance of - * RSyntaxTextArea, triggers the search for a template matching the token ending at the caret position. - * - * @return The insert trigger character. - * @see #getInsertTrigger() - * @see #setInsertTrigger(KeyStroke) - */ - /* - * FIXME: This text IS what's inserted if the trigger character is pressed in a text area but no template matches, - * but it is NOT the trigger character used in the text areas. This is because space (" ") is hard-coded into - * RSyntaxTextAreaDefaultInputMap.java. We need to make this dynamic somehow. See - * RSyntaxTextAreaDefaultInputMap.java. - */ - public String getInsertTriggerString() { - return insertTriggerString; - } - - /** - * Returns the template that should be inserted at the current caret position, assuming the trigger character was - * pressed. - * - * @param textArea - * The text area that's getting text inserted into it. - * @return A template that should be inserted, if appropriate, or null if no template should be - * inserted. - */ - public synchronized CodeTemplate getTemplate(RSyntaxTextArea textArea) { - int caretPos = textArea.getCaretPosition(); - int charsToGet = Math.min(caretPos, maxTemplateIDLength); - try { - Document doc = textArea.getDocument(); - doc.getText(caretPos - charsToGet, charsToGet, s); - int index = Collections.binarySearch(templates, s, comparator); - return index >= 0 ? (CodeTemplate) templates.get(index) : null; - } catch (BadLocationException ble) { - ble.printStackTrace(); - throw new InternalError("Error in CodeTemplateManager"); - } - } - - /** - * Returns the number of templates this manager knows about. - * - * @return The template count. - */ - public synchronized int getTemplateCount() { - return templates.size(); - } - - /** - * Returns the templates currently available. - * - * @return The templates available. - */ - public synchronized CodeTemplate[] getTemplates() { - CodeTemplate[] temp = new CodeTemplate[templates.size()]; - return (CodeTemplate[]) templates.toArray(temp); - } - - /** - * Returns whether the specified character is a valid character for a CodeTemplate id. - * - * @param ch - * The character to check. - * @return Whether the character is a valid template character. - */ - public static final boolean isValidChar(char ch) { - return RSyntaxUtilities.isLetterOrDigit(ch) || ch == '_'; - } - - /** - * Returns the specified code template. - * - * @param template - * The template to remove. - * @return true if the template was removed, false if the template was not in this - * template manager. - * @throws IllegalArgumentException - * If template is null. - * @see #removeTemplate(String) - * @see #addTemplate(CodeTemplate) - */ - public synchronized boolean removeTemplate(CodeTemplate template) { - - if (template == null) { - throw new IllegalArgumentException("template cannot be null"); - } - - // TODO: Do a binary search - return templates.remove(template); - - } - - /** - * Returns the code template with the specified id. - * - * @param id - * The id to check for. - * @return The code template that was removed, or null if there was no template with the specified ID. - * @throws IllegalArgumentException - * If id is null. - * @see #removeTemplate(CodeTemplate) - * @see #addTemplate(CodeTemplate) - */ - public synchronized CodeTemplate removeTemplate(String id) { - - if (id == null) { - throw new IllegalArgumentException("id cannot be null"); - } - - // TODO: Do a binary search - for (Iterator i = templates.iterator(); i.hasNext();) { - CodeTemplate template = (CodeTemplate) i.next(); - if (id.equals(template.getID())) { - i.remove(); - return template; - } - } - - return null; - - } - - /** - * Replaces the current set of available templates with the ones specified. - * - * @param newTemplates - * The new set of templates. Note that we will be taking a shallow copy of these and sorting them. - */ - public synchronized void replaceTemplates(CodeTemplate[] newTemplates) { - templates.clear(); - if (newTemplates != null) { - Collections.addAll(templates, newTemplates); - } - sortTemplates(); // Also recomputes maxTemplateIDLength. - } - - /** - * Saves all templates as XML files in the current template directory. - * - * @return Whether or not the save was successful. - */ - public synchronized boolean saveTemplates() { - - if (templates == null) - return true; - if (directory == null || !directory.isDirectory()) - return false; - - // Blow away all old XML files to start anew, as some might be from - // templates we're removed from the template manager. - File[] oldXMLFiles = directory.listFiles(new XMLFileFilter()); - if (oldXMLFiles == null) - return false; // Either an IOException or it isn't a directory. - int count = oldXMLFiles.length; - for (File oldXMLFile : oldXMLFiles) { - /* boolean deleted = */ - oldXMLFile.delete(); - } - - // Save all current templates as XML. - boolean wasSuccessful = true; - for (CodeTemplate template : templates) { - File xmlFile = new File(directory, template.getID() + ".xml"); - try { - XMLEncoder e = new XMLEncoder(new BufferedOutputStream( - new FileOutputStream(xmlFile))); - e.writeObject(template); - e.close(); - } catch (IOException ioe) { - ioe.printStackTrace(); - wasSuccessful = false; - } - } - - return wasSuccessful; - - } - - /** - * Sets the "trigger" character for templates. - * - * @param trigger - * The trigger character to set for templates. This means that when this character is pressed in an - * RSyntaxTextArea, the last-typed token is found, and is checked against all template ID's - * to see if a template should be inserted. If a template ID matches, that template is inserted; if not, - * the trigger character is inserted. If this parameter is null, no change is made to the - * trigger character. - * @see #getInsertTrigger() - * @see #getInsertTriggerString() - */ - /* - * FIXME: The trigger set here IS inserted when no matching template is found, but a space character (" ") is always - * used as the "trigger" to look for templates. This is because it is hard-coded in RSyntaxTextArea's input map this - * way. We need to change this. See RSyntaxTextAreaDefaultInputMap.java. - */ - public void setInsertTrigger(KeyStroke trigger) { - if (trigger != null) { - insertTrigger = trigger; - insertTriggerString = Character.toString(trigger.getKeyChar()); - } - } - - /** - * Sets the directory in which to look for templates. Calling this method adds any new templates found in the - * specified directory to the templates already registered. - * - * @param dir - * The new directory in which to look for templates. - * @return The new number of templates in this template manager, or -1 if the specified directory does - * not exist. - */ - public synchronized int setTemplateDirectory(File dir) { - - if (dir != null && dir.isDirectory()) { - - this.directory = dir; - - File[] files = dir.listFiles(new XMLFileFilter()); - int newCount = files == null ? 0 : files.length; - int oldCount = templates.size(); - - List temp = new ArrayList(oldCount + newCount); - temp.addAll(templates); - - for (int i = 0; i < newCount; i++) { - try { - XMLDecoder d = new XMLDecoder(new BufferedInputStream( - new FileInputStream(files[i]))); - Object obj = d.readObject(); - if (!(obj instanceof CodeTemplate)) { - throw new IOException("Not a CodeTemplate: " + - files[i].getAbsolutePath()); - } - temp.add(obj); - d.close(); - } catch (/* IO, NoSuchElement */Exception e) { - // NoSuchElementException can be thrown when reading - // an XML file not in the format expected by XMLDecoder. - // (e.g. CodeTemplates in an old format). - e.printStackTrace(); - } - } - templates = temp; - sortTemplates(); - - return getTemplateCount(); - - } - - return -1; - - } - - /** - * Removes any null entries in the current set of templates (if any), sorts the remaining templates, and computes - * the new maximum template ID length. - */ - private synchronized void sortTemplates() { - - // Get the maximum length of a template ID. - maxTemplateIDLength = 0; - - // Remove any null entries (should only happen because of - // IOExceptions, etc. when loading from files), and sort - // the remaining list. - for (Iterator i = templates.iterator(); i.hasNext();) { - CodeTemplate temp = (CodeTemplate) i.next(); - if (temp == null || temp.getID() == null) { - i.remove(); - } - else { - maxTemplateIDLength = Math.max(maxTemplateIDLength, - temp.getID().length()); - } - } - - Collections.sort(templates); - - } - - /** - * A comparator that takes a CodeTemplate as its first parameter and a Segment as its - * second, and knows to compare the template's ID to the segment's text. - */ - private static class TemplateComparator implements Comparator, Serializable { - - public int compare(Object template, Object segment) { - - // Get template start index (0) and length. - CodeTemplate t = (CodeTemplate) template; - final char[] templateArray = t.getID().toCharArray(); - int i = 0; - int len1 = templateArray.length; - - // Find "token" part of segment and get its offset and length. - Segment s = (Segment) segment; - char[] segArray = s.array; - int len2 = s.count; - int j = s.offset + len2 - 1; - while (j >= s.offset && isValidChar(segArray[j])) { - j--; - } - j++; - int segShift = j - s.offset; - len2 -= segShift; - - int n = Math.min(len1, len2); - while (n-- != 0) { - char c1 = templateArray[i++]; - char c2 = segArray[j++]; - if (c1 != c2) - return c1 - c2; - } - return len1 - len2; - - } - - } - - /** - * A file filter for File.listFiles() (NOT for JFileChoosers!) that accepts only XML files. - */ - private static class XMLFileFilter implements FileFilter { - public boolean accept(File f) { - return f.getName().toLowerCase().endsWith(".xml"); - } - } - -} \ No newline at end of file + private int maxTemplateIDLength; + private List templates; + + private Segment s; + private TemplateComparator comparator; + private File directory; + + + /** + * Constructor. + */ + public CodeTemplateManager() { + s = new Segment(); + comparator = new TemplateComparator(); + templates = new ArrayList<>(); + } + + + /** + * Registers the specified template with this template manager. + * + * @param template The template to register. + * @throws IllegalArgumentException If template is + * null. + * @see #removeTemplate(CodeTemplate) + * @see #removeTemplate(String) + */ + public synchronized void addTemplate(CodeTemplate template) { + if (template==null) { + throw new IllegalArgumentException("template cannot be null"); + } + templates.add(template); + sortTemplates(); + } + + + /** + * Returns the template that should be inserted at the current caret + * position, assuming the trigger character was pressed. + * + * @param textArea The text area that's getting text inserted into it. + * @return A template that should be inserted, if appropriate, or + * null if no template should be inserted. + */ + public synchronized CodeTemplate getTemplate(RSyntaxTextArea textArea) { + int caretPos = textArea.getCaretPosition(); + int charsToGet = Math.min(caretPos, maxTemplateIDLength); + try { + Document doc = textArea.getDocument(); + doc.getText(caretPos-charsToGet, charsToGet, s); + @SuppressWarnings("unchecked") + int index = Collections.binarySearch(templates, s, comparator); + return index>=0 ? templates.get(index) : null; + } catch (BadLocationException ble) { + ble.printStackTrace(); + throw new InternalError("Error in CodeTemplateManager"); + } + } + + + /** + * Returns the number of templates this manager knows about. + * + * @return The template count. + */ + public synchronized int getTemplateCount() { + return templates.size(); + } + + + /** + * Returns the templates currently available. + * + * @return The templates available. + */ + public synchronized CodeTemplate[] getTemplates() { + CodeTemplate[] temp = new CodeTemplate[templates.size()]; + return templates.toArray(temp); + } + + + /** + * Returns whether the specified character is a valid character for a + * CodeTemplate id. + * + * @param ch The character to check. + * @return Whether the character is a valid template character. + */ + public static boolean isValidChar(char ch) { + return RSyntaxUtilities.isLetterOrDigit(ch) || ch=='_'; + } + + + /** + * Returns the specified code template. + * + * @param template The template to remove. + * @return true if the template was removed, false + * if the template was not in this template manager. + * @throws IllegalArgumentException If template is + * null. + * @see #removeTemplate(String) + * @see #addTemplate(CodeTemplate) + */ + public synchronized boolean removeTemplate(CodeTemplate template) { + + if (template==null) { + throw new IllegalArgumentException("template cannot be null"); + } + + // TODO: Do a binary search + return templates.remove(template); + + } + + + /** + * Returns the code template with the specified id. + * + * @param id The id to check for. + * @return The code template that was removed, or null if + * there was no template with the specified ID. + * @throws IllegalArgumentException If id is null. + * @see #removeTemplate(CodeTemplate) + * @see #addTemplate(CodeTemplate) + */ + public synchronized CodeTemplate removeTemplate(String id) { + + if (id==null) { + throw new IllegalArgumentException("id cannot be null"); + } + + // TODO: Do a binary search + for (Iterator i=templates.iterator(); i.hasNext();) { + CodeTemplate template = i.next(); + if (id.equals(template.getID())) { + i.remove(); + return template; + } + } + + return null; + + } + + + /** + * Replaces the current set of available templates with the ones + * specified. + * + * @param newTemplates The new set of templates. Note that we will + * be taking a shallow copy of these and sorting them. + */ + public synchronized void replaceTemplates(CodeTemplate[] newTemplates) { + templates.clear(); + if (newTemplates!=null) { + Collections.addAll(templates, newTemplates); + } + sortTemplates(); // Also recomputes maxTemplateIDLength. + } + + + /** + * Saves all templates as XML files in the current template directory. + * + * @return Whether or not the save was successful. + */ + public synchronized boolean saveTemplates() { + + if (templates==null) { + return true; + } + if (directory==null || !directory.isDirectory()) { + return false; + } + + // Blow away all old XML files to start anew, as some might be from + // templates we're removed from the template manager. + File[] oldXMLFiles = directory.listFiles(new XMLFileFilter()); + if (oldXMLFiles==null) { + return false; // Either an IOException or it isn't a directory. + } + int count = oldXMLFiles.length; + for (File oldXMLFile : oldXMLFiles) { + /*boolean deleted = */ + oldXMLFile.delete(); + } + + // Save all current templates as XML. + boolean wasSuccessful = true; + for (CodeTemplate template : templates) { + File xmlFile = new File(directory, template.getID() + ".xml"); + try { + XMLEncoder e = new XMLEncoder(new BufferedOutputStream( + new FileOutputStream(xmlFile))); + e.writeObject(template); + e.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + wasSuccessful = false; + } + } + + return wasSuccessful; + + } + + + /** + * Sets the directory in which to look for templates. Calling this + * method adds any new templates found in the specified directory to + * the templates already registered. + * + * @param dir The new directory in which to look for templates. + * @return The new number of templates in this template manager, or + * -1 if the specified directory does not exist. + */ + public synchronized int setTemplateDirectory(File dir) { + + if (dir!=null && dir.isDirectory()) { + + this.directory = dir; + + File[] files = dir.listFiles(new XMLFileFilter()); + int newCount = files==null ? 0 : files.length; + int oldCount = templates.size(); + + List temp = + new ArrayList<>(oldCount + newCount); + temp.addAll(templates); + + for (int i=0; i i=templates.iterator(); i.hasNext();) { + CodeTemplate temp = i.next(); + if (temp==null || temp.getID()==null) { + i.remove(); + } + else { + maxTemplateIDLength = Math.max(maxTemplateIDLength, + temp.getID().length()); + } + } + + Collections.sort(templates); + + } + + + /** + * A comparator that takes a CodeTemplate as its first + * parameter and a Segment as its second, and knows + * to compare the template's ID to the segment's text. + */ + @SuppressWarnings("rawtypes") + private static class TemplateComparator implements Comparator, Serializable{ + + @Override + public int compare(Object template, Object segment) { + + // Get template start index (0) and length. + CodeTemplate t = (CodeTemplate)template; + final char[] templateArray = t.getID().toCharArray(); + int i = 0; + int len1 = templateArray.length; + + // Find "token" part of segment and get its offset and length. + Segment s = (Segment)segment; + char[] segArray = s.array; + int len2 = s.count; + int j = s.offset + len2 - 1; + while (j>=s.offset && isValidChar(segArray[j])) { + j--; + } + j++; + int segShift = j - s.offset; + len2 -= segShift; + + int n = Math.min(len1, len2); + while (n-- != 0) { + char c1 = templateArray[i++]; + char c2 = segArray[j++]; + if (c1 != c2) { + return c1 - c2; + } + } + return len1 - len2; + + } + + } + + + /** + * A file filter that accepts only XML files. + */ + private static class XMLFileFilter implements FileFilter { + @Override + public boolean accept(File f) { + return f.getName().toLowerCase().endsWith(".xml"); + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultOccurrenceMarker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultOccurrenceMarker.java new file mode 100755 index 000000000..df7b36254 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultOccurrenceMarker.java @@ -0,0 +1,112 @@ +/* + * 03/09/2013 + * + * DefaultOccurrenceMarker - Marks occurrences of the current token for most + * languages. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.text.BadLocationException; +import javax.swing.text.Caret; + +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * The default implementation of {@link OccurrenceMarker}. It goes through + * the document and marks all instances of the specified token. + * + * @author Robert Futrell + * @version 1.0 + */ +class DefaultOccurrenceMarker implements OccurrenceMarker { + + + /** + * {@inheritDoc} + */ + @Override + public Token getTokenToMark(RSyntaxTextArea textArea) { + + // Get the token at the caret position. + int line = textArea.getCaretLineNumber(); + Token tokenList = textArea.getTokenListForLine(line); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + + Token t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); + if (t==null /* EOL */ || !isValidType(textArea, t) || + RSyntaxUtilities.isNonWordChar(t)) { + // Try to the "left" of the caret. + dot--; + try { + if (dot>=textArea.getLineStartOffset(line)) { + t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + + return t; + + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isValidType(RSyntaxTextArea textArea, Token t) { + return textArea.getMarkOccurrencesOfTokenType(t.getType()); + } + + + /** + * {@inheritDoc} + */ + @Override + public void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { + markOccurrencesOfToken(doc, t, h, p); + } + + + /** + * Highlights all instances of tokens identical to t in the + * specified document. + * + * @param doc The document. + * @param t The document whose relevant occurrences should be marked. + * @param h The highlighter to add the highlights to. + * @param p The painter for the highlights. + */ + public static void markOccurrencesOfToken(RSyntaxDocument doc, + Token t, RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { + + char[] lexeme = t.getLexeme().toCharArray(); + int type = t.getType(); + int lineCount = doc.getDefaultRootElement().getElementCount(); + + for (int i=0; iorg.fife.ui.rsyntaxtextarea syntax package. This token type paints itself - * as you would expect, and properly accounts for rendering hints (anti-aliasing and fractional font metrics). - *

- * - * The current implementation paints as follows: - *

    - *
  • The first tab, if any, is found in the token.
  • - *
  • All characters up to that tab, if it exists, are painted as a group. If no tab was found, all characters in the - * token are painted.
  • - *
  • If a tab was found, its width is calculated and it is painted.
  • - *
  • Repeat until all characters are painted.
  • - *
- * This method allows for rendering hints to be honored, since all possible characters are painted in a group. However, - * adjacent tokens will not have their "touching" characters rendered with rendering hints. - *

- * - * A problem with this implementation is that FontMetrics.charsWidth() is still used to calculate the width of a group - * of chars painted. Thus, the group of characters will be painted with the rendering hints specified, but the following - * tab (or group of characters if the current group was the end of a token) will not necessarily be painted at the - * proper x-coordinate (as FontMetrics.charsWidth() returns an int and not a float). The way - * around this would be to calculate the token's width in such a way that a float is returned (Font.getStringBounds()?). - * - * @author Robert Futrell - * @version 0.5 - * @see Token - * @see VisibleWhitespaceToken - */ -public class DefaultToken extends Token { - - /** - * Creates a "null token." The token itself is not null; rather, it signifies that it is the last token in a linked - * list of tokens and that it is not part of a "multi-line token." - */ - public DefaultToken() { - super(); - } - - /** - * Constructor. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param startOffset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public DefaultToken(final Segment line, final int beg, final int end, - final int startOffset, final int type) { - this(line.array, beg, end, startOffset, type); - } - - /** - * Constructor. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param startOffset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public DefaultToken(final char[] line, final int beg, final int end, - final int startOffset, final int type) { - super(line, beg, end, startOffset, type); - } - - /** - * Determines the offset into this token list (i.e., into the document) that covers pixel location x if - * the token list starts at pixel location x0 - *

- * . This method will return the document position "closest" to the x-coordinate (i.e., if they click on the - * "right-half" of the w in awe, the caret will be placed in between the w - * and e; similarly, clicking on the left-half places the caret between the a and - * w). This makes it useful for methods such as viewToModel found in - * javax.swing.text.View subclasses. - * - * @param textArea - * The text area from which the token list was derived. - * @param e - * How to expand tabs. - * @param x0 - * The pixel x-location that is the beginning of tokenList. - * @param x - * The pixel-position for which you want to get the corresponding offset. - * @return The position (in the document, NOT into the token list!) that covers the pixel location. If - * tokenList is null or has type Token.NULL, then -1= x) - return offset; - - float currX = x0; // x-coordinate of current char. - float nextX = x0; // x-coordinate of next char. - float stableX = x0; // Cached ending x-coord. of last tab or token. - Token token = this; - int last = offset; - FontMetrics fm = null; - - while (token != null && token.isPaintable()) { - - fm = textArea.getFontMetricsForTokenType(token.type); - char[] text = token.text; - int start = token.textOffset; - int end = start + token.textCount; - - for (int i = start; i < end; i++) { - currX = nextX; - if (text[i] == '\t') { - nextX = e.nextTabStop(nextX, 0); - stableX = nextX; // Cache ending x-coord. of tab. - start = i + 1; // Do charsWidth() from next char. - } - else { - nextX = stableX + fm.charsWidth(text, start, i - start + 1); - } - if (x >= currX && x < nextX) { - if ((x - currX) < (nextX - x)) { - return last + i - token.textOffset; - } - return last + i + 1 - token.textOffset; - } - } - - stableX = nextX; // Cache ending x-coordinate of token. - last += token.textCount; - token = token.getNextToken(); - - } - - // If we didn't find anything, return the end position of the text. - return last; - - } - - /** - * Returns the width of a specified number of characters in this token. For example, for the token "while", - * specifying a value of 3 here returns the width of the "whi" portion of the token. - *

- * - * @param numChars - * The number of characters for which to get the width. - * @param textArea - * The text area in which this token is being painted. - * @param e - * How to expand tabs. This value cannot be null. - * @param x0 - * The pixel-location at which this token begins. This is needed because of tabs. - * @return The width of the specified number of characters in this token. - * @see #getWidth - */ - public float getWidthUpTo(int numChars, RSyntaxTextArea textArea, - TabExpander e, float x0) { - float width = x0; - FontMetrics fm = textArea.getFontMetricsForTokenType(type); - if (fm != null) { - int w; - int currentStart = textOffset; - int endBefore = textOffset + numChars; - for (int i = currentStart; i < endBefore; i++) { - if (text[i] == '\t') { - // Since TokenMaker implementations usually group all - // adjacent whitespace into a single token, there - // aren't usually any characters to compute a width - // for here, so we check before calling. - w = i - currentStart; - if (w > 0) - width += fm.charsWidth(text, currentStart, w); - currentStart = i + 1; - width = e.nextTabStop(width, 0); - } - } - // Most (non-whitespace) tokens will have characters at this - // point to get the widths for, so we don't check for w>0 (mini- - // optimization). - w = endBefore - currentStart; - width += fm.charsWidth(text, currentStart, w); - } - return width - x0; - } - - /** - * Returns the bounding box for the specified document location. The location must be in the specified token list. - * - * @param textArea - * The text area from which the token list was derived. - * @param e - * How to expand tabs. - * @param pos - * The position in the document for which to get the bounding box in the view. - * @param x0 - * The pixel x-location that is the beginning of tokenList. - * @param rect - * The rectangle in which we'll be returning the results. This object is reused to keep from frequent - * memory allocations. - * @return The bounding box for the specified position in the model. - */ - public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, - int pos, int x0, Rectangle rect) { - - int stableX = x0; // Cached ending x-coord. of last tab or token. - Token token = this; - FontMetrics fm = null; - Segment s = new Segment(); - - while (token != null && token.isPaintable()) { - - fm = textArea.getFontMetricsForTokenType(token.type); - if (fm == null) { - return rect; // Don't return null as things'll error. - } - char[] text = token.text; - int start = token.textOffset; - int end = start + token.textCount; - - // If this token contains the position for which to get the - // bounding box... - if (token.containsPosition(pos)) { - - s.array = token.text; - s.offset = token.textOffset; - s.count = pos - token.offset; - - // Must use this (actually fm.charWidth()), and not - // fm.charsWidth() for returned value to match up with where - // text is actually painted on OS X! - int w = Utilities.getTabbedTextWidth(s, fm, stableX, e, - token.offset); - rect.x = stableX + w; - end = token.documentToToken(pos); - - if (text[end] == '\t') { - rect.width = fm.charWidth(' '); - } - else { - rect.width = fm.charWidth(text[end]); - } - - return rect; - - } - - // If this token does not contain the position for which to get - // the bounding box... - else { - s.array = token.text; - s.offset = token.textOffset; - s.count = token.textCount; - stableX += Utilities.getTabbedTextWidth(s, fm, stableX, e, - token.offset); - } - - token = token.getNextToken(); - - } - - // If we didn't find anything, we're at the end of the line. Return - // a width of 1 (so selection highlights don't extend way past line's - // text). A ConfigurableCaret will know to paint itself with a larger - // width. - rect.x = stableX; - rect.width = 1; - return rect; - - } - - /** - * Paints this token. - * - * @param g - * The graphics context in which to paint. - * @param x - * The x-coordinate at which to paint. - * @param y - * The y-coordinate at which to paint. - * @param host - * The text area this token is in. - * @param e - * How to expand tabs. - * @param clipStart - * The left boundary of the clip rectangle in which we're painting. This optimizes painting by allowing - * us to not paint when this token is "to the left" of the clip rectangle. - * @return The x-coordinate representing the end of the painted text. - */ - public float paint(Graphics2D g, float x, float y, RSyntaxTextArea host, - TabExpander e, float clipStart) { - - int origX = (int) x; - int end = textOffset + textCount; - float nextX = x; - int flushLen = 0; - int flushIndex = textOffset; - Color fg = host.getForegroundForToken(this); - Color bg = host.getBackgroundForTokenType(type); - g.setFont(host.getFontForTokenType(type)); - FontMetrics fm = host.getFontMetricsForTokenType(type); - - for (int i = textOffset; i < end; i++) { - switch (text[i]) { - case '\t': - nextX = e.nextTabStop( - x + fm.charsWidth(text, flushIndex, flushLen), 0); - if (bg != null) { - paintBackground(x, y, nextX - x, fm.getHeight(), - g, fm.getAscent(), host, bg); - } - if (flushLen > 0) { - g.setColor(fg); - g.drawChars(text, flushIndex, flushLen, (int) x, (int) y); - flushLen = 0; - } - flushIndex = i + 1; - x = nextX; - break; - default: - flushLen += 1; - break; - } - } - - nextX = x + fm.charsWidth(text, flushIndex, flushLen); - - if (flushLen > 0 && nextX >= clipStart) { - if (bg != null) { - paintBackground(x, y, nextX - x, fm.getHeight(), - g, fm.getAscent(), host, bg); - } - g.setColor(fg); - g.drawChars(text, flushIndex, flushLen, (int) x, (int) y); - } - - if (host.getUnderlineForToken(this)) { - g.setColor(fg); - int y2 = (int) (y + 1); - g.drawLine(origX, y2, (int) nextX, y2); - } - - return nextX; - - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java old mode 100644 new mode 100755 index ad81f930b..591c45d9d --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenFactory.java @@ -2,175 +2,142 @@ * 10/28/2004 * * DefaultTokenFactory.java - Default token factory. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; + /** - * This class generates tokens for a {@link TokenMaker}. This class is here because it reuses tokens when they aren't - * needed anymore to prevent This class doesn't actually create new tokens every time createToken is - * called. Instead, it internally keeps a stack of available already-created tokens. When more tokens are needed to - * properly display a line, more tokens are added to the available stack. This saves from needless repetitive memory - * allocation. However, it makes it IMPERATIVE that users call resetTokenList when creating a new token - * list so that the token maker can keep an accurate list of available tokens. - *

- * - * NOTE: This class should only be used by {@link TokenMaker}; nobody else needs it! - * + * This class generates tokens for a {@link TokenMaker}. This class is here + * because it reuses tokens when they aren't needed anymore to prevent + * This class doesn't actually create new tokens every time + * createToken is called. Instead, it internally keeps a stack of + * available already-created tokens. When more tokens are needed to properly + * display a line, more tokens are added to the available stack. This saves + * from needless repetitive memory allocation. However, it makes it IMPERATIVE + * that users call resetTokenList when creating a new token list so + * that the token maker can keep an accurate list of available tokens.

+ * + * NOTE: This class should only be used by {@link TokenMaker}; nobody else + * needs it! + * * @author Robert Futrell * @version 0.1 */ class DefaultTokenFactory implements TokenFactory { - private int size; - private int increment; - private Token[] tokenList; - private int currentFreeToken; - - protected static final int DEFAULT_START_SIZE = 30; - protected static final int DEFAULT_INCREMENT = 10; - - /** - * Cosnstructor. - */ - public DefaultTokenFactory() { - this(DEFAULT_START_SIZE, DEFAULT_INCREMENT); - } - - /** - * Constructor. - * - * @param size - * The initial number of tokens in this factory. - * @param increment - * How many tokens to increment by when the stack gets empty. - */ - public DefaultTokenFactory(int size, int increment) { - - this.size = size; - this.increment = increment; - this.currentFreeToken = 0; - - // Give us some tokens to initially work with. - tokenList = new Token[size]; - for (int i = 0; i < size; i++) - tokenList[i] = createInternalUseOnlyToken(); - - } - - /** - * Adds tokens to the internal token list. This is called whenever a request is made and no more tokens are - * available. - */ - private final void augmentTokenList() { - Token[] temp = new Token[size + increment]; - System.arraycopy(tokenList, 0, temp, 0, size); - size += increment; - tokenList = temp; - for (int i = 0; i < increment; i++) { - tokenList[size - i - 1] = createInternalUseOnlyToken(); - } - // System.err.println("... size up to: " + size); - } - - /** - * Creates a token for use internally by this token factory. This method should NOT be called externally; only by - * this class and possibly subclasses. - * - * @return A token to add to this token factory's internal stack. If a subclass wants to produce a stack of a token - * other than {@link DefaultToken}, then this method can be overridden to return a new instance of the - * desired token type. - */ - protected Token createInternalUseOnlyToken() { - return new DefaultToken(); - } - - /** - * Returns a null token. - * - * @return A null token. - */ - public Token createToken() { - Token token = tokenList[currentFreeToken]; - token.text = null; - token.type = Token.NULL; - token.offset = -1; - token.setNextToken(null); - currentFreeToken++; - if (currentFreeToken == size) - augmentTokenList(); - return token; - } - - /** - * Returns a token. - * - * @param line - * The segment from which to get the token's text. - * @param beg - * The starting offset of the token's text in the segment. - * @param end - * The ending offset of the token's text in the segment. - * @param startOffset - * The offset in the document of the token. - * @param type - * The type of token. - * @return The token. - */ - public Token createToken(final Segment line, final int beg, - final int end, final int startOffset, final int type) { - return createToken(line.array, beg, end, startOffset, type); - } - - /** - * Returns a token. - * - * @param line - * The segment from which to get the token's text. - * @param beg - * The starting offset of the token's text in the segment. - * @param end - * The ending offset of the token's text in the segment. - * @param startOffset - * The offset in the document of the token. - * @param type - * The type of token. - * @return The token. - */ - public Token createToken(final char[] line, final int beg, - final int end, final int startOffset, final int type) { - Token token = tokenList[currentFreeToken]; - token.set(line, beg, end, startOffset, type); - currentFreeToken++; - if (currentFreeToken == size) - augmentTokenList(); - return token; - } - - /** - * Resets the state of this token maker. This method should be called by the TokenMaker every time a - * token list is generated for a new line so the tokens can be reused. - */ - public void resetAllTokens() { - currentFreeToken = 0; - } - -} \ No newline at end of file + private int size; + private int increment; + private TokenImpl[] tokenList; + private int currentFreeToken; + + protected static final int DEFAULT_START_SIZE = 30; + protected static final int DEFAULT_INCREMENT = 10; + + + /** + * Constructor. + */ + DefaultTokenFactory() { + this(DEFAULT_START_SIZE, DEFAULT_INCREMENT); + } + + + /** + * Constructor. + * + * @param size The initial number of tokens in this factory. + * @param increment How many tokens to increment by when the stack gets + * empty. + */ + DefaultTokenFactory(int size, int increment) { + + this.size = size; + this.increment = increment; + this.currentFreeToken = 0; + + // Give us some tokens to initially work with. + tokenList = new TokenImpl[size]; + for (int i=0; iTokenMaker every time a token list is generated for + * a new line so the tokens can be reused. + */ + @Override + public void resetAllTokens() { + currentFreeToken = 0; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java old mode 100644 new mode 100755 index 4e979b2cb..d42e87aa4 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenMakerFactory.java @@ -1,88 +1,85 @@ /* - * 12/14/2008 + * 12/14/2008 * * DefaultTokenMakerFactory.java - The default TokenMaker factory. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.util.HashMap; -import java.util.Map; /** - * The default implementation of TokenMakerFactory. This factory can create {@link TokenMaker}s for all - * languages known to {@link RSyntaxTextArea}. - * + * The default implementation of TokenMakerFactory. This factory + * can create {@link TokenMaker}s for all languages known to + * {@link RSyntaxTextArea}. + * * @author Robert Futrell * @version 1.0 */ class DefaultTokenMakerFactory extends AbstractTokenMakerFactory - implements SyntaxConstants { + implements SyntaxConstants { - /** - * Creates and returns a mapping from keys to the names of {@link TokenMaker} implementation classes. When - * {@link #getTokenMaker(String)} is called with a key defined in this map, a TokenMaker of the - * corresponding type is returned. - * - * @return The map. - */ - protected Map createTokenMakerKeyToClassNameMap() { - HashMap map = new HashMap(); + /** + * {@inheritDoc} + */ + @Override + protected void initTokenMakerMap() { - String pkg = "org.fife.ui.rsyntaxtextarea.modes."; + String pkg = "org.fife.ui.rsyntaxtextarea.modes."; - map.put(SYNTAX_STYLE_NONE, pkg + "PlainTextTokenMaker"); - map.put(SYNTAX_STYLE_ACTIONSCRIPT, pkg + "ActionScriptTokenMaker"); - map.put(SYNTAX_STYLE_ASSEMBLER_X86, pkg + "AssemblerX86TokenMaker"); - map.put(SYNTAX_STYLE_BBCODE, pkg + "BBCodeTokenMaker"); - map.put(SYNTAX_STYLE_C, pkg + "CTokenMaker"); - map.put(SYNTAX_STYLE_CLOJURE, pkg + "ClojureTokenMaker"); - map.put(SYNTAX_STYLE_CPLUSPLUS, pkg + "CPlusPlusTokenMaker"); - map.put(SYNTAX_STYLE_CSHARP, pkg + "CSharpTokenMaker"); - map.put(SYNTAX_STYLE_CSS, pkg + "CSSTokenMaker"); - map.put(SYNTAX_STYLE_DELPHI, pkg + "DelphiTokenMaker"); - map.put(SYNTAX_STYLE_FORTRAN, pkg + "FortranTokenMaker"); - map.put(SYNTAX_STYLE_GROOVY, pkg + "GroovyTokenMaker"); - map.put(SYNTAX_STYLE_HTML, pkg + "HTMLTokenMaker"); - map.put(SYNTAX_STYLE_JAVA, pkg + "JavaTokenMaker"); - map.put(SYNTAX_STYLE_JAVASCRIPT, pkg + "JavaScriptTokenMaker"); - map.put(SYNTAX_STYLE_JSP, pkg + "JSPTokenMaker"); - map.put(SYNTAX_STYLE_LISP, pkg + "LispTokenMaker"); - map.put(SYNTAX_STYLE_LUA, pkg + "LuaTokenMaker"); - map.put(SYNTAX_STYLE_MAKEFILE, pkg + "MakefileTokenMaker"); - map.put(SYNTAX_STYLE_MXML, pkg + "MxmlTokenMaker"); - map.put(SYNTAX_STYLE_PERL, pkg + "PerlTokenMaker"); - map.put(SYNTAX_STYLE_PHP, pkg + "PHPTokenMaker"); - map.put(SYNTAX_STYLE_PROPERTIES_FILE, pkg + "PropertiesFileTokenMaker"); - map.put(SYNTAX_STYLE_PYTHON, pkg + "PythonTokenMaker"); - map.put(SYNTAX_STYLE_RUBY, pkg + "RubyTokenMaker"); - map.put(SYNTAX_STYLE_SAS, pkg + "SASTokenMaker"); - map.put(SYNTAX_STYLE_SCALA, pkg + "ScalaTokenMaker"); - map.put(SYNTAX_STYLE_SQL, pkg + "SQLTokenMaker"); - map.put(SYNTAX_STYLE_TCL, pkg + "TclTokenMaker"); - map.put(SYNTAX_STYLE_UNIX_SHELL, pkg + "UnixShellTokenMaker"); - map.put(SYNTAX_STYLE_WINDOWS_BATCH, pkg + "WindowsBatchTokenMaker"); - map.put(SYNTAX_STYLE_XML, pkg + "XMLTokenMaker"); + putMapping(SYNTAX_STYLE_NONE, pkg + "PlainTextTokenMaker"); + putMapping(SYNTAX_STYLE_ACTIONSCRIPT, pkg + "ActionScriptTokenMaker"); + putMapping(SYNTAX_STYLE_ASSEMBLER_X86, pkg + "AssemblerX86TokenMaker"); + putMapping(SYNTAX_STYLE_BBCODE, pkg + "BBCodeTokenMaker"); + putMapping(SYNTAX_STYLE_C, pkg + "CTokenMaker"); + putMapping(SYNTAX_STYLE_CLOJURE, pkg + "ClojureTokenMaker"); + putMapping(SYNTAX_STYLE_CPLUSPLUS, pkg + "CPlusPlusTokenMaker"); + putMapping(SYNTAX_STYLE_CSHARP, pkg + "CSharpTokenMaker"); + putMapping(SYNTAX_STYLE_CSS, pkg + "CSSTokenMaker"); + putMapping(SYNTAX_STYLE_CSV, pkg + "CsvTokenMaker"); + putMapping(SYNTAX_STYLE_D, pkg + "DTokenMaker"); + putMapping(SYNTAX_STYLE_DART, pkg + "DartTokenMaker"); + putMapping(SYNTAX_STYLE_DELPHI, pkg + "DelphiTokenMaker"); + putMapping(SYNTAX_STYLE_DOCKERFILE, pkg + "DockerTokenMaker"); + putMapping(SYNTAX_STYLE_DTD, pkg + "DtdTokenMaker"); + putMapping(SYNTAX_STYLE_FORTRAN, pkg + "FortranTokenMaker"); + putMapping(SYNTAX_STYLE_GO, pkg + "GoTokenMaker"); + putMapping(SYNTAX_STYLE_GROOVY, pkg + "GroovyTokenMaker"); + putMapping(SYNTAX_STYLE_HOSTS, pkg + "HostsTokenMaker"); + putMapping(SYNTAX_STYLE_HTACCESS, pkg + "HtaccessTokenMaker"); + putMapping(SYNTAX_STYLE_HTML, pkg + "HTMLTokenMaker"); + putMapping(SYNTAX_STYLE_INI, pkg + "IniTokenMaker"); + putMapping(SYNTAX_STYLE_JAVA, pkg + "JavaTokenMaker"); + putMapping(SYNTAX_STYLE_JAVASCRIPT, pkg + "JavaScriptTokenMaker"); + putMapping(SYNTAX_STYLE_JSON_WITH_COMMENTS, pkg + "JshintrcTokenMaker"); + putMapping(SYNTAX_STYLE_JSON, pkg + "JsonTokenMaker"); + putMapping(SYNTAX_STYLE_JSP, pkg + "JSPTokenMaker"); + putMapping(SYNTAX_STYLE_LATEX, pkg + "LatexTokenMaker"); + putMapping(SYNTAX_STYLE_LESS, pkg + "LessTokenMaker"); + putMapping(SYNTAX_STYLE_LISP, pkg + "LispTokenMaker"); + putMapping(SYNTAX_STYLE_LUA, pkg + "LuaTokenMaker"); + putMapping(SYNTAX_STYLE_MAKEFILE, pkg + "MakefileTokenMaker"); + putMapping(SYNTAX_STYLE_MXML, pkg + "MxmlTokenMaker"); + putMapping(SYNTAX_STYLE_NSIS, pkg + "NSISTokenMaker"); + putMapping(SYNTAX_STYLE_PERL, pkg + "PerlTokenMaker"); + putMapping(SYNTAX_STYLE_PHP, pkg + "PHPTokenMaker"); + putMapping(SYNTAX_STYLE_PROPERTIES_FILE,pkg + "PropertiesFileTokenMaker"); + putMapping(SYNTAX_STYLE_PYTHON, pkg + "PythonTokenMaker"); + putMapping(SYNTAX_STYLE_RUBY, pkg + "RubyTokenMaker"); + putMapping(SYNTAX_STYLE_SAS, pkg + "SASTokenMaker"); + putMapping(SYNTAX_STYLE_SCALA, pkg + "ScalaTokenMaker"); + putMapping(SYNTAX_STYLE_SQL, pkg + "SQLTokenMaker"); + putMapping(SYNTAX_STYLE_TCL, pkg + "TclTokenMaker"); + putMapping(SYNTAX_STYLE_TYPESCRIPT, pkg + "TypeScriptTokenMaker"); + putMapping(SYNTAX_STYLE_UNIX_SHELL, pkg + "UnixShellTokenMaker"); + putMapping(SYNTAX_STYLE_VISUAL_BASIC, pkg + "VisualBasicTokenMaker"); + putMapping(SYNTAX_STYLE_WINDOWS_BATCH, pkg + "WindowsBatchTokenMaker"); + putMapping(SYNTAX_STYLE_XML, pkg + "XMLTokenMaker"); + putMapping(SYNTAX_STYLE_YAML, pkg + "YamlTokenMaker"); - return map; + } - } -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenPainter.java new file mode 100755 index 000000000..152323040 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/DefaultTokenPainter.java @@ -0,0 +1,279 @@ +/* + * 03/16/2013 + * + * DefaultTokenPainter - Standard implementation of a token painter. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; + +import javax.swing.text.TabExpander; + + +/** + * Standard implementation of a token painter. + * + * @author Robert Futrell + * @version 1.0 + */ +class DefaultTokenPainter implements TokenPainter { + + /** + * Rectangle used for filling token backgrounds. + */ + private Rectangle2D.Float bgRect; + + /** + * Micro-optimization; buffer used to compute tab width. If the width is + * correct it's not re-allocated, to prevent lots of very small garbage. + * Only used when painting tab lines. + */ + private static char[] tabBuf; + + + DefaultTokenPainter() { + bgRect = new Rectangle2D.Float(); + } + + + /** + * {@inheritDoc} + */ + @Override + public final float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e) { + return paint(token, g, x,y, host, e, 0); + } + + + /** + * {@inheritDoc} + */ + @Override + public float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart) { + return paintImpl(token, g, x, y, host, e, clipStart, false, false); + } + + + /** + * {@inheritDoc} + */ + @Override + public float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean paintBG) { + return paintImpl(token, g, x, y, host, e, clipStart, !paintBG, false); + } + + + /** + * Paints the background of a token. + * + * @param x The x-coordinate of the token. + * @param y The y-coordinate of the token. + * @param width The width of the token (actually, the width of the part of + * the token to paint). + * @param height The height of the token. + * @param g The graphics context with which to paint. + * @param fontAscent The ascent of the token's font. + * @param host The text area. + * @param color The color with which to paint. + */ + protected void paintBackground(float x, float y, float width, float height, + Graphics2D g, int fontAscent, RSyntaxTextArea host, + Color color) { + g.setColor(color); + bgRect.setRect(x,y-fontAscent, width,height); + //g.fill(bgRect); + g.fillRect((int)x, (int)(y-fontAscent), (int)width, (int)height); + } + + + /** + * Does the dirty-work of actually painting the token. + */ + protected float paintImpl(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean selected, boolean useSTC) { + + int origX = (int)x; + int textOffs = token.getTextOffset(); + char[] text = token.getTextArray(); + int end = textOffs + token.length(); + float nextX = x; + int flushLen = 0; + int flushIndex = textOffs; + Color fg = useSTC ? host.getSelectedTextColor() : + host.getForegroundForToken(token); + Color bg = selected ? null : host.getBackgroundForToken(token); + g.setFont(host.getFontForTokenType(token.getType())); + FontMetrics fm = host.getFontMetricsForTokenType(token.getType()); + + for (int i=textOffs; i 0) { + g.setColor(fg); + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + flushLen = 0; + } + flushIndex = i + 1; + x = nextX; + break; + default: + flushLen += 1; + break; + } + } + + nextX = x+fm.charsWidth(text, flushIndex,flushLen); +java.awt.Rectangle r = host.getMatchRectangle(); + + if (flushLen>0 && nextX>=clipStart) { + if (bg!=null) { + paintBackground(x,y, nextX-x,fm.getHeight(), + g, fm.getAscent(), host, bg); + if (token.length()==1 && r!=null && r.x==x) { + ((RSyntaxTextAreaUI)host.getUI()).paintMatchedBracketImpl( + g, host, r); + } + } + g.setColor(fg); + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + } + + if (host.getUnderlineForToken(token)) { + g.setColor(fg); + int y2 = (int)(y+1); + g.drawLine(origX,y2, (int)nextX,y2); + } + + // Don't check if it's whitespace - some TokenMakers may return types + // other than Token.WHITESPACE for spaces (such as Token.IDENTIFIER). + // This also allows us to paint tab lines for MLC's. + if (host.getPaintTabLines() && origX==host.getMargin().left) {// && isWhitespace()) { + paintTabLines(token, origX, (int)y, (int)nextX, g, e, host); + } + + return nextX; + + } + + + /** + * {@inheritDoc} + */ + @Override + public float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, boolean useSTC) { + return paintSelected(token, g, x, y, host, e, 0, useSTC); + } + + + /** + * {@inheritDoc} + */ + @Override + public float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean useSTC) { + return paintImpl(token, g, x, y, host, e, clipStart, true, useSTC); + } + + + /** + * Paints dotted "tab" lines; that is, lines that show where your caret + * would go to on the line if you hit "tab". This visual effect is usually + * done in the leading whitespace token(s) of lines. + * + * @param token The token to render. + * @param x The starting x-offset of this token. It is assumed that this + * is the left margin of the text area (may be non-zero due to + * insets), since tab lines are only painted for leading whitespace. + * @param y The baseline where this token was painted. + * @param endX The ending x-offset of this token. + * @param g The graphics context. + * @param e Used to expand tabs. + * @param host The text area. + */ + protected void paintTabLines(Token token, int x, int y, int endX, + Graphics2D g, TabExpander e, RSyntaxTextArea host) { + + // We allow tab lines to be painted in more than just Token.WHITESPACE, + // i.e. for MLC's and Token.IDENTIFIERS (for TokenMakers that return + // whitespace as identifiers for performance). But we only paint tab + // lines for the leading whitespace in the token. So, if this isn't a + // WHITESPACE token, figure out the leading whitespace's length. + if (token.getType()!=Token.WHITESPACE) { + int offs = 0; + for (; offs0) { + // Only paint on even y-pixels to prevent doubling up between lines + y0++; + } + + // TODO: Go to endX (inclusive) if this token is last token in the line + Token next = token.getNextToken(); + if (next==null || !next.isPaintable()) { + endX++; + } + while (x0 { + + private int startOffs; + private int endOffs; + + + /** + * Constructor. + * + * @param startOffs The starting offset in the document, inclusive. + * @param endOffs The ending offset in the document, exclusive. + * @throws IllegalArgumentException If endOffs is less than + * startOffs, or either argument is less than zero. + */ + public DocumentRange(int startOffs, int endOffs) { + set(startOffs, endOffs); + } + + + /** + * Compares this document range to another. + * + * @param other Another document range. + * @return How the two should be sorted relative to each other. + */ + @Override + public int compareTo(DocumentRange other) { + if (other==null) { + return 1; + } + int diff = startOffs - other.startOffs; + if (diff!=0) { + return diff; + } + return endOffs - other.endOffs; + } + + + /** + * Returns whether this document range is equal to another one. + * + * @param other Another object, presumably a document range. + * @return Whether other is also a document range, and equal + * to this one. + */ + @Override + public boolean equals(Object other) { + if (other==this) { + return true; + } + if (other instanceof DocumentRange) { + return this.compareTo((DocumentRange)other)==0; + } + return false; + } + + + /** + * Gets the end offset of the range. + * + * @return The end offset. + * @see #getStartOffset() + */ + public int getEndOffset() { + return endOffs; + } + + + /** + * Gets the starting offset of the range. + * + * @return The starting offset. + * @see #getEndOffset() + */ + public int getStartOffset() { + return startOffs; + } + + + /** + * Overridden simply as a best practice, since {@link #equals(Object)} is + * overridden. + * + * @return The hash code for this object. + */ + @Override + public int hashCode() { + return startOffs + endOffs; + } + + + /** + * Returns whether this document range has zero length. This can happen, + * for example, with regex searches of forms like + * "foo|", where the right-hand sub-expression matches empty + * strings. + * + * @return Whether this document range has zero length. + */ + public boolean isZeroLength() { + return startOffs == endOffs; + } + + + /** + * Sets the document range. + * + * @param start The new start value, inclusive. + * @param end The new end value, exclusive. + * @throws IllegalArgumentException If end is less than + * start, or either argument is less than zero. + */ + public void set(int start, int end) { + if (start<0 || end<0) { + throw new IllegalArgumentException( + "start and end must be >= 0 (" + start + "-" + end + ")"); + } + if (end - * + * A component to sit alongside an {@link RSyntaxTextArea} that displays + * colored markers for locations of interest (parser errors, marked + * occurrences, etc.).

+ * + * ErrorStrips display ParserNotices from + * {@link Parser}s. Currently, the only way to get lines flagged in this + * component is to register a Parser on an RSyntaxTextArea and + * return ParserNotices for each line to display an icon for. + * The severity of each notice must be at least the threshold set by + * {@link #setLevelThreshold(org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level)} + * to be displayed in this error strip. The default threshold is + * {@link org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level#WARNING}.

+ * * An ErrorStrip can be added to a UI like so: - * *

  * textArea = createTextArea();
+ * textArea.addParser(new MyParser(textArea)); // Identifies lines to display
  * scrollPane = new RTextScrollPane(textArea, true);
  * ErrorStrip es = new ErrorStrip(textArea);
  * JPanel temp = new JPanel(new BorderLayout());
  * temp.add(scrollPane);
  * temp.add(es, BorderLayout.LINE_END);
  * 
- * + * * @author Robert Futrell - * @version 0.1 - */ -/* - * Possible improvements: 1. Handle marked occurrence changes separately from parser changes. For each property change, - * call a method that removes the notices being reloaded from the Markers (removing any Markers that are now "empty"). - * 2. When 1.4 support is dropped, replace new Integer(int) with Integer.valueOf(int). + * @version 0.5 */ -public class ErrorStrip extends JComponent { - - /** - * The text area. - */ - private RSyntaxTextArea textArea; - - /** - * Listens for events in this component. - */ - private Listener listener; - - /** - * Whether "marked occurrences" in the text area should be shown in this error strip. - */ - private boolean showMarkedOccurrences; - - /** - * Mapping of colors to brighter colors. This is kept to prevent unnecessary creation of the same Colors over and - * over. - */ - private Map brighterColors; - - /** - * Only notices of this severity (or worse) will be displayed in this error strip. - */ - private int levelThreshold; - - /** - * Whether the caret marker's location should be rendered. - */ - private boolean followCaret; - - /** - * The color to use for the caret marker. - */ - private Color caretMarkerColor; - - /** - * Where we paint the caret marker. - */ - private int caretLineY; - - /** - * The last location of the caret marker. - */ - private int lastLineY; - - /** - * The preferred width of this component. - */ - private static final int PREFERRED_WIDTH = 14; - - private static final String MSG = "org.fife.ui.rsyntaxtextarea.ErrorStrip"; - private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); - - /** - * Constructor. - * - * @param textArea - * The text area we are examining. - */ - public ErrorStrip(RSyntaxTextArea textArea) { - this.textArea = textArea; - listener = new Listener(); - ToolTipManager.sharedInstance().registerComponent(this); - setLayout(null); // Manually layout Markers as they can overlap - addMouseListener(listener); - setShowMarkedOccurrences(true); - setLevelThreshold(ParserNotice.WARNING); - setFollowCaret(true); - setCaretMarkerColor(Color.BLACK); - } - - /** - * Overridden so we only start listening for parser notices when this component (and presumably the text area) are - * visible. - */ - public void addNotify() { - super.addNotify(); - textArea.addCaretListener(listener); - textArea.addPropertyChangeListener( - RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); - textArea.addPropertyChangeListener( - RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); - textArea.addPropertyChangeListener( - RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); - refreshMarkers(); - } - - /** - * Manually manages layout since this component uses no layout manager. - */ - public void doLayout() { - for (int i = 0; i < getComponentCount(); i++) { - Marker m = (Marker) getComponent(i); - m.updateLocation(); - } - listener.caretUpdate(null); // Force recalculation of caret line pos - } - - /** - * Returns a "brighter" color. - * - * @param c - * The color. - * @return A brighter color. - */ - private Color getBrighterColor(Color c) { - if (brighterColors == null) { - brighterColors = new HashMap(5); // Usually small - } - Color brighter = (Color) brighterColors.get(c); - if (brighter == null) { - // Don't use c.brighter() as it doesn't work well for blue, and - // also doesn't return something brighter "enough." - int r = possiblyBrighter(c.getRed()); - int g = possiblyBrighter(c.getGreen()); - int b = possiblyBrighter(c.getBlue()); - brighter = new Color(r, g, b); - brighterColors.put(c, brighter); - } - return brighter; - } - - /** - * returns the color to use when painting the caret marker. - * - * @return The caret marker color. - * @see #setCaretMarkerColor(Color) - */ - public Color getCaretMarkerColor() { - return caretMarkerColor; - } - - /** - * Returns whether the caret's position should be drawn. - * - * @return Whether the caret's position should be drawn. - * @see #setFollowCaret(boolean) - */ - public boolean getFollowCaret() { - return followCaret; - } - - /** - * {@inheritDoc} - */ - public Dimension getPreferredSize() { - int height = textArea.getPreferredScrollableViewportSize().height; - return new Dimension(PREFERRED_WIDTH, height); - } - - /** - * Returns the minimum severity a parser notice must be for it to be displayed in this error strip. - * - * @return The minimum severity. - * @see #setLevelThreshold(int) - */ - public int getLevelThreshold() { - return levelThreshold; - } - - /** - * Returns whether marked occurrences are shown in this error strip. - * - * @return Whether marked occurrences are shown. - * @see #setShowMarkedOccurrences(boolean) - */ - public boolean getShowMarkedOccurrences() { - return showMarkedOccurrences; - } - - /** - * {@inheritDoc} - */ - public String getToolTipText(MouseEvent e) { - String text = null; - int line = yToLine(e.getY()); - if (line > -1) { - text = msg.getString("Line"); - // TODO: 1.5: Use Integer.valueOf(line) - text = MessageFormat.format(text, - new Object[] { new Integer(line) }); - } - return text; - } - - /** - * Returns the y-offset in this component corresponding to a line in the text component. - * - * @param line - * The line. - * @return The y-offset. - * @see #yToLine(int) - */ - private int lineToY(int line) { - int h = textArea.getVisibleRect().height; - float lineCount = textArea.getLineCount(); - return (int) ((line / lineCount) * h) - 2; - } - - /** - * Overridden to (possibly) draw the caret's position. - * - * @param g - * The graphics context. - */ - protected void paintComponent(Graphics g) { - super.paintComponent(g); - if (caretLineY > -1) { - g.setColor(getCaretMarkerColor()); - g.fillRect(0, caretLineY, getWidth(), 2); - } - } - - /** - * Returns a possibly brighter component for a color. - * - * @param i - * An RGB component for a color (0-255). - * @return A possibly brighter value for the component. - */ - private static final int possiblyBrighter(int i) { - if (i < 255) { - i += (int) ((255 - i) * 0.8f); - } - return i; - } - - /** - * Refreshes the markers displayed in this error strip. - */ - private void refreshMarkers() { - - removeAll(); // listener is removed in Marker.removeNotify() - Map markerMap = new HashMap(); - - List notices = textArea.getParserNotices(); - for (Object notice1 : notices) { - ParserNotice notice = (ParserNotice) notice1; - if (notice.getLevel() <= levelThreshold || - (notice instanceof TaskNotice)) { - // 1.5: Use Integer.valueOf(notice.getLine()) - Integer key = new Integer(notice.getLine()); - Marker m = (Marker) markerMap.get(key); - if (m == null) { - m = new Marker(notice); - m.addMouseListener(listener); - markerMap.put(key, m); - add(m); - } else { - m.addNotice(notice); - } - } - } - - if (getShowMarkedOccurrences() && textArea.getMarkOccurrences()) { - List occurrences = textArea.getMarkedOccurrences(); - for (Object occurrence : occurrences) { - DocumentRange range = (DocumentRange) occurrence; - int line = 0; - try { - line = textArea.getLineOfOffset(range.getStartOffset()); - } catch (BadLocationException ble) { // Never happens - continue; - } - ParserNotice notice = new MarkedOccurrenceNotice(range); - // 1.5: Use Integer.valueOf(notice.getLine()) - Integer key = new Integer(line); - Marker m = (Marker) markerMap.get(key); - if (m == null) { - m = new Marker(notice); - m.addMouseListener(listener); - markerMap.put(key, m); - add(m); - } else { - if (!m.containsMarkedOccurence()) { - m.addNotice(notice); - } - } - } - } - - revalidate(); - repaint(); - - } - - /** - * {@inheritDoc} - */ - public void removeNotify() { - super.removeNotify(); - textArea.removeCaretListener(listener); - textArea.removePropertyChangeListener( - RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); - textArea.removePropertyChangeListener( - RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); - textArea.removePropertyChangeListener( - RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); - } - - /** - * Sets the color to use when painting the caret marker. - * - * @param color - * The new caret marker color. - * @see #getCaretMarkerColor() - */ - public void setCaretMarkerColor(Color color) { - if (color != null) { - caretMarkerColor = color; - listener.caretUpdate(null); // Force repaint - } - } - - /** - * Toggles whether the caret's current location should be drawn. - * - * @param follow - * Whether the caret's current location should be followed. - * @see #getFollowCaret() - */ - public void setFollowCaret(boolean follow) { - if (followCaret != follow) { - if (followCaret) { - repaint(0, caretLineY, getWidth(), 2); // Erase - } - caretLineY = -1; - lastLineY = -1; - followCaret = follow; - listener.caretUpdate(null); // Possibly repaint - } - } - - /** - * Sets the minimum severity a parser notice must be for it to be displayed in this error strip. The default value - * is {@link ParserNotice#WARNING}. - * - * @param level - * The new severity threshold. - * @see #getLevelThreshold() - */ - public void setLevelThreshold(int level) { - levelThreshold = level; - if (isDisplayable()) { - refreshMarkers(); - } - } - - /** - * Sets whether marked occurrences are shown in this error strip. - * - * @param show - * Whether to show marked occurrences. - * @see #getShowMarkedOccurrences() - */ - public void setShowMarkedOccurrences(boolean show) { - if (show != showMarkedOccurrences) { - showMarkedOccurrences = show; - if (isDisplayable()) { // Skip this when we're first created - refreshMarkers(); - } - } - } - - /** - * Returns the line in the text area corresponding to a y-offset in this component. - * - * @param y - * The y-offset. - * @return The line. - * @see #lineToY(int) - */ - private final int yToLine(int y) { - int line = -1; - int h = textArea.getVisibleRect().height; - if (y < h) { - float at = y / (float) h; - line = (int) (textArea.getLineCount() * at); - } - return line; - } - - /** - * Listens for events in the error strip and its markers. - */ - private class Listener extends MouseAdapter - implements PropertyChangeListener, CaretListener { - - private Rectangle visibleRect = new Rectangle(); - - public void caretUpdate(CaretEvent e) { - if (getFollowCaret()) { - int line = textArea.getCaretLineNumber(); - float percent = line / ((float) textArea.getLineCount()); - textArea.computeVisibleRect(visibleRect); - caretLineY = (int) (visibleRect.height * percent); - if (caretLineY != lastLineY) { - repaint(0, lastLineY, getWidth(), 2); // Erase old position - repaint(0, caretLineY, getWidth(), 2); - lastLineY = caretLineY; - } - } - } - - public void mouseClicked(MouseEvent e) { - - Component source = (Component) e.getSource(); - if (source instanceof Marker) { - ((Marker) source).mouseClicked(e); - return; - } - - int line = yToLine(e.getY()); - if (line > -1) { - try { - int offs = textArea.getLineStartOffset(line); - textArea.setCaretPosition(offs); - } catch (BadLocationException ble) { // Never happens - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - } - } - - } - - public void propertyChange(PropertyChangeEvent e) { - - String propName = e.getPropertyName(); - - // If they change whether marked occurrences are visible in editor - if (RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY.equals(propName)) { - if (getShowMarkedOccurrences()) { - refreshMarkers(); - } - } - - // If parser notices changed. - else if (RSyntaxTextArea.PARSER_NOTICES_PROPERTY.equals(propName)) { - refreshMarkers(); - } - - // If marked occurrences changed. - else if (RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY. - equals(propName)) { - if (getShowMarkedOccurrences()) { - refreshMarkers(); - } - } - - } - - } - - private static final Color COLOR = new Color(220, 220, 220); - - /** - * A notice that wraps a "marked occurrence." - */ - private class MarkedOccurrenceNotice implements ParserNotice { - - private DocumentRange range; - - public MarkedOccurrenceNotice(DocumentRange range) { - this.range = range; - } - - public int compareTo(Object o) { - return 0; // Value doesn't matter - } - - public boolean containsPosition(int pos) { - return pos >= range.getStartOffset() && pos < range.getEndOffset(); - } - - public boolean equals(Object o) { - // FindBugs - Define equals() when defining compareTo() - return compareTo(o) == 0; - } - - public Color getColor() { - return COLOR; - // return textArea.getMarkOccurrencesColor(); - } - - public int getLength() { - return range.getEndOffset() - range.getStartOffset(); - } - - public int getLevel() { - return INFO; // Won't matter - } - - public int getLine() { - try { - return textArea.getLineOfOffset(range.getStartOffset()); - } catch (BadLocationException ble) { - return 0; - } - } - - public String getMessage() { - String text = null; - try { - String word = textArea.getText(range.getStartOffset(), - getLength()); - text = msg.getString("OccurrenceOf"); - text = MessageFormat.format(text, new String[] { word }); - } catch (BadLocationException ble) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - } - return text; - } - - public int getOffset() { - return range.getStartOffset(); - } - - public Parser getParser() { - return null; - } - - public boolean getShowInEditor() { - return false; // Value doesn't matter - } - - public String getToolTipText() { - return null; - } - - public int hashCode() { // FindBugs, since we override equals() - return 0; // Value doesn't matter for us. - } - - } - - /** - * A "marker" in this error strip, representing one or more notices. - */ - private class Marker extends JComponent { - - private List notices; - - public Marker(ParserNotice notice) { - notices = new ArrayList(1); // Usually just 1 - addNotice(notice); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - setSize(getPreferredSize()); - ToolTipManager.sharedInstance().registerComponent(this); - } - - public void addNotice(ParserNotice notice) { - notices.add(notice); - } - - public boolean containsMarkedOccurence() { - return IntStream.range(0, notices.size()).anyMatch(i -> notices.get(i) instanceof MarkedOccurrenceNotice); - } - - public Color getColor() { - // Return the color for the highest-level parser. - Color c = null; - int lowestLevel = Integer.MAX_VALUE; // ERROR is 0 - for (Object notice1 : notices) { - ParserNotice notice = (ParserNotice) notice1; - if (notice.getLevel() < lowestLevel) { - lowestLevel = notice.getLevel(); - c = notice.getColor(); - } - } - return c; - } - - public Dimension getPreferredSize() { - int w = PREFERRED_WIDTH - 4; // 2-pixel empty border - return new Dimension(w, 5); - } - - public String getToolTipText() { - - String text = null; - - if (notices.size() == 1) { - text = ((ParserNotice) notices.get(0)).getMessage(); - } - else { // > 1 - StringBuffer sb = new StringBuffer(""); - sb.append(msg.getString("MultipleMarkers")); - sb.append("
"); - for (Object notice : notices) { - ParserNotice pn = (ParserNotice) notice; - sb.append("   - "); - sb.append(pn.getMessage()); - sb.append("
"); - } - text = sb.toString(); - } - - return text; - - } - - protected void mouseClicked(MouseEvent e) { - ParserNotice pn = (ParserNotice) notices.get(0); - int offs = pn.getOffset(); - int len = pn.getLength(); - if (offs > -1 && len > -1) { // These values are optional - textArea.setSelectionStart(offs); - textArea.setSelectionEnd(offs + len); - } - else { - int line = pn.getLine(); - try { - offs = textArea.getLineStartOffset(line); - textArea.setCaretPosition(offs); - } catch (BadLocationException ble) { // Never happens - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - } - } - } - - protected void paintComponent(Graphics g) { - - // TODO: Give "priorities" and always pick color of a notice with - // highest priority (e.g. parsing errors will usually be red). - - Color borderColor = getColor(); - if (borderColor == null) { - borderColor = Color.DARK_GRAY; - } - Color fillColor = getBrighterColor(borderColor); - - int w = getWidth(); - int h = getHeight(); - - g.setColor(fillColor); - g.fillRect(0, 0, w, h); - - g.setColor(borderColor); - g.drawRect(0, 0, w - 1, h - 1); - - } - - public void removeNotify() { - super.removeNotify(); - ToolTipManager.sharedInstance().unregisterComponent(this); - removeMouseListener(listener); - } - - public void updateLocation() { - int line = ((ParserNotice) notices.get(0)).getLine(); - int y = lineToY(line); - setLocation(2, y); - } - - } - -} \ No newline at end of file +// Possible improvements: +// 1. Handle marked occurrence changes & "mark all" changes separately from +// parser changes. For each property change, call a method that removes +// the notices being reloaded from the Markers (removing any Markers that +// are now "empty"). +// +public class ErrorStrip extends JPanel { + + /** + * The text area. + */ + private RSyntaxTextArea textArea; + + /** + * Listens for events in this component. + */ + private transient Listener listener; + + /** + * Whether "marked occurrences" in the text area should be shown in this + * error strip. + */ + private boolean showMarkedOccurrences; + + /** + * Whether markers for "mark all" highlights should be shown in this + * error strip. + */ + private boolean showMarkAll; + + /** + * Mapping of colors to brighter colors. This is kept to prevent + * unnecessary creation of the same Colors over and over. + */ + private Map brighterColors; + + /** + * Only notices of this severity (or worse) will be displayed in this + * error strip. + */ + private ParserNotice.Level levelThreshold; + + /** + * Whether the caret marker's location should be rendered. + */ + private boolean followCaret; + + /** + * The color to use for the caret marker. + */ + private Color caretMarkerColor; + + /** + * Where we paint the caret marker. + */ + private int caretLineY; + + /** + * The last location of the caret marker. + */ + private int lastLineY; + + /** + * Generates the tool tips for markers in this error strip. + */ + private transient ErrorStripMarkerToolTipProvider markerToolTipProvider; + + /** + * The preferred width of this component. + */ + private static final int PREFERRED_WIDTH = 14; + + private static final ResourceBundle MSG = ResourceBundle.getBundle( + "org.fife.ui.rsyntaxtextarea.ErrorStrip"); + + /** + * Constructor. + * + * @param textArea The text area we are examining. + */ + public ErrorStrip(RSyntaxTextArea textArea) { + this.textArea = textArea; + listener = new Listener(); + ToolTipManager.sharedInstance().registerComponent(this); + setLayout(null); // Manually layout Markers as they can overlap + addMouseListener(listener); + setShowMarkedOccurrences(true); + setShowMarkAll(true); + setLevelThreshold(ParserNotice.Level.WARNING); + setFollowCaret(true); + setCaretMarkerColor(getDefaultCaretMarkerColor()); + setMarkerToolTipProvider(null); // Install default + } + + + /** + * Overridden so we only start listening for parser notices when this + * component (and presumably the text area) are visible. + */ + @Override + public void addNotify() { + super.addNotify(); + textArea.addCaretListener(listener); + textArea.addPropertyChangeListener( + RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); + textArea.addPropertyChangeListener( + RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); + textArea.addPropertyChangeListener( + RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); + textArea.addPropertyChangeListener( + RSyntaxTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY, listener); + refreshMarkers(); + } + + + /** + * Manually manages layout since this component uses no layout manager. + */ + @Override + public void doLayout() { + for (int i=0; i(5); // Usually small + } + Color brighter = brighterColors.get(c); + if (brighter==null) { + // Don't use c.brighter() as it doesn't work well for blue, and + // also doesn't return something brighter "enough." + int r = possiblyBrighter(c.getRed()); + int g = possiblyBrighter(c.getGreen()); + int b = possiblyBrighter(c.getBlue()); + brighter = new Color(r, g, b); + brighterColors.put(c, brighter); + } + return brighter; + } + + + /** + * returns the color to use when painting the caret marker. + * + * @return The caret marker color. + * @see #setCaretMarkerColor(Color) + */ + public Color getCaretMarkerColor() { + return caretMarkerColor; + } + + + /** + * Returns the default color for the caret marker. This is a UI + * resource so that it is updated if the LookAndFeel is updated, + * but not if the user overrides it. + * + * @return The default color. + */ + private ColorUIResource getDefaultCaretMarkerColor() { + + if (RSyntaxUtilities.isLightForeground(getForeground())) { + return new ColorUIResource(textArea.getCaretColor()); + } + + return new ColorUIResource(Color.black); + } + + /** + * Returns whether the caret's position should be drawn. + * + * @return Whether the caret's position should be drawn. + * @see #setFollowCaret(boolean) + */ + public boolean getFollowCaret() { + return followCaret; + } + + + @Override + public Dimension getPreferredSize() { + int height = textArea.getPreferredScrollableViewportSize().height; + return new Dimension(PREFERRED_WIDTH, height); + } + + + /** + * Returns the minimum severity a parser notice must be for it to be + * displayed in this error strip. This will be one of the constants + * defined in the ParserNotice class. + * + * @return The minimum severity. + * @see #setLevelThreshold(org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level) + */ + public ParserNotice.Level getLevelThreshold() { + return levelThreshold; + } + + + /** + * Returns whether "mark all" highlights are shown in this error strip. + * + * @return Whether markers are shown for "mark all" highlights. + * @see #setShowMarkAll(boolean) + */ + public boolean getShowMarkAll() { + return showMarkAll; + } + + + /** + * Returns whether marked occurrences are shown in this error strip. + * + * @return Whether marked occurrences are shown. + * @see #setShowMarkedOccurrences(boolean) + */ + public boolean getShowMarkedOccurrences() { + return showMarkedOccurrences; + } + + + @Override + public String getToolTipText(MouseEvent e) { + String text = null; + int line = yToLine(e.getY()); + if (line>-1) { + text = MSG.getString("Line"); + text = MessageFormat.format(text, line + 1); + } + return text; + } + + + /** + * Returns the y-offset in this component corresponding to a line in the + * text component. + * + * @param line The line. + * @return The y-offset. + * @see #yToLine(int) + */ + private int lineToY(int line) { + int h = textArea.getVisibleRect().height; + float lineCount = textArea.getLineCount(); + return (int)(((line-1)/(lineCount-1)) * (h-2)); + } + + + /** + * Overridden to (possibly) draw the caret's position. + * + * @param g The graphics context. + */ + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + if (caretLineY>-1) { + g.setColor(getCaretMarkerColor()); + g.fillRect(0, caretLineY, getWidth(), 2); + } + } + + + /** + * Returns a possibly brighter component for a color. + * + * @param i An RGB component for a color (0-255). + * @return A possibly brighter value for the component. + */ + private static int possiblyBrighter(int i) { + if (i<255) { + i += (int)((255-i)*0.8f); + } + return i; + } + + + /** + * Refreshes the markers displayed in this error strip. + */ + private void refreshMarkers() { + + removeAll(); // listener is removed in Marker.removeNotify() + Map markerMap = new HashMap<>(); + + List notices = textArea.getParserNotices(); + for (ParserNotice notice : notices) { + if (notice.getLevel().isEqualToOrWorseThan(levelThreshold) || + (notice instanceof TaskNotice)) { + Integer key = notice.getLine(); + Marker m = markerMap.get(key); + if (m==null) { + m = new Marker(notice); + m.addMouseListener(listener); + markerMap.put(key, m); + add(m); + } + else { + m.addNotice(notice); + } + } + } + + if (getShowMarkedOccurrences() && textArea.getMarkOccurrences()) { + List occurrences = textArea.getMarkedOccurrences(); + addMarkersForRanges(occurrences, markerMap, textArea.getMarkOccurrencesColor()); + } + + if (getShowMarkAll() /*&& textArea.getMarkAll()*/) { + Color markAllColor = textArea.getMarkAllHighlightColor(); + List ranges = textArea.getMarkAllHighlightRanges(); + addMarkersForRanges(ranges, markerMap, markAllColor); + } + + revalidate(); + repaint(); + + } + + + /** + * Adds markers for a list of ranges in the document. + * + * @param ranges The list of ranges in the document. + * @param markerMap A mapping from line number to Marker. + * @param color The color to use for the markers. + */ + private void addMarkersForRanges(List ranges, + Map markerMap, Color color) { + for (DocumentRange range : ranges) { + int line = 0; + try { + line = textArea.getLineOfOffset(range.getStartOffset()); + } catch (BadLocationException ble) { // Never happens + continue; + } + ParserNotice notice = new MarkedOccurrenceNotice(range, color); + Integer key = line; + Marker m = markerMap.get(key); + if (m==null) { + m = new Marker(notice); + m.addMouseListener(listener); + markerMap.put(key, m); + add(m); + } + else { + if (!m.containsMarkedOccurence()) { + m.addNotice(notice); + } + } + } + } + + + /** + * {@inheritDoc} + */ + @Override + public void removeNotify() { + super.removeNotify(); + textArea.removeCaretListener(listener); + textArea.removePropertyChangeListener( + RSyntaxTextArea.PARSER_NOTICES_PROPERTY, listener); + textArea.removePropertyChangeListener( + RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY, listener); + textArea.removePropertyChangeListener( + RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, listener); + textArea.removePropertyChangeListener( + RSyntaxTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY, listener); + } + + + /** + * Sets the color to use when painting the caret marker. + * + * @param color The new caret marker color. + * @see #getCaretMarkerColor() + */ + public void setCaretMarkerColor(Color color) { + if (color!=null) { + caretMarkerColor = color; + listener.caretUpdate(null); // Force repaint + } + } + + + /** + * Toggles whether the caret's current location should be drawn. + * + * @param follow Whether the caret's current location should be followed. + * @see #getFollowCaret() + */ + public void setFollowCaret(boolean follow) { + if (followCaret!=follow) { + if (followCaret) { + repaint(0,caretLineY, getWidth(),2); // Erase + } + caretLineY = -1; + lastLineY = -1; + followCaret = follow; + listener.caretUpdate(null); // Possibly repaint + } + } + + + /** + * Sets the minimum severity a parser notice must be for it to be displayed + * in this error strip. This should be one of the constants defined in + * the ParserNotice class. The default value is + * {@link org.fife.ui.rsyntaxtextarea.parser.ParserNotice.Level#WARNING}. + * + * @param level The new severity threshold. + * @see #getLevelThreshold() + * @see ParserNotice + */ + public void setLevelThreshold(ParserNotice.Level level) { + levelThreshold = level; + if (isDisplayable()) { + refreshMarkers(); + } + } + + + /** + * Sets the provider of tool tips for markers in this error strip. + * Applications can use this method to control the content and format of + * the tool tip descriptions of line markers. + * + * @param provider The provider. If this is null, a default + * implementation will be used. + */ + public void setMarkerToolTipProvider(ErrorStripMarkerToolTipProvider provider) { + markerToolTipProvider = provider != null ? provider : + new DefaultErrorStripMarkerToolTipProvider(); + } + + + /** + * Sets whether "mark all" highlights are shown in this error strip. + * + * @param show Whether to show markers for "mark all" highlights. + * @see #getShowMarkAll() + */ + public void setShowMarkAll(boolean show) { + if (show!=showMarkAll) { + showMarkAll = show; + if (isDisplayable()) { // Skip this when we're first created + refreshMarkers(); + } + } + } + + + /** + * Sets whether marked occurrences are shown in this error strip. + * + * @param show Whether to show marked occurrences. + * @see #getShowMarkedOccurrences() + */ + public void setShowMarkedOccurrences(boolean show) { + if (show!=showMarkedOccurrences) { + showMarkedOccurrences = show; + if (isDisplayable()) { // Skip this when we're first created + refreshMarkers(); + } + } + } + + + public void updateUI() { + + super.updateUI(); + + if (caretMarkerColor instanceof ColorUIResource) { + setCaretMarkerColor(getDefaultCaretMarkerColor()); + } + } + + /** + * Returns the line in the text area corresponding to a y-offset in this + * component. + * + * @param y The y-offset. + * @return The line. + * @see #lineToY(int) + */ + private int yToLine(int y) { + int line = -1; + int h = textArea.getVisibleRect().height; + if (y notices) { + + String text = null; + + if (notices.size()==1) { + text = notices.get(0).getMessage(); + } + else { // > 1 + StringBuilder sb = new StringBuilder(""); + sb.append(MSG.getString("MultipleMarkers")); + sb.append("
"); + for (ParserNotice pn : notices) { + sb.append("   - "); + sb.append(pn.getMessage()); + sb.append("
"); + } + text = sb.toString(); + } + + return text; + + } + + } + + + /** + * Returns tool tip text for the markers in an {@link ErrorStrip} that + * denote one or more parser notices. + * + * @author predi + */ + public interface ErrorStripMarkerToolTipProvider { + + /** + * Returns the tool tip text for a marker in an ErrorStrip + * that denotes a given list of parser notices. + * + * @param notices The list of parser notices. + * @return The tool tip text. This may be HTML. Returning + * null will result in no tool tip being displayed. + */ + String getToolTipText(List notices); + + } + + + /** + * Listens for events in the error strip and its markers. + */ + private class Listener extends MouseAdapter + implements PropertyChangeListener, CaretListener { + + private Rectangle visibleRect = new Rectangle(); + + @Override + public void caretUpdate(CaretEvent e) { + if (getFollowCaret()) { + int line = textArea.getCaretLineNumber(); + float percent = line / (float)(textArea.getLineCount()-1); + textArea.computeVisibleRect(visibleRect); + caretLineY = (int)(visibleRect.height*percent); + if (caretLineY!=lastLineY) { + repaint(0,lastLineY, getWidth(), 2); // Erase old position + repaint(0,caretLineY, getWidth(), 2); + lastLineY = caretLineY; + } + } + } + + @Override + public void mouseClicked(MouseEvent e) { + + Component source = (Component)e.getSource(); + if (source instanceof Marker) { + ((Marker)source).mouseClicked(e); + return; + } + + int line = yToLine(e.getY()); + if (line>-1) { + try { + int offs = textArea.getLineStartOffset(line); + textArea.setCaretPosition(offs); + } catch (BadLocationException ble) { // Never happens + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + } + } + + } + + @Override + public void propertyChange(PropertyChangeEvent e) { + + String propName = e.getPropertyName(); + + // If they change whether marked occurrences are visible in editor + if (RSyntaxTextArea.MARK_OCCURRENCES_PROPERTY.equals(propName)) { + if (getShowMarkedOccurrences()) { + refreshMarkers(); + } + } + + // If parser notices changed. + // TODO: Don't update "mark all/occurrences" markers. + else if (RSyntaxTextArea.PARSER_NOTICES_PROPERTY.equals(propName)) { + refreshMarkers(); + } + + // If marked occurrences changed. + // TODO: Only update "mark occurrences" markers, not all of them. + else if (RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY. + equals(propName)) { + if (getShowMarkedOccurrences()) { + refreshMarkers(); + } + } + + // If "mark all" occurrences changed. + // TODO: Only update "mark all" markers, not all of them. + else if (RTextArea.MARK_ALL_OCCURRENCES_CHANGED_PROPERTY. + equals(propName)) { + if (getShowMarkAll()) { + refreshMarkers(); + } + } + + } + + } + + + /** + * A notice that wraps a "marked occurrence" instance. + */ + private class MarkedOccurrenceNotice implements ParserNotice { + + private DocumentRange range; + private Color color; + + MarkedOccurrenceNotice(DocumentRange range, Color color) { + this.range = range; + this.color = color; + } + + @Override + public int compareTo(ParserNotice other) { + return 0; // Value doesn't matter + } + + @Override + public boolean containsPosition(int pos) { + return pos>=range.getStartOffset() && pos notices; + + Marker(ParserNotice notice) { + notices = new ArrayList<>(1); // Usually just 1 + addNotice(notice); + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + setSize(getPreferredSize()); + ToolTipManager.sharedInstance().registerComponent(this); + } + + public void addNotice(ParserNotice notice) { + notices.add(notice); + } + + public boolean containsMarkedOccurence() { + boolean result = false; + for (ParserNotice notice : notices) { + if (notice instanceof MarkedOccurrenceNotice) { + result = true; + break; + } + } + return result; + } + + public Color getColor() { + // Return the color for the highest-level parser. + Color c = null; + int lowestLevel = Integer.MAX_VALUE; // ERROR is 0 + for (ParserNotice notice : notices) { + if (notice.getLevel().getNumericValue()-1 && len>-1) { // These values are optional + DocumentRange range = new DocumentRange(offs, offs + len); + RSyntaxUtilities.selectAndPossiblyCenter(textArea, range, true); + } + else { + int line = pn.getLine(); + try { + offs = textArea.getLineStartOffset(line); + textArea.getFoldManager().ensureOffsetNotInClosedFold(offs); + textArea.setCaretPosition(offs); + } catch (BadLocationException ble) { // Never happens + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + } + } + } + + @Override + protected void paintComponent(Graphics g) { + + // TODO: Give "priorities" and always pick color of a notice with + // highest priority (e.g. parsing errors will usually be red). + + Color borderColor = getColor(); + if (borderColor==null) { + borderColor = Color.DARK_GRAY; + } + Color fillColor = getBrighterColor(borderColor); + + int w = getWidth(); + int h = getHeight(); + + g.setColor(fillColor); + g.fillRect(0,0, w,h); + + g.setColor(borderColor); + g.drawRect(0,0, w-1,h-1); + + } + + @Override + public void removeNotify() { + super.removeNotify(); + ToolTipManager.sharedInstance().unregisterComponent(this); + removeMouseListener(listener); + } + + public void updateLocation() { + int line = notices.get(0).getLine(); + int y = lineToY(line); + setLocation(2, y); + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java old mode 100644 new mode 100755 index 608f87575..cb2a6efe5 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileFileLocation.java @@ -2,131 +2,120 @@ * 11/13/2008 * * FileFileLocation.java - The location of a local file. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; -import java.io.InputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; + /** * The location of a local file. - * + * * @author Robert Futrell * @version 1.0 */ class FileFileLocation extends FileLocation { - /** - * The file. This may or may not actually exist. - */ - private File file; - - /** - * Constructor. - * - * @param file - * The local file. - */ - public FileFileLocation(File file) { - try { - // Useful on Windows and OS X. - this.file = file.getCanonicalFile(); - } catch (IOException ioe) { - this.file = file; - } - } - - /** - * Returns the last time this file was modified, or {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value - * cannot be computed (such as for a remote file). - * - * @return The last time this file was modified. - */ - protected long getActualLastModified() { - return file.lastModified(); - } - - /** - * Returns the full path to the file. - * - * @return The full path to the file. - * @see #getFileName() - */ - public String getFileFullPath() { - return file.getAbsolutePath(); - } - - /** - * Returns the name of the file. - * - * @return The name of the file. - * @see #getFileFullPath() - */ - public String getFileName() { - return file.getName(); - } - - /** - * Opens an input stream for reading from this file. - * - * @return The input stream. - * @throws IOException - * If the file does not exist, or some other IO error occurs. - */ - protected InputStream getInputStream() throws IOException { - return new FileInputStream(file); - } - - /** - * Opens an output stream for writing this file. - * - * @return An output stream. - * @throws IOException - * If an IO error occurs. - */ - protected OutputStream getOutputStream() throws IOException { - return new FileOutputStream(file); - } - - /** - * Returns whether this file location is a local file. - * - * @return Whether this is a local file. - * @see #isLocalAndExists() - */ - public boolean isLocal() { - return true; - } - - /** - * Returns whether this file location is a local file and already exists. - * - * @return Whether this file is local and actually exists. - * @see #isLocal() - */ - public boolean isLocalAndExists() { - return file.exists(); - } - -} \ No newline at end of file + /** + * The file. This may or may not actually exist. + */ + private File file; + + + /** + * Constructor. + * + * @param file The local file. + */ + FileFileLocation(File file) { + try { + // Useful on Windows and OS X. + this.file = file.getCanonicalFile(); + } catch (IOException ioe) { + this.file = file; + } + } + + + /** + * {@inheritDoc} + */ + @Override + protected long getActualLastModified() { + return file.lastModified(); + } + + + /** + * Returns the full path to the file. + * + * @return The full path to the file. + * @see #getFileName() + */ + @Override + public String getFileFullPath() { + return file.getAbsolutePath(); + } + + + /** + * {@inheritDoc} + */ + @Override + public String getFileName() { + return file.getName(); + } + + + /** + * {@inheritDoc} + */ + @Override + protected InputStream getInputStream() throws IOException { + return new FileInputStream(file); + } + + + /** + * {@inheritDoc} + */ + @Override + protected OutputStream getOutputStream() throws IOException { + return new FileOutputStream(file); + } + + + /** + * Always returns true. + * + * @return true always. + * @see #isLocalAndExists() + */ + @Override + public boolean isLocal() { + return true; + } + + + /** + * Since file locations of this type are guaranteed to be local, this + * method returns whether the file exists. + * + * @return Whether this local file actually exists. + * @see #isLocal() + */ + @Override + public boolean isLocalAndExists() { + return file.exists(); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java old mode 100644 new mode 100755 index 7d1ce5d2d..d527f6b93 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FileLocation.java @@ -2,23 +2,9 @@ * 11/13/2008 * * FileLocation.java - Holds the location of a local or remote file. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -26,118 +12,141 @@ import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; +import java.net.MalformedURLException; import java.net.URL; + /** - * Holds the location of a local or remote file. - * + * Holds the location of a local or remote file. This provides a common way + * to read, write, and check properties of both local and remote files. + * * @author Robert Futrell * @version 1.0 */ public abstract class FileLocation { - /** - * Creates a {@link FileLocation} instance for the specified local file. - * - * @param fileFullPath - * The full path to a local file. - * @return The file's location. - */ - public static FileLocation create(String fileFullPath) { - return new FileFileLocation(new File(fileFullPath)); - } - - /** - * Creates a {@link FileLocation} instance for the specified local file. - * - * @param file - * A local file. - * @return The file's location. - */ - public static FileLocation create(File file) { - return new FileFileLocation(file); - } - - /** - * Creates a {@link FileLocation} instance for the specified file. - * - * @param url - * The URL of a file. - * @return The file's location. - */ - public static FileLocation create(URL url) { - if ("file".equalsIgnoreCase(url.getProtocol())) { - return new FileFileLocation(new File(url.getPath())); - } - return new URLFileLocation(url); - } - - /** - * Returns the last time this file was modified, or {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value - * cannot be computed (such as for a remote file). - * - * @return The last time this file was modified. - */ - protected abstract long getActualLastModified(); - - /** - * Returns the full path to the file. This will be stripped of sensitive information such as passwords for remote - * files. - * - * @return The full path to the file. - * @see #getFileName() - */ - public abstract String getFileFullPath(); - - /** - * Returns the name of the file. - * - * @return The name of the file. - * @see #getFileFullPath() - */ - public abstract String getFileName(); - - /** - * Opens an input stream for reading from this file. - * - * @return The input stream. - * @throws IOException - * If the file does not exist, or some other IO error occurs. - */ - protected abstract InputStream getInputStream() throws IOException; - - /** - * Opens an output stream for writing this file. - * - * @return An output stream. - * @throws IOException - * If an IO error occurs. - */ - protected abstract OutputStream getOutputStream() throws IOException; - - /** - * Returns whether this file location is a local file. - * - * @return Whether this is a local file. - * @see #isLocalAndExists() - */ - public abstract boolean isLocal(); - - /** - * Returns whether this file location is a local file that already exists. - * - * @return Whether this file is local and actually exists. - * @see #isLocal() - */ - public abstract boolean isLocalAndExists(); - - /** - * Returns whether this file location is a remote location. - * - * @return Whether this is a remote file location. - */ - public boolean isRemote() { - return !isLocal(); - } - -} \ No newline at end of file + + /** + * Creates a {@link FileLocation} instance for the specified local file. + * + * @param fileFullPath The full path to a local file. + * @return The file's location. + */ + public static FileLocation create(String fileFullPath) { + if (fileFullPath.startsWith("http://") || + fileFullPath.startsWith("https://") || + fileFullPath.startsWith("ftp://")) { + try { + return new URLFileLocation(new URL(fileFullPath)); + } catch (MalformedURLException mue) { + throw new IllegalArgumentException( + "Not a valid URL: " + fileFullPath, mue); + } + } + return new FileFileLocation(new File(fileFullPath)); + } + + + /** + * Creates a {@link FileLocation} instance for the specified local file. + * + * @param file A local file. + * @return The file's location. + */ + public static FileLocation create(File file) { + return new FileFileLocation(file); + } + + + /** + * Creates a {@link FileLocation} instance for the specified file. + * + * @param url The URL of a file. + * @return The file's location. + */ + public static FileLocation create(URL url) { + if ("file".equalsIgnoreCase(url.getProtocol())) { + return new FileFileLocation(new File(url.getPath())); + } + return new URLFileLocation(url); + } + + + /** + * Returns the last time this file was modified, or + * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value cannot be + * computed (such as for a remote file). + * + * @return The last time this file was modified. + */ + protected abstract long getActualLastModified(); + + + /** + * Returns the full path to the file. This will be stripped of + * sensitive information such as passwords for remote files. + * + * @return The full path to the file. + * @see #getFileName() + */ + public abstract String getFileFullPath(); + + + /** + * Returns the name of the file. + * + * @return The name of the file. + * @see #getFileFullPath() + */ + public abstract String getFileName(); + + + /** + * Opens an input stream for reading from this file. + * + * @return The input stream. + * @throws IOException If the file does not exist, or some other IO error + * occurs. + */ + protected abstract InputStream getInputStream() throws IOException; + + + /** + * Opens an output stream for writing this file. + * + * @return An output stream. + * @throws IOException If an IO error occurs. + */ + protected abstract OutputStream getOutputStream() throws IOException; + + + /** + * Returns whether this file location is a local file. + * + * @return Whether this is a local file. + * @see #isLocalAndExists() + */ + public abstract boolean isLocal(); + + + /** + * Returns whether this file location is a local file that already + * exists. + * + * @return Whether this file is local and actually exists. + * @see #isLocal() + */ + public abstract boolean isLocalAndExists(); + + + /** + * Returns whether this file location is a remote location. + * + * @return Whether this is a remote file location. + */ + public boolean isRemote() { + return !isLocal(); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FoldingAwareIconRowHeader.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FoldingAwareIconRowHeader.java new file mode 100755 index 000000000..d497e9d69 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/FoldingAwareIconRowHeader.java @@ -0,0 +1,251 @@ +/* + * 03/07/2012 + * + * FoldingAwareIconRowHeader - Icon row header that paints itself correctly + * even when code folding is enabled. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Point; +import javax.swing.Icon; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; + +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rtextarea.GutterIconInfo; +import org.fife.ui.rtextarea.IconRowHeader; + + +/** + * A row header component that takes code folding into account when painting + * itself. + * + * @author Robert Futrell + * @version 1.0 + */ +public class FoldingAwareIconRowHeader extends IconRowHeader { + + + /** + * Constructor. + * + * @param textArea The parent text area. + */ + public FoldingAwareIconRowHeader(RSyntaxTextArea textArea) { + super(textArea); + } + + + /** + * {@inheritDoc} + */ + @Override + protected void paintComponent(Graphics g) { + + // When line wrap is not enabled, take the faster code path. + if (textArea==null) { + return; + } + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + FoldManager fm = rsta.getFoldManager(); + if (!fm.isCodeFoldingSupportedAndEnabled()) { + super.paintComponent(g); + return; + } + + visibleRect = g.getClipBounds(visibleRect); + if (visibleRect==null) { // ??? + visibleRect = getVisibleRect(); + } + //System.out.println("IconRowHeader repainting: " + visibleRect); + if (visibleRect==null) { + return; + } + paintBackgroundImpl(g, visibleRect); + + if (textArea.getLineWrap()) { + paintComponentWrapped(g); + return; + } + + Document doc = textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + textAreaInsets = textArea.getInsets(textAreaInsets); + if (visibleRect.y-1 && activeLineRangeEnd>-1) { + Color activeLineRangeColor = getActiveLineRangeColor(); + g.setColor(activeLineRangeColor); + try { + + int realY1 = rsta.yForLine(activeLineRangeStart); + if (realY1>-1) { // Not in a collapsed fold... + + int y1 = realY1;//Math.max(y, realY1); + + int y2 = rsta.yForLine(activeLineRangeEnd); + if (y2==-1) { // In a collapsed fold + y2 = y1; + } + y2 += cellHeight - 1; + + if (y2visibleRect.y+visibleRect.height) { + //System.out.println("... nothing to paint, bailing..."); + return; + } + y1 = Math.max(y, realY1); + y2 = Math.min(y2, visibleRect.y+visibleRect.height); + //System.out.println(y1 + "... " + y2 + "; " + realY1 + ", " + visibleRect); + + int j = y1; + while (j<=y2) { + int yEnd = Math.min(y2, j+getWidth()); + int xEnd = yEnd-j; + g.drawLine(0,j, xEnd,yEnd); + j += 2; + } + + int i = 2; + while (i=y && realY1=y && y2=0; i--) { // Last to first + GutterIconInfo ti = getTrackingIcon(i); + int offs = ti.getMarkedOffset(); + if (offs>=0 && offs<=doc.getLength()) { + int line = root.getElementIndex(offs); + if (line<=lastLine && line>=topLine) { + try { + Icon icon = ti.getIcon(); + if (icon!=null) { + int lineY = rsta.yForLine(line); + if (lineY>=y && lineY<=visibleRect.y+visibleRect.height) { + int y2 = lineY + (cellHeight-icon.getIconHeight())/2; + icon.paintIcon(this, g, 0, y2); + lastLine = line-1; // Paint only 1 icon per line + } + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + else if (line=0; i--) { // Last to first + GutterIconInfo ti = getTrackingIcon(i); + Icon icon = ti.getIcon(); + if (icon!=null) { + int iconH = icon.getIconHeight(); + int offs = ti.getMarkedOffset(); + if (offs>=0 && offs<=doc.getLength()) { + int line = root.getElementIndex(offs); + if (line<=lastLine && line>=topLine) { + try { + int lineY = rsta.yForLine(line); + if (lineY<=bottomY && (lineY+iconH>=topY)) { + int y2 = lineY + (cellHeight-iconH)/2; + ti.getIcon().paintIcon(this, g, 0, y2); + lastLine = line-1; // Paint only 1 icon per line + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + else if (line' }; + + private static final Set TAGS_REQUIRING_CLOSING = + getRequiredClosingTags(); + + public static final Set getRequiredClosingTags() { + final String[] tags = { + "html", + "head", + "title", + "style", + "script", + "noscript", + "body", + "section", + "nav", + "article", + "aside", + "h1", + "h2", + "h3", + "h4", + "h5", + "h6", + "header", + "footer", + "address", + "pre", + "dialog", + "blockquote", + "ol", + "ul", + "dl", + "a", + "q", + "cite", + "em", + "strong", + "small", + "mark", + "dfn", + "abbr", + "time", + "progress", + "meter", + "code", + "var", + "samp", + "kbd", + "sub", + "sup", + "span", + "i", + "b", + "bdo", + "ruby", + "rt", + "rp", + "ins", + "del", + "figure", + "iframe", + "object", + "video", + "audio", + "canvas", + "map", + "table", + "caption", + "form", + "fieldset", + "label", + "button", + "select", + "datalist", + "textarea", + "output", + "details", + "bb", + "menu", + "legend", + "div", + // Obsolete elements + "acronym", + "applet", + "big", + "blink", + "center", + "dir", + "font", + "frame", + "frameset", + "isindex", + "listing", + "marquee", + "nobr", + "noembed", + "noframes", + "plaintext", + "s", + "spacer", + "strike", + "tt", + "u", + "xmp", + }; + return new HashSet<>(Arrays.asList(tags)); + } + + + /** + * If the caret is inside of a tag, this method returns the token + * representing the tag name; otherwise, null is returned.

+ * + * Currently, this method only checks for tag names on the same line as + * the caret, for simplicity. In the future it could check prior lines + * until the tag name is found. + * + * @param textArea The text area. + * @param occurrenceMarker The occurrence marker. + * @return The token to mark occurrences of. Note that, if the + * specified occurrence marker identifies tokens other than + * tag names, these other element types may be returned. + */ + public static final Token getTagNameTokenForCaretOffset( + RSyntaxTextArea textArea, OccurrenceMarker occurrenceMarker) { + + // Get the tag name token. + // For now, we only check for tags on the current line, for simplicity. + + int dot = textArea.getCaretPosition(); + Token t = textArea.getTokenListForLine(textArea.getCaretLineNumber()); + Token toMark = null; + + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_NAME) { + toMark = t; + } + // Check for the token containing the caret before checking + // if it's the close token. + if (t.getEndOffset()==dot || t.containsPosition(dot)) { + // Some languages, like PHP, mark functions/variables (PHP, + // JavaScirpt) as well as HTML tags. + if (occurrenceMarker.isValidType(textArea, t) && + t.getType()!=Token.MARKUP_TAG_NAME) { + return t; + } + if (t.containsPosition(dot)) { + break; + } + } + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('>') || t.is(TAG_SELF_CLOSE)) { + toMark = null; + } + } + t = t.getNextToken(); + } + + return toMark; + + } + + + /** + * {@inheritDoc} + */ + @Override + public Token getTokenToMark(RSyntaxTextArea textArea) { + return getTagNameTokenForCaretOffset(textArea, this); + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isValidType(RSyntaxTextArea textArea, Token t) { + return textArea.getMarkOccurrencesOfTokenType(t.getType()); + } + + + /** + * {@inheritDoc} + */ + @Override + public void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { + + if (t.getType()!=Token.MARKUP_TAG_NAME) { + DefaultOccurrenceMarker.markOccurrencesOfToken(doc, t, h, p); + return; + } + + String lexemeStr = t.getLexeme(); + char[] lexeme = lexemeStr.toCharArray(); + lexemeStr = lexemeStr.toLowerCase(); + int tokenOffs = t.getOffset(); + Element root = doc.getDefaultRootElement(); + int lineCount = root.getElementCount(); + int curLine = root.getElementIndex(t.getOffset()); + int depth = 0; + + // For now, we only check for tags on the current line, for + // simplicity. Tags spanning multiple lines aren't common anyway. + boolean found = false; + boolean forward = true; + t = doc.getTokenListForLine(curLine); + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('<') && t.getOffset()+1==tokenOffs) { + // Don't try to match a tag that is optionally closed (or + // closing is forbidden entirely). + if (TAGS_REQUIRING_CLOSING.contains(lexemeStr)) { + found = true; + } + break; + } + else if (t.is(CLOSE_TAG_START) && t.getOffset()+2==tokenOffs) { + // Searching backward, we assume we can find the opening + // tag. Don't really care if it's valid or not. + found = true; + forward = false; + break; + } + } + t = t.getNextToken(); + } + + if (!found) { + return; + } + + if (forward) { + + t = t.getNextToken().getNextToken(); + + do { + + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.is(CLOSE_TAG_START)) { + Token match = t.getNextToken(); + if (match!=null && match.is(lexeme)) { + if (depth>0) { + depth--; + } + else { + try { + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + return; // We're done! + } + } + } + else if (t.isSingleChar('<')) { + t = t.getNextToken(); + if (t!=null && t.is(lexeme)) { + depth++; + } + } + } + t = t==null ? null : t.getNextToken(); + } + + if (++curLine openCloses = new ArrayList<>(); + boolean inPossibleMatch = false; + t = doc.getTokenListForLine(curLine); + final int endBefore = tokenOffs - 2; // Stop before "')) { + inPossibleMatch = false; + } + else if (inPossibleMatch && t.is(TAG_SELF_CLOSE)) { + openCloses.remove(openCloses.size()-1); + inPossibleMatch = false; + } + else if (t.is(CLOSE_TAG_START)) { + Token next = t.getNextToken(); + if (next!=null) { + // Invalid XML might not have a match + if (next.is(lexeme)) { + openCloses.add(new Entry(false, next)); + } + t = next; + } + } + } + t = t.getNextToken(); + } + + for (int i=openCloses.size()-1; i>=0; i--) { + Entry entry = openCloses.get(i); + depth += entry.open ? -1 : 1; + if (depth==-1) { + try { + Token match = entry.t; + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + openCloses.clear(); + return; + } + } + + openCloses.clear(); + if (--curLine>=0) { + t = doc.getTokenListForLine(curLine); + } + + } while (curLine>=0); + + + } + + } + + + /** + * Used internally when searching backward for a matching "open" tag. + */ + private static class Entry { + + private boolean open; + private Token t; + + Entry(boolean open, Token t) { + this.open = open; + this.t = t; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/HtmlUtil.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/HtmlUtil.java new file mode 100644 index 000000000..364a15a51 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/HtmlUtil.java @@ -0,0 +1,136 @@ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.*; + +/** + * Utility methods useful when generating HTML representations of RSTA content. + */ +public final class HtmlUtil { + + private HtmlUtil() { + // Do nothing (comment for Sonar) + } + + + /** + * Returns a string with characters that are special to HTML (such as + * <, > and &) replaced + * by their HTML escape sequences. + * + * @param s The input string. + * @param newlineReplacement What to replace newline characters with. + * If this is null, they are simply removed. + * @param inPreBlock Whether this HTML will be in within pre + * tags. If this is true, spaces will be kept as-is; + * otherwise, they will be converted to " ". + * @return The escaped version of s. + */ + public static String escapeForHtml(String s, String newlineReplacement, + boolean inPreBlock) { + + if (newlineReplacement==null) { + newlineReplacement = ""; + } + String tabString = " "; + + StringBuilder sb = new StringBuilder(); + + for (int i=0; i': + sb.append(">"); + break; + default: + sb.append(ch); + break; + } + } + + return sb.toString(); + } + + + /** + * Returns a hex string for the specified color, suitable for HTML. + * + * @param c The color. + * @return The string representation, in the form "#rrggbb", + * or null if c is null. + */ + public static String getHexString(Color c) { + + if (c == null) { + return null; + } + + StringBuilder sb = new StringBuilder("#"); + + int r = c.getRed(); + if (r<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(r)); + int g = c.getGreen(); + if (g<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(g)); + int b = c.getBlue(); + if (b<16) { + sb.append('0'); + } + sb.append(Integer.toHexString(b)); + + return sb.toString(); + } + + public static String getTextAsHtml(RSyntaxTextArea textArea, int start, int end) { + + // Create the selection as HTML + StringBuilder sb = new StringBuilder("

");
+		}
+
+		Token token = textArea.getTokenListFor(start, end);
+		for (Token t = token; t != null; t = t.getNextToken()) {
+
+			if (t.isPaintable()) {
+
+				if (t.isSingleChar('\n')) {
+					sb.append("
"); + } + else { + sb.append(TokenUtils.tokenToHtml(textArea, t)); + } + } + } + + sb.append("
"); + return sb.toString(); + } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGenerator.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGenerator.java new file mode 100755 index 000000000..08caf51e1 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGenerator.java @@ -0,0 +1,49 @@ +/* + * 02/16/2012 + * + * Copyright (C) 2013 Robert Futrell + * robert_futrell at users.sourceforge.net + * http://fifesoft.com/rsyntaxtextarea + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + + +/** + * Generates hyperlinks in a document. If one of these is installed on an + * RSyntaxTextArea it is queried when the mouse is moved and + * hyperlinks are enabled. If the user is not hovering over a "real" hyperlink + * (e.g. "http://www.google.com"), the link generator is asked if a text region + * at the mouse position should be considered a hyperlink. If so, a result + * object is returned, describing exactly what region of text is the link, and + * where it goes to.

+ * + * This interface is typically used by applications providing advanced support + * for programming languages, such as IDEs. For example, an implementation of + * this class could identify the token under the mouse position as a "variable," + * and the hyperlink returned would select the variable's declaration in the + * document. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface LinkGenerator { + + + /** + * If a region of text under the mouse position should be considered a + * hyperlink, a result object is returned. This object describes what + * region of text is the link, and what action to perform if the link is + * clicked. + * + * @param textArea The text component. + * @param offs The offset in the document under the mouse position. + * @return The link information, or null if no link is at the + * specified offset. + */ + LinkGeneratorResult isLinkAtOffset(RSyntaxTextArea textArea, int offs); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGeneratorResult.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGeneratorResult.java new file mode 100755 index 000000000..c2ec5f65f --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/LinkGeneratorResult.java @@ -0,0 +1,53 @@ +/* + * 02/16/2012 + * + * Copyright (C) 2013 Robert Futrell + * robert_futrell at users.sourceforge.net + * http://fifesoft.com/rsyntaxtextarea + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.event.HyperlinkEvent; + + +/** + * A result object from a {@link LinkGenerator}. Implementations of this class + * specify what action to execute when the user clicks on the "link" specified + * by the LinkGenerator. Typically, this will do something like + * select another region of text in the document (the declaration of the + * variable at the mouse position), or open another file in the parent + * application, etc. + * + * @author Robert Futrell + * @version 1.0 + * @see SelectRegionLinkGeneratorResult + */ +public interface LinkGeneratorResult { + + + /** + * Executes the action associated with this object. If the result is a + * URL to open, a standard hyperlink event can be returned. Alternatively, + * null can be returned and the action performed in this + * method itself. + * + * @return The hyperlink event to broadcast from the text area, or + * null if the action's behavior occurs in this method + * directly. + */ + HyperlinkEvent execute(); + + + /** + * Returns the starting offset of the link specified by the parent + * LinkGenerator. + * + * @return The offset. + */ + int getSourceOffset(); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesHighlightPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesHighlightPainter.java deleted file mode 100644 index 2e0e32734..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesHighlightPainter.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * 10/01/2009 - * - * MarkOccurrencesHighlightPainter.java - Renders "marked occurrences." - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -//import java.awt.BasicStroke; -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.Rectangle; -import java.awt.Shape; -import javax.swing.text.BadLocationException; -import javax.swing.text.JTextComponent; -import javax.swing.text.Position; -import javax.swing.text.View; - -/** - * Highlight painter that renders "mark occurrences." - * - * @author Robert Futrell - * @version 1.0 - */ -/* - * NOTE: This implementation is a "hack" so typing at the "end" of the highlight does not extend it to include the - * newly-typed chars, which is the standard behavior of Swing Highlights. - */ -class MarkOccurrencesHighlightPainter extends ChangeableColorHighlightPainter { - - private Color borderColor; - - // private BasicStroke stroke; - - /** - * Constructor. - * - * @param color - * The color to draw the bounding boxes with. This cannot be null. - */ - public MarkOccurrencesHighlightPainter() { - super(Color.BLUE); - // float[] dash = { 6, 4 }; - // stroke = new BasicStroke(1, BasicStroke.CAP_BUTT, - // BasicStroke.JOIN_MITER, 1, dash, 0); - } - - /** - * {@inheritDoc} - */ - public Shape paintLayer(Graphics g, int p0, int p1, Shape viewBounds, - JTextComponent c, View view) { - - g.setColor(getColor()); - p1++; // Workaround for Java Highlight issues. - - // This special case isn't needed for most standard Swing Views (which - // always return a width of 1 for modelToView() calls), but it is - // needed for RSTA views, which actually return the width of chars for - // modelToView calls. But this should be faster anyway, as we - // short-circuit and do only one modelToView() for one offset. - if (p0 == p1) { - try { - Shape s = view.modelToView(p0, viewBounds, - Position.Bias.Forward); - Rectangle r = s.getBounds(); - g.drawLine(r.x, r.y, r.x, r.y + r.height); - return r; - } catch (BadLocationException ble) { - ble.printStackTrace(); // Never happens - return null; - } - } - - if (p0 == view.getStartOffset() && p1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - Rectangle alloc; - if (viewBounds instanceof Rectangle) { - alloc = (Rectangle) viewBounds; - } else { - alloc = viewBounds.getBounds(); - } - g.fillRect(alloc.x, alloc.y, alloc.width, alloc.height); - return alloc; - } - - // Should only render part of View. - Graphics2D g2d = (Graphics2D) g; - try { - // --- determine locations --- - Shape shape = view.modelToView(p0, Position.Bias.Forward, p1, - Position.Bias.Backward, viewBounds); - Rectangle r = (shape instanceof Rectangle) ? (Rectangle) shape - : shape.getBounds(); - g2d.fillRect(r.x, r.y, r.width, r.height); - g2d.setColor(borderColor); - // Stroke oldStroke = g2d.getStroke(); - // g2d.setStroke(stroke); - g2d.drawRect(r.x, r.y, r.width - 1, r.height - 1); - // g2d.setStroke(oldStroke); - return r; - } catch (BadLocationException e) { // Never happens - e.printStackTrace(); - return null; - } - - } - - /** - * {@inheritDoc} - */ - public void setColor(Color c) { - super.setColor(c); - borderColor = c.darker(); - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java old mode 100644 new mode 100755 index b497b1e61..736125807 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MarkOccurrencesSupport.java @@ -3,288 +3,289 @@ * * MarkOccurrencesSupport.java - Handles marking all occurrences of the * currently selected identifier in a text area. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; -import java.awt.Paint; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.List; + import javax.swing.Timer; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; -import javax.swing.text.BadLocationException; import javax.swing.text.Caret; +import org.fife.ui.rtextarea.SmartHighlightPainter; + + /** - * Marks all occurrences of the token at the current caret position, if it is an identifier. - * + * Marks all occurrences of the token at the current caret position, if it is + * an identifier. + * * @author Robert Futrell * @version 1.0 + * @see OccurrenceMarker */ class MarkOccurrencesSupport implements CaretListener, ActionListener { - private RSyntaxTextArea textArea; - private Timer timer; - private MarkOccurrencesHighlightPainter p; - private List tags; - - /** - * The default delay. - */ - private static final int DEFAULT_DELAY_MS = 1000; - - /** - * Constructor. Creates a listener with a 1 second delay. - */ - public MarkOccurrencesSupport() { - this(DEFAULT_DELAY_MS); - } - - /** - * Constructor. - * - * @param delay - * The delay between when the caret last moves and when the text should be scanned for matching - * occurrences. This should be in milliseconds. - */ - public MarkOccurrencesSupport(int delay) { - this(delay, new Color(224, 224, 224)); - } - - /** - * Constructor. - * - * @param delay - * The delay between when the caret last moves and when the text should be scanned for matching - * occurrences. This should be in milliseconds. - * @param color - * The color to use to mark the occurrences. This cannot be null. - */ - public MarkOccurrencesSupport(int delay, Color color) { - timer = new Timer(delay, this); - timer.setRepeats(false); - p = new MarkOccurrencesHighlightPainter(); - setColor(color); - tags = new ArrayList(); - } - - /** - * Called after the caret has been moved and a fixed time delay has elapsed. This locates and highlights all - * occurrences of the identifier at the caret position, if any. - * - * @param e - * The event. - */ - public void actionPerformed(ActionEvent e) { - - // Don't do anything if they are selecting text. - Caret c = textArea.getCaret(); - if (c.getDot() != c.getMark()) { - return; - } - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - // long time = System.currentTimeMillis(); - doc.readLock(); - try { - - // Remove old highlights - removeHighlights(); - - // Get the token at the caret position. - int line = textArea.getCaretLineNumber(); - Token tokenList = textArea.getTokenListForLine(line); - int dot = c.getDot(); - Token t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); - if (t == null /* EOL */|| !isValidType(t) || isNonWordChar(t)) { - // Try to the "left" of the caret. - dot--; - try { - if (dot >= textArea.getLineStartOffset(line)) { - t = RSyntaxUtilities.getTokenAtOffset(tokenList, dot); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); // Never happens - } - } - - // Add new highlights if an identifier is selected. - if (t != null && isValidType(t) && !isNonWordChar(t)) { - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) textArea. - getHighlighter(); - String lexeme = t.getLexeme(); - int type = t.type; - for (int i = 0; i < textArea.getLineCount(); i++) { - Token temp = textArea.getTokenListForLine(i); - while (temp != null && temp.isPaintable()) { - if (temp.is(type, lexeme)) { - try { - int end = temp.offset + temp.textCount; - Object tag = h.addMarkedOccurrenceHighlight(temp.offset, end, p); - // end--; // HACK to prevent typed chars from being added - // Object tag = h.addHighlight(temp.offset, end,p); - tags.add(tag); - // // HACK again, to ensure repaint of last char rendered. - // textArea.getUI().damageRange(textArea, end+1, end+1); - } catch (BadLocationException ble) { - ble.printStackTrace(); // Never happens - } - } - temp = temp.getNextToken(); - } - } - } - - } finally { - doc.readUnlock(); - // time = System.currentTimeMillis() - time; - // System.out.println("Took: " + time + " ms"); - } - - textArea.fireMarkedOccurrencesChanged(); - - } - - /** - * Called when the caret moves in the text area. - * - * @param e - * The event. - */ - public void caretUpdate(CaretEvent e) { - timer.restart(); - } - - /** - * Returns the color being used to mark occurrences. - * - * @return The color being used. - * @see #setColor(Paint) - */ - public Color getColor() { - return p.getColor(); - } - - /** - * Returns the delay, in milliseconds. - * - * @return The delay. - * @see #setDelay(int) - */ - public int getDelay() { - return timer.getDelay(); - } - - /** - * Installs this listener on a text area. If it is already installed on another text area, it is uninstalled first. - * - * @param textArea - * The text area to install on. - */ - public void install(RSyntaxTextArea textArea) { - if (this.textArea != null) { - uninstall(); - } - this.textArea = textArea; - textArea.addCaretListener(this); - } - - /** - * Returns whether the specified token is a single non-word char (e.g. not in [A-Za-z]. This is a HACK to - * work around the fact that many standard token makers return things like semicolons and periods as - * {@link Token#IDENTIFIER}s just to make the syntax highlighting coloring look a little better. - * - * @param t - * The token to check. This cannot be null. - * @return Whether the token is a single non-word char. - */ - private static final boolean isNonWordChar(Token t) { - return t.textCount == 1 && - !RSyntaxUtilities.isLetter(t.text[t.textOffset]); - } - - /** - * Returns whether the specified token is a type that we can do a "mark occurrences" on. - * - * @param t - * The token. - * @return Whether we should mark all occurrences of this token. - */ - private boolean isValidType(Token t) { - return textArea.getMarkOccurrencesOfTokenType(t.type); - } - - /** - * Removes all highlights added to the text area by this listener. - */ - private void removeHighlights() { - if (textArea != null) { - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - for (Object tag : tags) { - h.removeMarkOccurrencesHighlight(tag); - } - } - tags.clear(); - } - - /** - * Sets the color to use when marking occurrences. - * - * @param color - * The color to use. - * @see #getColor() - */ - public void setColor(Color color) { - p.setColor(color); - if (textArea != null) { - removeHighlights(); - caretUpdate(null); // Force a highlight repaint. - } - } - - /** - * Sets the delay between the last caret position change and when the text is scanned for matching identifiers. A - * delay is needed to prevent repeated scanning while the user is typing. - * - * @param delay - * The new delay. - * @see #getDelay() - */ - public void setDelay(int delay) { - timer.setDelay(delay); - } - - /** - * Uninstalls this listener from the current text area. Does nothing if it not currently installed on any text area. - * - * @see #install(RSyntaxTextArea) - */ - public void uninstall() { - if (textArea != null) { - removeHighlights(); - textArea.removeCaretListener(this); - } - } - -} \ No newline at end of file + private RSyntaxTextArea textArea; + private Timer timer; + private SmartHighlightPainter p; + + /** + * The default color used to mark occurrences. + */ + static final Color DEFAULT_COLOR = new Color(224, 224, 224); + + /** + * The default delay. + */ + static final int DEFAULT_DELAY_MS = 1000; + + + /** + * Constructor. Creates a listener with a 1 second delay. + */ + MarkOccurrencesSupport() { + this(DEFAULT_DELAY_MS); + } + + + /** + * Constructor. + * + * @param delay The delay between when the caret last moves and when the + * text should be scanned for matching occurrences. This should + * be in milliseconds. + */ + MarkOccurrencesSupport(int delay) { + this(delay, DEFAULT_COLOR); + } + + + /** + * Constructor. + * + * @param delay The delay between when the caret last moves and when the + * text should be scanned for matching occurrences. This should + * be in milliseconds. + * @param color The color to use to mark the occurrences. This cannot be + * null. + */ + MarkOccurrencesSupport(int delay, Color color) { + timer = new Timer(delay, this); + timer.setRepeats(false); + p = new SmartHighlightPainter(); + setColor(color); + } + + + /** + * Called after the caret has been moved and a fixed time delay has + * elapsed. This locates and highlights all occurrences of the identifier + * at the caret position, if any.

+ * + * Callers should not call this method directly, but should rather prefer + * {@link #doMarkOccurrences()} to mark occurrences. + * + * @param e The event. + * @see #doMarkOccurrences() + */ + @Override + public void actionPerformed(ActionEvent e) { + + // Don't do anything if they are selecting text. + Caret c = textArea.getCaret(); + if (c.getDot()!=c.getMark()) { + return; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + OccurrenceMarker occurrenceMarker = doc.getOccurrenceMarker(); + boolean occurrencesChanged = false; + + if (occurrenceMarker!=null) { + + doc.readLock(); + try { + + Token t = occurrenceMarker.getTokenToMark(textArea); + + if (t!=null && occurrenceMarker.isValidType(textArea, t) && + !RSyntaxUtilities.isNonWordChar(t)) { + clear(); + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + occurrenceMarker.markOccurrences(doc, t, h, p); + //textArea.repaint(); + // TODO: Do a textArea.repaint() instead of repainting each + // marker as it's added if count is huge + occurrencesChanged = true; + } else { + clear(); + } + + } finally { + doc.readUnlock(); + //time = System.currentTimeMillis() - time; + //System.out.println("MarkOccurrencesSupport took: " + time + " ms"); + } + + } + + if (occurrencesChanged) { + textArea.fireMarkedOccurrencesChanged(); + } + + } + + + /** + * Called when the caret moves in the text area. + * + * @param e The event. + */ + @Override + public void caretUpdate(CaretEvent e) { + timer.restart(); + } + + + /** + * Removes all highlights added to the text area by this listener. + */ + void clear() { + if (textArea!=null) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + h.clearMarkOccurrencesHighlights(); + } + } + + + /** + * Immediately marks all occurrences of the token at the current caret + * position. + */ + public void doMarkOccurrences() { + timer.stop(); + actionPerformed(null); + } + + + /** + * Returns the color being used to mark occurrences. + * + * @return The color being used. + * @see #setColor(Color) + */ + public Color getColor() { + return (Color)p.getPaint(); + } + + + /** + * Returns the delay, in milliseconds. + * + * @return The delay. + * @see #setDelay(int) + */ + public int getDelay() { + return timer.getDelay(); + } + + + /** + * Returns whether a border is painted around marked occurrences. + * + * @return Whether a border is painted. + * @see #setPaintBorder(boolean) + * @see #getColor() + */ + public boolean getPaintBorder() { + return p.getPaintBorder(); + } + + + /** + * Installs this listener on a text area. If it is already installed on + * another text area, it is uninstalled first. + * + * @param textArea The text area to install on. + */ + public void install(RSyntaxTextArea textArea) { + if (this.textArea!=null) { + uninstall(); + } + this.textArea = textArea; + textArea.addCaretListener(this); + if (textArea.getMarkOccurrencesColor()!=null) { + setColor(textArea.getMarkOccurrencesColor()); + } + } + + + /** + * Sets the color to use when marking occurrences. + * + * @param color The color to use. + * @see #getColor() + * @see #setPaintBorder(boolean) + */ + public void setColor(Color color) { + p.setPaint(color); + if (textArea!=null) { + clear(); + caretUpdate(null); // Force a highlight repaint. + } + } + + + /** + * Sets the delay between the last caret position change and when the + * text is scanned for matching identifiers. A delay is needed to prevent + * repeated scanning while the user is typing. + * + * @param delay The new delay. + * @see #getDelay() + */ + public void setDelay(int delay) { + timer.setInitialDelay(delay); + } + + + /** + * Toggles whether a border is painted around marked highlights. + * + * @param paint Whether to paint a border. + * @see #getPaintBorder() + * @see #setColor(Color) + */ + public void setPaintBorder(boolean paint) { + if (paint!=p.getPaintBorder()) { + p.setPaintBorder(paint); + if (textArea!=null) { + textArea.repaint(); + } + } + } + + + /** + * Uninstalls this listener from the current text area. Does nothing if + * it not currently installed on any text area. + * + * @see #install(RSyntaxTextArea) + */ + public void uninstall() { + if (textArea!=null) { + clear(); + textArea.removeCaretListener(this); + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MatchedBracketPopup.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MatchedBracketPopup.java new file mode 100755 index 000000000..a40748d44 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/MatchedBracketPopup.java @@ -0,0 +1,245 @@ +/* + * 07/03/2016 + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Point; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.BorderFactory; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JWindow; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.focusabletip.TipUtil; + + +/** + * A tool tip-like popup that shows the line of code containing the bracket + * matched to that at the caret position, if it is scrolled out of the user's + * viewport. + * + * @author Robert Futrell + * @version 1.0 + */ +class MatchedBracketPopup extends JWindow { + + private RSyntaxTextArea textArea; + + private transient Listener listener; + + private static final int LEFT_EMPTY_BORDER = 5; + + + MatchedBracketPopup(Window parent, RSyntaxTextArea textArea, int + offsToRender) { + + super(parent); + this.textArea = textArea; + JPanel cp = new JPanel(new BorderLayout()); + cp.setBorder(BorderFactory.createCompoundBorder( + TipUtil.getToolTipBorder(), + BorderFactory.createEmptyBorder(2, LEFT_EMPTY_BORDER, 5, 5))); + cp.setBackground(TipUtil.getToolTipBackground()); + setContentPane(cp); + + cp.add(new JLabel(getText(offsToRender))); + + installKeyBindings(); + listener = new Listener(); + setLocation(); + + } + + + /** + * Overridden to ensure this popup stays in a specific size range. + */ + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + if (size!=null) { + size.width = Math.min(size.width, 800); + } + return size; + } + + + private String getText(int offsToRender) { + + int line = 0; + try { + line = textArea.getLineOfOffset(offsToRender); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + return null; + } + + int lastLine = line + 1; + + // Render prior line if the open brace line has no other text on it + if (line > 0) { + try { + int startOffs = textArea.getLineStartOffset(line); + int length = textArea.getLineEndOffset(line) - startOffs; + String text = textArea.getText(startOffs, length); + if (text.trim().length() == 1) { + line--; + } + } catch (BadLocationException ble) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + ble.printStackTrace(); + } + } + + Font font = textArea.getFontForTokenType(TokenTypes.IDENTIFIER); + StringBuilder sb = new StringBuilder(""); + sb.append(""); + while (line < lastLine) { + Token t = textArea.getTokenListForLine(line); + while (t!=null && t.isPaintable()) { + t.appendHTMLRepresentation(sb, textArea, true, true); + t = t.getNextToken(); + } + sb.append("
"); + line++; + } + + return sb.toString(); + + } + + + /** + * Adds key bindings to this popup. + */ + private void installKeyBindings() { + + InputMap im = getRootPane().getInputMap( + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap am = getRootPane().getActionMap(); + + KeyStroke escapeKS = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + im.put(escapeKS, "onEscape"); + am.put("onEscape", new EscapeAction()); + } + + + /** + * Positions this popup to be in the top right-hand corner of the parent + * editor. + */ + private void setLocation() { + Point topLeft = textArea.getVisibleRect().getLocation(); + SwingUtilities.convertPointToScreen(topLeft, textArea); + topLeft.y = Math.max(topLeft.y - 24, 0); + setLocation(topLeft.x - LEFT_EMPTY_BORDER, topLeft.y); + } + + + /** + * Action performed when Escape is pressed in this popup. + */ + private class EscapeAction extends AbstractAction { + + @Override + public void actionPerformed(ActionEvent e) { + listener.uninstallAndHide(); + } + + } + + + /** + * Listens for events in this popup. + */ + private class Listener extends WindowAdapter implements ComponentListener { + + Listener() { + + addWindowFocusListener(this); + + // If anything happens to the "parent" window, hide this popup + Window parent = (Window)getParent(); + parent.addWindowFocusListener(this); + parent.addWindowListener(this); + parent.addComponentListener(this); + + } + + @Override + public void componentResized(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentMoved(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentShown(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void componentHidden(ComponentEvent e) { + uninstallAndHide(); + } + + @Override + public void windowActivated(WindowEvent e) { + checkForParentWindowEvent(e); + } + + @Override + public void windowLostFocus(WindowEvent e) { + uninstallAndHide(); + } + + @Override + public void windowIconified(WindowEvent e) { + checkForParentWindowEvent(e); + } + + private boolean checkForParentWindowEvent(WindowEvent e) { + if (e.getSource()==getParent()) { + uninstallAndHide(); + return true; + } + return false; + } + + private void uninstallAndHide() { + Window parent = (Window)getParent(); + parent.removeWindowFocusListener(this); + parent.removeWindowListener(this); + parent.removeComponentListener(this); + removeWindowFocusListener(this); + setVisible(false); + dispose(); + } + + } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java new file mode 100755 index 000000000..b9b642040 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/OccurrenceMarker.java @@ -0,0 +1,63 @@ +/* + * 03/09/2013 + * + * OccurrenceMarker - Marks occurrences of the current token. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * An OccurrenceMarker is called when the caret stops moving after + * a short period. If the current {@link TokenMaker} returns an instance of + * this class, it is told to mark all occurrences of the identifier at the + * caret position. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface OccurrenceMarker { + + + /** + * Returns the token to mark occurrences, of, provided it matches the + * criteria put forth by {@link #isValidType(RSyntaxTextArea, Token)}. + * For most languages, this method should return the token at the caret + * position. + * + * @param textArea The text area. + * @return The token to (possibly) mark occurrences of, or + * null if none. + */ + Token getTokenToMark(RSyntaxTextArea textArea); + + + /** + * Returns whether the specified token is a type that we can do a + * "mark occurrences" of. Typically, this will delegate to + * {@link RSyntaxTextArea#getMarkOccurrencesOfTokenType(int)}. + * + * @param textArea The text area. + * @param t The token. + * @return Whether we should mark all occurrences of this token. + */ + boolean isValidType(RSyntaxTextArea textArea, Token t); + + + /** + * Called when occurrences of a token should be marked. + * + * @param doc The document. + * @param t The document whose relevant occurrences should be marked. + * @param h The highlighter to add the highlights to. + * @param p The painter for the highlights. + */ + void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java old mode 100644 new mode 100755 index 7ba1a5ca4..b977cc5fc --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/ParserManager.java @@ -3,36 +3,26 @@ * * ParserManager.java - Manages the parsing of an RSyntaxTextArea's document, * if necessary. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; +import java.awt.Point; +import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.net.URL; +import java.security.AccessControlException; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.Map; + import javax.swing.Timer; import javax.swing.ToolTipManager; import javax.swing.event.DocumentEvent; @@ -40,619 +30,794 @@ import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.BadLocationException; +import javax.swing.text.Document; import javax.swing.text.Element; import javax.swing.text.Position; -import org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip; import org.fife.ui.rsyntaxtextarea.parser.ParseResult; import org.fife.ui.rsyntaxtextarea.parser.Parser; import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; import org.fife.ui.rsyntaxtextarea.parser.ToolTipInfo; +import org.fife.ui.rtextarea.RDocument; +import org.fife.ui.rtextarea.RTextAreaHighlighter.HighlightInfo; + + /** * Manages running a parser object for an RSyntaxTextArea. - * + * * @author Robert Futrell - * @version 0.8 + * @version 0.9 */ class ParserManager implements DocumentListener, ActionListener, - HyperlinkListener { - - private RSyntaxTextArea textArea; - private List parsers; - private Timer timer; - private boolean running; - private Map noticesToHighlights; - private Parser parserForTip; - private Position firstOffsetModded; - private Position lastOffsetModded; - - /** - * Painter used to underline errors. - */ - private SquiggleUnderlineHighlightPainter parserErrorHighlightPainter = - new SquiggleUnderlineHighlightPainter(Color.RED); - - /** - * If this system property is set to true, debug messages will be printed to stdout to help diagnose - * parsing issues. - */ - private static final String PROPERTY_DEBUG_PARSING = "rsta.debugParsing"; - - private static final boolean DEBUG_PARSING = Boolean.getBoolean( - PROPERTY_DEBUG_PARSING); - - /** - * The default delay between the last key press and when the document is parsed, in milliseconds. - */ - private static final int DEFAULT_DELAY_MS = 1250; - - /** - * Constructor. - * - * @param textArea - * The text area whose document the parser will be parsing. - */ - public ParserManager(RSyntaxTextArea textArea) { - this(DEFAULT_DELAY_MS, textArea); - } - - /** - * Constructor. - * - * @param delay - * The delay between the last key press and when the document is parsed. - * @param textArea - * The text area whose document the parser will be parsing. - */ - public ParserManager(int delay, RSyntaxTextArea textArea) { - this.textArea = textArea; - textArea.getDocument().addDocumentListener(this); - parsers = new ArrayList(1); // Usually small - timer = new Timer(delay, this); - timer.setRepeats(false); - running = true; - } - - /** - * Called when the timer fires (e.g. it's time to parse the document). - * - * @param e - * The event. - */ - public void actionPerformed(ActionEvent e) { - - // Sanity check - should have >1 parser if event is fired. - int parserCount = getParserCount(); - if (parserCount == 0) { - return; - } - - long begin = 0; - if (DEBUG_PARSING) { - begin = System.currentTimeMillis(); - } - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - - Element root = doc.getDefaultRootElement(); - int firstLine = firstOffsetModded == null ? 0 : root.getElementIndex(firstOffsetModded.getOffset()); - int lastLine = lastOffsetModded == null ? root.getElementCount() - 1 : root.getElementIndex(lastOffsetModded - .getOffset()); - firstOffsetModded = lastOffsetModded = null; - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: Minimum lines to parse: " + firstLine + "-" + lastLine); - } - - String style = textArea.getSyntaxEditingStyle(); - doc.readLock(); - try { - for (int i = 0; i < parserCount; i++) { - Parser parser = getParser(i); - if (parser.isEnabled()) { - ParseResult res = parser.parse(doc, style); - addParserNoticeHighlights(res); - } - else { - clearParserNoticeHighlights(parser); - } - } - textArea.fireParserNoticesChange(); - } finally { - doc.readUnlock(); - } - - if (DEBUG_PARSING) { - float time = (System.currentTimeMillis() - begin) / 1000f; - System.err.println("Total parsing time: " + time + " seconds"); - } - - } - - /** - * Adds a parser for the text area. - * - * @param parser - * The new parser. If this is null, nothing happens. - * @see #getParser(int) - * @see #removeParser(Parser) - */ - public void addParser(Parser parser) { - if (parser != null && !parsers.contains(parser)) { - if (running) { - timer.stop(); - } - parsers.add(parser); - if (parsers.size() == 1) { - // Okay to call more than once. - ToolTipManager.sharedInstance().registerComponent(textArea); - } - if (running) { - timer.restart(); - } - } - } - - /** - * Adds highlights for a list of parser notices. Any current notices from the same Parser, in the same parsed range, - * are removed. - * - * @param res - * The result of a parsing. - * @see #clearParserNoticeHighlights() - */ - private void addParserNoticeHighlights(ParseResult res) { - - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: Adding parser notices from " + - res.getParser()); - } - - if (noticesToHighlights == null) { - noticesToHighlights = new HashMap(); - } - - removeParserNotices(res); - - List notices = res.getNotices(); - if (notices.size() > 0) { // Guaranteed non-null - - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - - for (Object notice1 : notices) { - ParserNotice notice = (ParserNotice) notice1; - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: ... adding: " + res); - } - try { - Object highlight = null; - if (notice.getShowInEditor()) { - highlight = h.addParserHighlight(notice, - parserErrorHighlightPainter); - } - noticesToHighlights.put(notice, highlight); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - } - } - - } - - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: Done adding parser notices from " + - res.getParser()); - } - - } - - /** - * Called when the document is modified. - * - * @param e - * The document event. - */ - public void changedUpdate(DocumentEvent e) { - } - - private void clearParserNoticeHighlights() { - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - if (h != null) { - h.clearParserHighlights(); - } - if (noticesToHighlights != null) { - noticesToHighlights.clear(); - } - } - - /** - * Removes all parser notice highlights for a specific parser. - * - * @param parser - * The parser whose highlights to remove. - */ - private void clearParserNoticeHighlights(Parser parser) { - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - if (h != null) { - h.clearParserHighlights(parser); - } - if (noticesToHighlights != null) { - for (Iterator i = noticesToHighlights.entrySet().iterator(); i.hasNext();) { - Map.Entry entry = (Map.Entry) i.next(); - ParserNotice notice = (ParserNotice) entry.getKey(); - if (notice.getParser() == parser) { - i.remove(); - } - } - } - } - - /** - * Removes all parsers and any highlights they have created. - * - * @see #addParser(Parser) - */ - public void clearParsers() { - timer.stop(); - clearParserNoticeHighlights(); - parsers.clear(); - textArea.fireParserNoticesChange(); - } - - /** - * Forces the given {@link Parser} to re-parse the content of this text area. - *

- * - * This method can be useful when a Parser can be configured as to what notices it returns. For - * example, if a Java language parser can be configured to set whether no serialVersionUID is a warning, error, or - * ignored, this method can be called after changing the expected notice type to have the document re-parsed. - * - * @param parser - * The index of the Parser to re-run. - * @see #getParser(int) - */ - public void forceReparsing(int parser) { - Parser p = getParser(parser); - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - String style = textArea.getSyntaxEditingStyle(); - doc.readLock(); - try { - if (p.isEnabled()) { - ParseResult res = p.parse(doc, style); - addParserNoticeHighlights(res); - } - else { - clearParserNoticeHighlights(p); - } - textArea.fireParserNoticesChange(); - } finally { - doc.readUnlock(); - } - } - - /** - * Returns the delay between the last "concurrent" edit and when the document is re-parsed. - * - * @return The delay, in milliseconds. - * @see #setDelay(int) - */ - public int getDelay() { - return timer.getDelay(); - } - - /** - * Returns the specified parser. - * - * @param index - * The index of the parser. - * @return The parser. - * @see #getParserCount() - * @see #addParser(Parser) - * @see #removeParser(Parser) - */ - public Parser getParser(int index) { - return (Parser) parsers.get(index); - } - - /** - * Returns the number of registered parsers. - * - * @return The number of registered parsers. - */ - public int getParserCount() { - return parsers.size(); - } - - /** - * Returns a list of the current parser notices for this text area. This method (like most Swing methods) should - * only be called on the EDT. - * - * @return The list of notices. This will be an empty list if there are none. - */ - public List getParserNotices() { - List notices = new ArrayList(); - if (noticesToHighlights != null) { - for (Object o : noticesToHighlights.keySet()) { - ParserNotice notice = (ParserNotice) o; - notices.add(notice); - } - } - return notices; - } - - /** - * Returns the tool tip to display for a mouse event at the given location. This method is overridden to give a - * registered parser a chance to display a tool tip (such as an error description when the mouse is over an error - * highlight). - * - * @param e - * The mouse event. - * @return The tool tip to display, and possibly a hyperlink event handler. - */ - public ToolTipInfo getToolTipText(MouseEvent e) { - - String tip = null; - HyperlinkListener listener = null; - parserForTip = null; - - // try { - int pos = textArea.viewToModel(e.getPoint()); - /* - * Highlighter.Highlight[] highlights = textArea.getHighlighter(). getHighlights(); for (int i=0; - * i=pos) { //return pnh.getMessage(); - * return textArea.getText(start, end-start); } //} } - */ - if (noticesToHighlights != null) { - for (Object o : noticesToHighlights.keySet()) { - ParserNotice notice = (ParserNotice) o; - if (notice.containsPosition(pos)) { - tip = notice.getToolTipText(); - parserForTip = notice.getParser(); - if (parserForTip instanceof HyperlinkListener) { - listener = (HyperlinkListener) parserForTip; - } - break; - } - } - } - // } catch (BadLocationException ble) { - // ble.printStackTrace(); // Should never happen. - // } - - URL imageBase = parserForTip == null ? null : parserForTip.getImageBase(); - return new ToolTipInfo(tip, listener, imageBase); - - } - - /** - * Called when the document is modified. - * - * @param e - * The document event. - */ - public void handleDocumentEvent(DocumentEvent e) { - if (running && parsers.size() > 0) { - timer.restart(); - } - } - - /** - * Called when the user clicks a hyperlink in a {@link FocusableTip}. - * - * @param e - * The event. - */ - public void hyperlinkUpdate(HyperlinkEvent e) { - if (parserForTip != null && parserForTip.getHyperlinkListener() != null) { - parserForTip.getHyperlinkListener().linkClicked(textArea, e); - } - } - - /** - * Called when the document is modified. - * - * @param e - * The document event. - */ - public void insertUpdate(DocumentEvent e) { - - // Keep track of the first and last offset modified. Some parsers are - // smart and will only re-parse this section of the file. - try { - int offs = e.getOffset(); - if (firstOffsetModded == null || offs < firstOffsetModded.getOffset()) { - firstOffsetModded = e.getDocument().createPosition(offs); - } - offs = e.getOffset() + e.getLength(); - if (lastOffsetModded == null || offs > lastOffsetModded.getOffset()) { - lastOffsetModded = e.getDocument().createPosition(offs); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); // Shouldn't happen - } - - handleDocumentEvent(e); - - } - - /** - * Removes a parser. - * - * @param parser - * The parser to remove. - * @return Whether the parser was found. - * @see #addParser(Parser) - * @see #getParser(int) - */ - public boolean removeParser(Parser parser) { - removeParserNotices(parser); - boolean removed = parsers.remove(parser); - if (removed) { - textArea.fireParserNoticesChange(); - } - return removed; - } - - /** - * Removes all parser notices (and clears highlights in the editor) from a particular parser. - * - * @param parser - * The parser. - */ - private void removeParserNotices(Parser parser) { - - if (noticesToHighlights != null) { - - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - - for (Iterator i = noticesToHighlights.entrySet().iterator(); i.hasNext();) { - Map.Entry entry = (Map.Entry) i.next(); - ParserNotice notice = (ParserNotice) entry.getKey(); - if (notice.getParser() == parser && entry.getValue() != null) { - h.removeParserHighlight(entry.getValue()); - i.remove(); - } - } - - } - - } - - /** - * Removes any currently stored notices (and the corresponding highlights from the editor) from the same Parser, and - * in the given line range, as in the results. - * - * @param res - * The results. - */ - private void removeParserNotices(ParseResult res) { - - if (noticesToHighlights != null) { - - RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) - textArea.getHighlighter(); - - for (Iterator i = noticesToHighlights.entrySet().iterator(); i.hasNext();) { - Map.Entry entry = (Map.Entry) i.next(); - ParserNotice notice = (ParserNotice) entry.getKey(); - if (shouldRemoveNotice(notice, res)) { - if (entry.getValue() != null) { - h.removeParserHighlight(entry.getValue()); - } - i.remove(); - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: ... notice removed: " + - notice); - } - } - else { - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: ... notice not removed: " + - notice); - } - } - } - - } - - } - - /** - * Called when the document is modified. - * - * @param e - * The document event. - */ - public void removeUpdate(DocumentEvent e) { - - // Keep track of the first and last offset modified. Some parsers are - // smart and will only re-parse this section of the file. Note that - // for removals, only the line at the removal start needs to be - // re-parsed. - try { - int offs = e.getOffset(); - if (firstOffsetModded == null || offs < firstOffsetModded.getOffset()) { - firstOffsetModded = e.getDocument().createPosition(offs); - } - if (lastOffsetModded == null || offs > lastOffsetModded.getOffset()) { - lastOffsetModded = e.getDocument().createPosition(offs); - } - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - } - - handleDocumentEvent(e); - - } - - /** - * Restarts parsing the document. - * - * @see #stopParsing() - */ - public void restartParsing() { - timer.restart(); - running = true; - } - - /** - * Sets the delay between the last "concurrent" edit and when the document is re-parsed. - * - * @param millis - * The new delay, in milliseconds. This must be greater than 0. - * @see #getDelay() - */ - public void setDelay(int millis) { - if (running) { - timer.stop(); - } - timer.setDelay(millis); - if (running) { - timer.start(); - } - } - - /** - * Returns whether a parser notice should be removed, based on a parse result. - * - * @param notice - * The notice in question. - * @param res - * The result. - * @return Whether the notice should be removed. - */ - private final boolean shouldRemoveNotice(ParserNotice notice, - ParseResult res) { - - if (DEBUG_PARSING) { - System.out.println("[DEBUG]: ... ... shouldRemoveNotice " + - notice + ": " + (notice.getParser() == res.getParser())); - } - - // NOTE: We must currently remove all notices for the parser. Parser - // implementors are required to parse the entire document each parsing - // request, as RSTA is not yet sophisticated enough to determine the - // minimum range of text to parse (and ParserNotices' locations aren't - // updated when the Document is mutated, which would be a requirement - // for this as well). - // return same_parser && (in_reparsed_range || in_deleted_end_of_doc) - return notice.getParser() == res.getParser(); - - } - - /** - * Stops parsing the document. - * - * @see #restartParsing() - */ - public void stopParsing() { - timer.stop(); - running = false; - } - -} \ No newline at end of file + HyperlinkListener, PropertyChangeListener { + + private RSyntaxTextArea textArea; + private List parsers; + private Timer timer; + private boolean running; + private Parser parserForTip; + private Position firstOffsetModded; + private Position lastOffsetModded; + + /** + * Mapping of notices to their highlights in the editor. Can't use a Map + * since parsers could return two ParserNotices that compare + * equally via equals(). Real-world example: The Perl + * compiler will return 2+ identical error messages if the same error is + * committed in a single line more than once. + */ + private List noticeHighlightPairs; + + /** + * Painter used to underline errors. + */ + private SquiggleUnderlineHighlightPainter parserErrorHighlightPainter = + new SquiggleUnderlineHighlightPainter(Color.RED); + + /** + * If this system property is set to true, debug messages + * will be printed to stdout to help diagnose parsing issues. + */ + private static final String PROPERTY_DEBUG_PARSING = "rsta.debugParsing"; + + /** + * Whether to print debug messages while running parsers. + */ + private static final boolean DEBUG_PARSING; + + /** + * The default delay between the last key press and when the document + * is parsed, in milliseconds. + */ + private static final int DEFAULT_DELAY_MS = 1250; + + + /** + * Constructor. + * + * @param textArea The text area whose document the parser will be + * parsing. + */ + ParserManager(RSyntaxTextArea textArea) { + this(DEFAULT_DELAY_MS, textArea); + } + + + /** + * Constructor. + * + * @param delay The delay between the last key press and when the document + * is parsed. + * @param textArea The text area whose document the parser will be + * parsing. + */ + ParserManager(int delay, RSyntaxTextArea textArea) { + this.textArea = textArea; + textArea.getDocument().addDocumentListener(this); + textArea.addPropertyChangeListener("document", this); + parsers = new ArrayList<>(1); // Usually small + timer = new Timer(delay, this); + timer.setRepeats(false); + running = true; + } + + + /** + * Called when the timer fires (e.g. it's time to parse the document). + * + * @param e The event. + */ + @Override + public void actionPerformed(ActionEvent e) { + + // Sanity check - should have >1 parser if event is fired. + int parserCount = getParserCount(); + if (parserCount==0) { + return; + } + + long begin = 0; + if (DEBUG_PARSING) { + begin = System.currentTimeMillis(); + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + + Element root = doc.getDefaultRootElement(); + int firstLine = firstOffsetModded==null ? 0 : + root.getElementIndex(firstOffsetModded.getOffset()); + int lastLine = lastOffsetModded==null ? root.getElementCount()-1 : + root.getElementIndex(lastOffsetModded.getOffset()); + firstOffsetModded = lastOffsetModded = null; + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Minimum lines to parse: " + firstLine + "-" + lastLine); + } + + String style = textArea.getSyntaxEditingStyle(); + doc.readLock(); + try { + for (int i=0; inull, nothing + * happens. + * @see #getParser(int) + * @see #removeParser(Parser) + */ + public void addParser(Parser parser) { + if (parser!=null && !parsers.contains(parser)) { + if (running) { + timer.stop(); + } + parsers.add(parser); + if (parsers.size()==1) { + // Okay to call more than once. + ToolTipManager.sharedInstance().registerComponent(textArea); + } + if (running) { + timer.restart(); + } + } + } + + + /** + * Adds highlights for a list of parser notices. Any current notices + * from the same Parser, in the same parsed range, are removed. + * + * @param res The result of a parsing. + * @see #clearParserNoticeHighlights() + */ + private void addParserNoticeHighlights(ParseResult res) { + + // Parsers are supposed to return at least empty ParseResults, but + // we'll be defensive here. + if (res==null) { + return; + } + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Adding parser notices from " + + res.getParser()); + } + + if (noticeHighlightPairs==null) { + noticeHighlightPairs = new ArrayList<>(); + } + + removeParserNotices(res); + + List notices = res.getNotices(); + if (notices.size()>0) { // Guaranteed non-null + + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + + for (ParserNotice notice : notices) { + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: ... adding: " + notice); + } + try { + HighlightInfo highlight = null; + if (notice.getShowInEditor()) { + highlight = h.addParserHighlight(notice, + parserErrorHighlightPainter); + } + noticeHighlightPairs.add(new NoticeHighlightPair(notice, highlight)); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + } + + } + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: Done adding parser notices from " + + res.getParser()); + } + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void changedUpdate(DocumentEvent e) { + } + + + private void clearParserNoticeHighlights() { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + if (h!=null) { + h.clearParserHighlights(); + } + if (noticeHighlightPairs!=null) { + noticeHighlightPairs.clear(); + } + } + + + /** + * Removes all parser notice highlights for a specific parser. + * + * @param parser The parser whose highlights to remove. + */ + private void clearParserNoticeHighlights(Parser parser) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + if (h!=null) { + h.clearParserHighlights(parser); + } + if (noticeHighlightPairs!=null) { + noticeHighlightPairs.removeIf(pair -> pair.notice.getParser() == parser); + } + } + + + /** + * Removes all parsers and any highlights they have created. + * + * @see #addParser(Parser) + */ + public void clearParsers() { + timer.stop(); + clearParserNoticeHighlights(); + parsers.clear(); + textArea.fireParserNoticesChange(); + } + + + /** + * Forces the given {@link Parser} to re-parse the content of this text + * area.

+ * + * This method can be useful when a Parser can be configured + * as to what notices it returns. For example, if a Java language parser + * can be configured to set whether no serialVersionUID is a warning, + * error, or ignored, this method can be called after changing the expected + * notice type to have the document re-parsed. + * + * @param parser The index of the Parser to re-run. + * @see #getParser(int) + */ + public void forceReparsing(int parser) { + Parser p = getParser(parser); + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + String style = textArea.getSyntaxEditingStyle(); + doc.readLock(); + try { + if (p.isEnabled()) { + ParseResult res = p.parse(doc, style); + addParserNoticeHighlights(res); + } + else { + clearParserNoticeHighlights(p); + } + textArea.fireParserNoticesChange(); + } finally { + doc.readUnlock(); + } + } + + + /** + * Returns the delay between the last "concurrent" edit and when the + * document is re-parsed. + * + * @return The delay, in milliseconds. + * @see #setDelay(int) + */ + public int getDelay() { + return timer.getDelay(); + } + + + /** + * Returns the specified parser. + * + * @param index The index of the parser. + * @return The parser. + * @see #getParserCount() + * @see #addParser(Parser) + * @see #removeParser(Parser) + */ + public Parser getParser(int index) { + return parsers.get(index); + } + + + /** + * Returns the number of registered parsers. + * + * @return The number of registered parsers. + */ + public int getParserCount() { + return parsers.size(); + } + + + /** + * Returns a list of the current parser notices for this text area. + * This method (like most Swing methods) should only be called on the + * EDT. + * + * @return The list of notices. This will be an empty list if there are + * none. + */ + public List getParserNotices() { + List notices = new ArrayList<>(); + if (noticeHighlightPairs!=null) { + for (NoticeHighlightPair pair : noticeHighlightPairs) { + notices.add(pair.notice); + } + } + return notices; + } + + + /** + * Returns the tool tip to display for a mouse event at the given + * location. This method is overridden to give a registered parser a + * chance to display a tool tip (such as an error description when the + * mouse is over an error highlight). + * + * @param e The mouse event. + * @return The tool tip to display, and possibly a hyperlink event handler. + */ + public ToolTipInfo getToolTipText(MouseEvent e) { + + String tip = null; + HyperlinkListener listener = null; + parserForTip = null; + Point p = e.getPoint(); + +// try { + int pos = textArea.viewToModel(p); + /* + Highlighter.Highlight[] highlights = textArea.getHighlighter(). + getHighlights(); + for (int i=0; i=pos) { + //return pnh.getMessage(); + return textArea.getText(start, end-start); + } + //} + } + */ + if (noticeHighlightPairs!=null) { + for (NoticeHighlightPair pair : noticeHighlightPairs) { + ParserNotice notice = pair.notice; + if (noticeContainsPosition(notice, pos) && + noticeContainsPointInView(notice, p)) { + tip = notice.getToolTipText(); + parserForTip = notice.getParser(); + if (parserForTip instanceof HyperlinkListener) { + listener = (HyperlinkListener)parserForTip; + } + break; + } + } + } +// } catch (BadLocationException ble) { +// ble.printStackTrace(); // Should never happen. +// } + + URL imageBase = parserForTip==null ? null : parserForTip.getImageBase(); + return new ToolTipInfo(tip, listener, imageBase); + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + public void handleDocumentEvent(DocumentEvent e) { + if (running && parsers.size()>0) { + timer.restart(); + } + } + + + /** + * Called when the user clicks a hyperlink in a + * {@link org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip}. + * + * @param e The event. + */ + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + if (parserForTip!=null && parserForTip.getHyperlinkListener()!=null) { + parserForTip.getHyperlinkListener().linkClicked(textArea, e); + } + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void insertUpdate(DocumentEvent e) { + + // Keep track of the first and last offset modified. Some parsers are + // smart and will only re-parse this section of the file. + try { + int offs = e.getOffset(); + if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { + lastOffsetModded = e.getDocument().createPosition(offs); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Shouldn't happen + } + + handleDocumentEvent(e); + + } + + + /** + * Returns whether a parser notice contains the specified offset. + * + * @param notice The notice. + * @param offs The offset. + * @return Whether the notice contains the offset. + */ + private boolean noticeContainsPosition(ParserNotice notice, int offs){ + if (notice.getKnowsOffsetAndLength()) { + return notice.containsPosition(offs); + } + Document doc = textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = notice.getLine(); + if (line<0) { // Defensive against possible bad user-defined notices. + return false; + } + Element elem = root.getElement(line); + return elem != null && offs>=elem.getStartOffset() && offsviewToModel() returns the closest model + * position, and the position doesn't necessarily contain the + * point passed in as an argument, this method checks whether the point is + * indeed contained in the view rectangle for the specified offset. + * + * @param notice The parser notice. + * @param p The point possibly contained in the view range of the + * parser notice. + * @return Whether the parser notice actually contains the specified point + * in the view. + */ + private boolean noticeContainsPointInView(ParserNotice notice, + Point p) { + + try { + + int start, end; + if (notice.getKnowsOffsetAndLength()) { + start = notice.getOffset(); + end = start + notice.getLength() - 1; + } + else { + Document doc = textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = notice.getLine(); + // Defend against possible bad user-defined notices. + if (line<0) { + return false; + } + Element elem = root.getElement(line); + start = elem.getStartOffset(); + end = elem.getEndOffset() - 1; + } + + Rectangle r1 = textArea.modelToView(start); + Rectangle r2 = textArea.modelToView(end); + if (r1.y!=r2.y) { + // If the notice spans multiple lines, give them the benefit + // of the doubt. This is only "wrong" if the user is in empty + // space "to the right" of the error marker when it ends at the + // end of a line anyway. + return true; + } + + r1.y--; // Be a tiny bit lenient. + r1.height += 2; // Ditto + return p.x>=r1.x && p.x<(r2.x+r2.width) && + p.y>=r1.y && p.y<(r1.y+r1.height); + + } catch (BadLocationException ble) { // Never occurs + // Give them the benefit of the doubt, should 99% of the time be + // true anyway + return true; + } + + } + + + /** + * Called when a property we're interested in changes. + * + * @param e The property change event. + */ + @Override + public void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + if ("document".equals(name)) { + // The document switched out from under us + RDocument old = (RDocument)e.getOldValue(); + if (old != null) { + old.removeDocumentListener(this); + } + RDocument newDoc = (RDocument)e.getNewValue(); + if (newDoc != null) { + newDoc.addDocumentListener(this); + } + } + + } + + + /** + * Removes a parser. + * + * @param parser The parser to remove. + * @return Whether the parser was found. + * @see #addParser(Parser) + * @see #getParser(int) + */ + public boolean removeParser(Parser parser) { + removeParserNotices(parser); + boolean removed = parsers.remove(parser); + if (removed) { + textArea.fireParserNoticesChange(); + } + return removed; + } + + + /** + * Removes all parser notices (and clears highlights in the editor) from + * a particular parser. + * + * @param parser The parser. + */ + private void removeParserNotices(Parser parser) { + if (noticeHighlightPairs!=null) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext();) { + NoticeHighlightPair pair = i.next(); + if (pair.notice.getParser()==parser && pair.highlight!=null) { + h.removeParserHighlight(pair.highlight); + i.remove(); + } + } + } + } + + + /** + * Removes any currently stored notices (and the corresponding highlights + * from the editor) from the same Parser, and in the given line range, + * as in the results. + * + * @param res The results. + */ + private void removeParserNotices(ParseResult res) { + if (noticeHighlightPairs!=null) { + RSyntaxTextAreaHighlighter h = (RSyntaxTextAreaHighlighter) + textArea.getHighlighter(); + for (Iterator i=noticeHighlightPairs.iterator(); i.hasNext();) { + NoticeHighlightPair pair = i.next(); + boolean removed = false; + if (shouldRemoveNotice(pair.notice, res)) { + if (pair.highlight!=null) { + h.removeParserHighlight(pair.highlight); + } + i.remove(); + removed = true; + } + if (DEBUG_PARSING) { + String text = removed ? "[DEBUG]: ... notice removed: " : + "[DEBUG]: ... notice not removed: "; + System.out.println(text + pair.notice); + } + } + + } + + } + + + /** + * Called when the document is modified. + * + * @param e The document event. + */ + @Override + public void removeUpdate(DocumentEvent e) { + + // Keep track of the first and last offset modified. Some parsers are + // smart and will only re-parse this section of the file. Note that + // for removals, only the line at the removal start needs to be + // re-parsed. + try { + int offs = e.getOffset(); + if (firstOffsetModded==null || offslastOffsetModded.getOffset()) { + lastOffsetModded = e.getDocument().createPosition(offs); + } + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + + handleDocumentEvent(e); + + } + + + /** + * Restarts parsing the document. + * + * @see #stopParsing() + */ + public void restartParsing() { + timer.restart(); + running = true; + } + + + /** + * Sets the delay between the last "concurrent" edit and when the document + * is re-parsed. + * + * @param millis The new delay, in milliseconds. This must be greater + * than 0. + * @see #getDelay() + */ + public void setDelay(int millis) { + if (running) { + timer.stop(); + } + timer.setInitialDelay(millis); + timer.setDelay(millis); + if (running) { + timer.start(); + } + } + + + /** + * Returns whether a parser notice should be removed, based on a parse + * result. + * + * @param notice The notice in question. + * @param res The result. + * @return Whether the notice should be removed. + */ + private boolean shouldRemoveNotice(ParserNotice notice, + ParseResult res) { + + if (DEBUG_PARSING) { + System.out.println("[DEBUG]: ... ... shouldRemoveNotice " + + notice + ": " + (notice.getParser()==res.getParser())); + } + + // NOTE: We must currently remove all notices for the parser. Parser + // implementors are required to parse the entire document each parsing + // request, as RSTA is not yet sophisticated enough to determine the + // minimum range of text to parse (and ParserNotices' locations aren't + // updated when the Document is mutated, which would be a requirement + // for this as well). + // return same_parser && (in_reparsed_range || in_deleted_end_of_doc) + return notice.getParser()==res.getParser(); + + } + + + /** + * Stops parsing the document. + * + * @see #restartParsing() + */ + public void stopParsing() { + timer.stop(); + running = false; + } + + + /** + * Mapping of a parser notice to its highlight in the editor. + */ + private static class NoticeHighlightPair { + + private ParserNotice notice; + private HighlightInfo highlight; + + NoticeHighlightPair(ParserNotice notice, HighlightInfo highlight) { + this.notice = notice; + this.highlight = highlight; + } + + } + + + static { + boolean debugParsing = false; + try { + debugParsing = Boolean.getBoolean(PROPERTY_DEBUG_PARSING); + } catch (AccessControlException ace) { + // Likely an applet's security manager. + debugParsing = false; // FindBugs + } + DEBUG_PARSING = debugParsing; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java old mode 100644 new mode 100755 index 84adbf1e5..5a3874f22 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/PopupWindowDecorator.java @@ -3,70 +3,66 @@ * * PopupWindowDecorator.java - Hook allowing hosting applications to decorate * JWindows created by the AutoComplete library. - * Copyright (C) 2011 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.JWindow; + /** - * A hook allowing hosting applications to decorate JWindows created by the AutoComplete library. For example, you could - * use the JGoodies library to add drop shadows to the windows. - * + * A hook allowing hosting applications to decorate JWindows created by the + * AutoComplete library. For example, you could use the + * JGoodies library to add drop shadows + * to the windows. + * * @author Robert Futrell * @version 1.0 */ public abstract class PopupWindowDecorator { - /** - * The singleton instance of this class. - */ - private static PopupWindowDecorator decorator; + /** + * The singleton instance of this class. + */ + private static PopupWindowDecorator decorator; + + + /** + * Callback called whenever an appropriate JWindow is created by the + * AutoComplete library. Implementations can decorate the window however + * they see fit. + * + * @param window The newly-created window. + */ + public abstract void decorate(JWindow window); + + + /** + * Returns the singleton instance of this class. This should only be + * called on the EDT. + * + * @return The singleton instance of this class, or null + * for none. + * @see #set(PopupWindowDecorator) + */ + public static PopupWindowDecorator get() { + return decorator; + } - /** - * Callback called whenever an appropriate JWindow is created by the AutoComplete library. Implementations can - * decorate the window however they see fit. - * - * @param window - * The newly-created window. - */ - public abstract void decorate(JWindow window); - /** - * Returns the singleton instance of this class. This should only be called on the EDT. - * - * @return The singleton instance of this class, or null for none. - * @see #set(PopupWindowDecorator) - */ - public static PopupWindowDecorator get() { - return decorator; - } + /** + * Sets the singleton instance of this class. This should only be called + * on the EDT. + * + * @param decorator The new instance of this class. This may be + * null. + * @see #get() + */ + public static void set(PopupWindowDecorator decorator) { + PopupWindowDecorator.decorator = decorator; + } - /** - * Sets the singleton instance of this class. This should only be called on the EDT. - * - * @param decorator - * The new instance of this class. This may be null. - * @see #get() - */ - public static void set(PopupWindowDecorator decorator) { - PopupWindowDecorator.decorator = decorator; - } -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java old mode 100644 new mode 100755 index 00defb6c7..dda6c8c85 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSTAView.java @@ -2,23 +2,9 @@ * 02/10/2009 * * RSTAView.java - An RSyntaxTextArea view. - * Copyright (C) 2003 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -26,31 +12,51 @@ import javax.swing.text.BadLocationException; + /** * Utility methods for RSyntaxTextArea's views. - * + * * @author Robert Futrell * @version 1.0 */ interface RSTAView { - /** - * Returns the y-coordinate of the line containing a specified offset. - *

- * - * This method is quicker than using traditional modelToView(int) calls, as the entire bounding box - * isn't computed. - * - * @param alloc - * The area the text area can render into. - * @param offs - * The offset info the document. - * @return The y-coordinate of the top of the offset, or -1 if this text area doesn't yet have a - * positive size. - * @throws BadLocationException - * If offs isn't a valid offset into the document. - */ - public int yForLineContaining(Rectangle alloc, int offs) - throws BadLocationException; - -} \ No newline at end of file + + /** + * Returns the y-coordinate of the specified line.

+ * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + * + * @param alloc The area the text area can render into. + * @param line The line number. + * @return The y-coordinate of the top of the line, or -1 if + * this text area doesn't yet have a positive size or the line is + * hidden (i.e. from folding). + * @throws BadLocationException If line isn't a valid line + * number for this document. + */ + int yForLine(Rectangle alloc, int line) throws BadLocationException; + + + /** + * Returns the y-coordinate of the line containing a specified offset.

+ * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + * + * @param alloc The area the text area can render into. + * @param offs The offset info the document. + * @return The y-coordinate of the top of the offset, or -1 if + * this text area doesn't yet have a positive size or the line is + * hidden (i.e. from folding). + * @throws BadLocationException If offs isn't a valid offset + * into the document. + */ + int yForLineContaining(Rectangle alloc, int offs) + throws BadLocationException; + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java old mode 100644 new mode 100755 index 6293de0db..a84a49145 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxDocument.java @@ -3,576 +3,679 @@ * * RSyntaxDocument.java - A document capable of syntax highlighting, used by * RSyntaxTextArea. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.event.ActionEvent; import java.io.IOException; import java.io.ObjectInputStream; +import java.util.Iterator; + import javax.swing.Action; -import javax.swing.event.*; -import javax.swing.text.*; +import javax.swing.event.DocumentEvent; +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.modes.AbstractMarkupTokenMaker; +import org.fife.ui.rtextarea.RDocument; import org.fife.util.DynamicIntArray; + /** - * The document used by {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea}. This document is like - * javax.swing.text.PlainDocument except that it also keeps track of syntax highlighting in the document. - * It has a "style" attribute associated with it that determines how syntax highlighting is done (i.e., what language is - * being highlighted). - *

- * - * Instances of RSyntaxTextArea will only accept instances of RSyntaxDocument, since it is - * this document that keeps track of syntax highlighting. All others will cause an exception to be thrown. - *

- * - * To change the language being syntax highlighted at any time, you merely have to call {@link #setSyntaxStyle}. Other - * than that, this document can be treated like any other save one caveat: all DocumentEvents of type - * CHANGE use their offset and length values to represent the first and last lines, respectively, that have - * had their syntax coloring change. This is really a hack to increase the speed of the painting code and should really - * be corrected, but oh well. - * + * The document used by {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea}. + * This document is like javax.swing.text.PlainDocument except that + * it also keeps track of syntax highlighting in the document. It has a "style" + * attribute associated with it that determines how syntax highlighting is done + * (i.e., what language is being highlighted).

+ * + * Instances of RSyntaxTextArea will only accept instances of + * RSyntaxDocument, since it is this document that keeps + * track of syntax highlighting. All others will cause an exception to be + * thrown.

+ * + * To change the language being syntax highlighted at any time, you merely have + * to call {@link #setSyntaxStyle}. Other than that, this document can be + * treated like any other save one caveat: all DocumentEvents of + * type CHANGE use their offset and length values to represent the + * first and last lines, respectively, that have had their syntax coloring + * change. This is really a hack to increase the speed of the painting code + * and should really be corrected, but oh well. + * * @author Robert Futrell - * @version 0.1 + * @version 1.0 */ -public class RSyntaxDocument extends PlainDocument implements SyntaxConstants { - - /** - * Creates a {@link TokenMaker} appropriate for a given programming language. - */ - private transient TokenMakerFactory tokenMakerFactory; - - /** - * Splits text into tokens for the current programming language. - */ - private TokenMaker tokenMaker; - - /** - * Array of values representing the "last token type" on each line. This is used in cases such as multiline - * comments: if the previous line ended with an (unclosed) multiline comment, we can use this knowledge and start - * the current line's syntax highlighting in multiline comment state. - */ - protected DynamicIntArray lastTokensOnLines; - - private transient Segment s; - - /** - * Constructs a plain text document. A default root element is created, and the tab size set to 5. - * - * @param syntaxStyle - * The syntax highlighting scheme to use. - */ - public RSyntaxDocument(String syntaxStyle) { - this(null, syntaxStyle); - } - - /** - * Constructs a plain text document. A default root element is created, and the tab size set to 5. - * - * @param tmf - * The TokenMakerFactory for this document. If this is null, a default factory - * is used. - * @param syntaxStyle - * The syntax highlighting scheme to use. - */ - public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { - super(new RGapContent()); - putProperty(tabSizeAttribute, new Integer(5)); - lastTokensOnLines = new DynamicIntArray(400); - lastTokensOnLines.add(Token.NULL); // Initial (empty) line. - s = new Segment(); - setTokenMakerFactory(tmf); - setSyntaxStyle(syntaxStyle); - } - - /** - * Returns the character in the document at the specified offset. - * - * @param offset - * The offset of the character. - * @return The character. - * @throws BadLocationException - * If the offset is invalid. - */ - public char charAt(int offset) throws BadLocationException { - return ((RGapContent) getContent()).charAt(offset); - } - - /** - * Alerts all listeners to this document of an insertion. This is overridden so we can update our syntax - * highlighting stuff. - *

- * The syntax highlighting stuff has to be here instead of in insertUpdate because - * insertUpdate is not called by the undo/redo actions, but this method is. - * - * @param e - * The change. - */ - protected void fireInsertUpdate(DocumentEvent e) { - - /* - * Now that the text is actually inserted into the content and element structure, we can update our token - * elements and "last tokens on lines" structure. - */ - - Element lineMap = getDefaultRootElement(); - DocumentEvent.ElementChange change = e.getChange(lineMap); - Element[] added = change == null ? null : change.getChildrenAdded(); - - int numLines = lineMap.getElementCount(); - int line = lineMap.getElementIndex(e.getOffset()); - int previousLine = line - 1; - int previousTokenType = (previousLine > -1 ? - lastTokensOnLines.get(previousLine) : Token.NULL); - - // If entire lines were added... - if (added != null && added.length > 0) { - - Element[] removed = change.getChildrenRemoved(); - int numRemoved = removed != null ? removed.length : 0; - - int endBefore = line + added.length - numRemoved; - // System.err.println("... adding lines: " + line + " - " + (endBefore-1)); - // System.err.println("... ... added: " + added.length + ", removed:" + numRemoved); - for (int i = line; i < endBefore; i++) { - - setSharedSegment(i); // Loads line i's text into s. - - int tokenType = tokenMaker.getLastTokenTypeOnLine(s, previousTokenType); - lastTokensOnLines.add(i, tokenType); - // System.err.println("--------- lastTokensOnLines.size() == " + lastTokensOnLines.getSize()); - - previousTokenType = tokenType; - - } // End of for (int i=line; i0). - - // Otherwise, text was inserted on a single line... - else { - - // Update last tokens for lines below until they stop changing. - updateLastTokensBelow(line, numLines, previousTokenType); - - } // End of else. - - // Let all listeners know about the insertion. - super.fireInsertUpdate(e); - - } - - /** - * This method is called AFTER the content has been inserted into the document and the element structure has been - * updated. - *

- * The syntax-highlighting updates need to be done here (as opposed to an override of postRemoveUpdate) - * as this method is called in response to undo/redo events, whereas postRemoveUpdate is not. - *

- * Now that the text is actually inserted into the content and element structure, we can update our token elements - * and "last tokens on lines" structure. - * - * @param chng - * The change that occurred. - * @see #removeUpdate - */ - protected void fireRemoveUpdate(DocumentEvent chng) { - - Element lineMap = getDefaultRootElement(); - int numLines = lineMap.getElementCount(); - - DocumentEvent.ElementChange change = chng.getChange(lineMap); - Element[] removed = change == null ? null : change.getChildrenRemoved(); - - // If entire lines were removed... - if (removed != null && removed.length > 0) { - - int line = change.getIndex(); // First line entirely removed. - int previousLine = line - 1; // Line before that. - int previousTokenType = (previousLine > -1 ? - lastTokensOnLines.get(previousLine) : Token.NULL); - - Element[] added = change.getChildrenAdded(); - int numAdded = added == null ? 0 : added.length; - - // Remove the cached last-token values for the removed lines. - int endBefore = line + removed.length - numAdded; - // System.err.println("... removing lines: " + line + " - " + (endBefore-1)); - // System.err.println("... added: " + numAdded + ", removed: " + removed.length); - - lastTokensOnLines.removeRange(line, endBefore); // Removing values for lines [line-(endBefore-1)]. - // System.err.println("--------- lastTokensOnLines.size() == " + lastTokensOnLines.getSize()); - - // Update last tokens for lines below until they've stopped changing. - updateLastTokensBelow(line, numLines, previousTokenType); - - } // End of if (removed!=null && removed.size()>0). - - // Otherwise, text was removed from just one line... - else { - - int line = lineMap.getElementIndex(chng.getOffset()); - if (line >= lastTokensOnLines.getSize()) - return; // If we're editing the last line in a document... - - int previousLine = line - 1; - int previousTokenType = (previousLine > -1 ? - lastTokensOnLines.get(previousLine) : Token.NULL); - // System.err.println("previousTokenType for line : " + previousLine + " is " + previousTokenType); - // Update last tokens for lines below until they've stopped changing. - updateLastTokensBelow(line, numLines, previousTokenType); - - } - - // Let all of our listeners know about the removal. - super.fireRemoveUpdate(chng); - - } - - /** - * Returns whether closing markup tags should be automatically completed. This method only returns true - * if {@link #getLanguageIsMarkup()} also returns true. - * - * @return Whether markup closing tags should be automatically completed. - * @see #getLanguageIsMarkup() - */ - public boolean getCompleteMarkupCloseTags() { - // TODO: Remove terrible dependency on AbstractMarkupTokenMaker - return getLanguageIsMarkup() && - ((AbstractMarkupTokenMaker) tokenMaker).getCompleteCloseTags(); - } - - /** - * Returns whether the current programming language uses curly braces ('{' and '}') to denote code - * blocks. - * - * @return Whether curly braces denote code blocks. - */ - public boolean getCurlyBracesDenoteCodeBlocks() { - return tokenMaker.getCurlyBracesDenoteCodeBlocks(); - } - - /** - * Returns whether the current language is a markup language, such as HTML, XML or PHP. - * - * @return Whether the current language is a markup language. - */ - public boolean getLanguageIsMarkup() { - return tokenMaker.isMarkupLanguage(); - } - - /** - * Returns the token type of the last token on the given line. - * - * @param line - * The line to inspect. - * @return The token type of the last token on the specified line. If the line is invalid, an exception is thrown. - */ - public int getLastTokenTypeOnLine(int line) { - return lastTokensOnLines.get(line); - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in the current programming language. - * - * @return The start and end strings to add to a line to "comment" it out. A null value for either - * means there is no string to add for that part. A value of null for the array means this - * language does not support commenting/uncommenting lines. - */ - public String[] getLineCommentStartAndEnd() { - return tokenMaker.getLineCommentStartAndEnd(); - } - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - boolean getMarkOccurrencesOfTokenType(int type) { - return tokenMaker.getMarkOccurrencesOfTokenType(type); - } - - /** - * This method returns whether auto indentation should be done if Enter is pressed at the end of the specified line. - * - * @param line - * The line to check. - * @return Whether an extra indentation should be done. - */ - public boolean getShouldIndentNextLine(int line) { - Token t = getTokenListForLine(line); - t = t.getLastNonCommentNonWhitespaceToken(); - return tokenMaker.getShouldIndentNextLineAfter(t); - } - - /** - * Returns a token list for the specified segment of text representing the specified line number. This method is - * basically a wrapper for tokenMaker.getTokenList that takes into account the last token on the - * previous line to assure token accuracy. - * - * @param line - * The line number of text in the document, >= 0. - * @return A token list representing the specified line. - */ - public final Token getTokenListForLine(int line) { - Element map = getDefaultRootElement(); - Element elem = map.getElement(line); - int startOffset = elem.getStartOffset(); - // int endOffset = (line==map.getElementCount()-1 ? elem.getEndOffset() - 1: - // elem.getEndOffset() - 1); - int endOffset = elem.getEndOffset() - 1; // Why always "-1"? - try { - getText(startOffset, endOffset - startOffset, s); - } catch (BadLocationException ble) { - ble.printStackTrace(); - return null; - } - int initialTokenType = line == 0 ? Token.NULL : - getLastTokenTypeOnLine(line - 1); - return tokenMaker.getTokenList(s, initialTokenType, startOffset); - } - - boolean insertBreakSpecialHandling(ActionEvent e) { - Action a = tokenMaker.getInsertBreakAction(); - if (a != null) { - a.actionPerformed(e); - return true; - } - return false; - } - - /** - * Deserializes a document. - * - * @param s - * The stream to read from. - * @throws ClassNotFoundException - * @throws IOException - */ - private void readObject(ObjectInputStream s) - throws ClassNotFoundException, IOException { - s.defaultReadObject(); - this.s = new Segment(); - } - - /** - * Makes our private Segment s point to the text in our document referenced by the specified element. - * Note that line MUST be a valid line number in the document. - * - * @param line - * The line number you want to get. - */ - private final void setSharedSegment(int line) { - - Element map = getDefaultRootElement(); - // int numLines = map.getElementCount(); - - Element element = map.getElement(line); - if (element == null) - throw new InternalError("Invalid line number: " + line); - int startOffset = element.getStartOffset(); - // int endOffset = (line==numLines-1 ? - // element.getEndOffset()-1 : element.getEndOffset() - 1); - int endOffset = element.getEndOffset() - 1; // Why always "-1"? - try { - getText(startOffset, endOffset - startOffset, s); - } catch (BadLocationException ble) { - throw new InternalError("Text range not in document: " + - startOffset + "-" + endOffset); - } - - } - - /** - * Sets the syntax style being used for syntax highlighting in this document. What styles are supported by a - * document is determined by its {@link TokenMakerFactory}. By default, all RSyntaxDocuments support - * all languages built into RSyntaxTextArea. - * - * @param styleKey - * The new style to use, such as {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. If this style is not known or - * supported by this document, then {@link SyntaxConstants#SYNTAX_STYLE_NONE} is used. - */ - public void setSyntaxStyle(String styleKey) { - tokenMaker = tokenMakerFactory.getTokenMaker(styleKey); - updateSyntaxHighlightingInformation(); - } - - /** - * Sets the syntax style being used for syntax highlighting in this document. You should call this method if you've - * created a custom token maker for a language not normally supported by RSyntaxTextArea. - * - * @param tokenMaker - * The new token maker to use. - */ - public void setSyntaxStyle(TokenMaker tokenMaker) { - this.tokenMaker = tokenMaker; - updateSyntaxHighlightingInformation(); - } - - /** - * Sets the token maker factory used by this document. - * - * @param tmf - * The TokenMakerFactory for this document. If this is null, a default factory - * is used. - */ - public void setTokenMakerFactory(TokenMakerFactory tmf) { - tokenMakerFactory = tmf != null ? tmf : - TokenMakerFactory.getDefaultInstance(); - } - - /** - * Sets whether whitespace is visible. This property is actually setting whether the tokens generated from this - * document "paint" something when they represent whitespace. - * - * @param visible - * Whether whitespace should be visible. - */ - public void setWhitespaceVisible(boolean visible, RSyntaxTextArea textArea) { - tokenMaker.setWhitespaceVisible(visible, textArea); - } - - /** - * Loops through the last-tokens-on-lines array from a specified point onward, updating last-token values until they - * stop changing. This should be called when lines are updated/inserted/removed, as doing so may cause lines below - * to change color. - * - * @param line - * The first line to check for a change in last-token value. - * @param numLines - * The number of lines in the document. - * @param previousTokenType - * The last-token value of the line just before line. - * @return The last line that needs repainting. - */ - private int updateLastTokensBelow(int line, int numLines, int previousTokenType) { - - int firstLine = line; - - // Loop through all lines past our starting point. Update even the last - // line's info, even though there aren't any lines after it that depend - // on it changing for them to be changed, as its state may be used - // elsewhere in the library. - int end = numLines; - // System.err.println("--- end==" + end + " (numLines==" + numLines + ")"); - while (line < end) { - - setSharedSegment(line); // Sets s's text to that of line 'line' in the document. - - int oldTokenType = lastTokensOnLines.get(line); - int newTokenType = tokenMaker.getLastTokenTypeOnLine(s, previousTokenType); - // System.err.println("---------------- line " + line + "; oldTokenType==" + oldTokenType + - // ", newTokenType==" + newTokenType + ", s=='" + s + "'"); - - // If this line's end-token value didn't change, stop here. Note - // that we're saying this line needs repainting; this is because - // the beginning of this line did indeed change color, but the - // end didn't. - if (oldTokenType == newTokenType) { - // System.err.println("... ... ... repainting lines " + firstLine + "-" + line); - fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, DocumentEvent.EventType.CHANGE)); - return line; - } - - // If the line's end-token value did change, update it and - // keep going. - // NOTE: "setUnsafe" is okay here as the bounds checking was - // already done in lastTokensOnLines.get(line) above. - lastTokensOnLines.setUnsafe(line, newTokenType); - previousTokenType = newTokenType; - line++; - - } // End of while (line firstLine) { - // System.err.println("... ... ... repainting lines " + firstLine + "-" + line); - fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, - DocumentEvent.EventType.CHANGE)); - } - - return line; - - } - - /** - * Updates internal state information; e.g. the "last tokens on lines" data. After this, a changed update is fired - * to let listeners know that the document's structure has changed. - *

- * - * This is called internally whenever the syntax style changes. - */ - protected void updateSyntaxHighlightingInformation() { - - // Reinitialize the "last token on each line" array. Note that since - // the actual text in the document isn't changing, the number of lines - // is the same. - Element map = getDefaultRootElement(); - int numLines = map.getElementCount(); - int lastTokenType = Token.NULL; - for (int i = 0; i < numLines; i++) { - setSharedSegment(i); - lastTokenType = tokenMaker.getLastTokenTypeOnLine(s, lastTokenType); - lastTokensOnLines.set(i, lastTokenType); - } - - // Let everybody know that syntax styles have (probably) changed. - fireChangedUpdate(new DefaultDocumentEvent( - 0, numLines - 1, DocumentEvent.EventType.CHANGE)); - - } - - /** - * Document content that provides access to individual characters. - * - * @author Robert Futrell - * @version 1.0 - */ - private static class RGapContent extends GapContent { - - public RGapContent() { - } - - public char charAt(int offset) throws BadLocationException { - if (offset < 0 || offset >= length()) { - throw new BadLocationException("Invalid offset", offset); - } - int g0 = getGapStart(); - char[] array = (char[]) getArray(); - if (offset < g0) { // below gap - return array[offset]; - } - return array[getGapEnd() + offset - g0]; // above gap - } - - } - -} \ No newline at end of file +public class RSyntaxDocument extends RDocument implements Iterable, + SyntaxConstants { + + /** + * Creates a {@link TokenMaker} appropriate for a given programming + * language. + */ + private transient TokenMakerFactory tokenMakerFactory; + + /** + * Splits text into tokens for the current programming language. + */ + private transient TokenMaker tokenMaker; + + /** + * The current syntax style. Only cached to keep this class serializable. + */ + private String syntaxStyle; + + /** + * Array of values representing the "last token type" on each line. This + * is used in cases such as multi-line comments: if the previous line + * ended with an (unclosed) multi-line comment, we can use this knowledge + * and start the current line's syntax highlighting in multi-line comment + * state. + */ + protected transient DynamicIntArray lastTokensOnLines; + + private transient int lastLine = -1; + private transient Token cachedTokenList; + private transient int useCacheCount = 0; + private transient int tokenRetrievalCount = 0; + + private transient Segment s; + + /** + * If this is set to true, debug information about how much + * token caching is helping is printed to stdout. + */ + private static final boolean DEBUG_TOKEN_CACHING = false; + + + /** + * Constructs a plain text document. A default root element is created, + * and the tab size set to 5. + * + * @param syntaxStyle The syntax highlighting scheme to use. + */ + public RSyntaxDocument(String syntaxStyle) { + this(null, syntaxStyle); + } + + + /** + * Constructs a plain text document. A default root element is created, + * and the tab size set to 5. + * + * @param tmf The TokenMakerFactory for this document. If + * this is null, a default factory is used. + * @param syntaxStyle The syntax highlighting scheme to use. + */ + public RSyntaxDocument(TokenMakerFactory tmf, String syntaxStyle) { + putProperty(tabSizeAttribute, 5); + lastTokensOnLines = new DynamicIntArray(400); + lastTokensOnLines.add(Token.NULL); // Initial (empty) line. + s = new Segment(); + setTokenMakerFactory(tmf); + setSyntaxStyle(syntaxStyle); + } + + + /** + * Alerts all listeners to this document of an insertion. This is + * overridden so we can update our syntax highlighting stuff.

+ * The syntax highlighting stuff has to be here instead of in + * insertUpdate because insertUpdate is not + * called by the undo/redo actions, but this method is. + * + * @param e The change. + */ + @Override + protected void fireInsertUpdate(DocumentEvent e) { + + cachedTokenList = null; + + /* + * Now that the text is actually inserted into the content and + * element structure, we can update our token elements and "last + * tokens on lines" structure. + */ + + Element lineMap = getDefaultRootElement(); + DocumentEvent.ElementChange change = e.getChange(lineMap); + Element[] added = change==null ? null : change.getChildrenAdded(); + + int numLines = lineMap.getElementCount(); + int line = lineMap.getElementIndex(e.getOffset()); + int previousLine = line - 1; + int previousTokenType = (previousLine>-1 ? + lastTokensOnLines.get(previousLine) : Token.NULL); + + // If entire lines were added... + if (added!=null && added.length>0) { + + Element[] removed = change.getChildrenRemoved(); + int numRemoved = removed!=null ? removed.length : 0; + + int endBefore = line + added.length - numRemoved; + //System.err.println("... adding lines: " + line + " - " + (endBefore-1)); + //System.err.println("... ... added: " + added.length + ", removed:" + numRemoved); + for (int i=line; i0). + + // Otherwise, text was inserted on a single line... + else { + + // Update last tokens for lines below until they stop changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } // End of else. + + // Let all listeners know about the insertion. + super.fireInsertUpdate(e); + + } + + + /** + * This method is called AFTER the content has been inserted into the + * document and the element structure has been updated.

+ * The syntax-highlighting updates need to be done here (as opposed to + * an override of postRemoveUpdate) as this method is called + * in response to undo/redo events, whereas postRemoveUpdate + * is not.

+ * Now that the text is actually inserted into the content and element + * structure, we can update our token elements and "last tokens on + * lines" structure. + * + * @param chng The change that occurred. + * @see #removeUpdate + */ + @Override + protected void fireRemoveUpdate(DocumentEvent chng) { + + cachedTokenList = null; + Element lineMap = getDefaultRootElement(); + int numLines = lineMap.getElementCount(); + + DocumentEvent.ElementChange change = chng.getChange(lineMap); + Element[] removed = change==null ? null : change.getChildrenRemoved(); + + // If entire lines were removed... + if (removed!=null && removed.length>0) { + + int line = change.getIndex(); // First line entirely removed. + int previousLine = line - 1; // Line before that. + int previousTokenType = (previousLine>-1 ? + lastTokensOnLines.get(previousLine) : Token.NULL); + + Element[] added = change.getChildrenAdded(); + int numAdded = added==null ? 0 : added.length; + + // Remove the cached last-token values for the removed lines. + int endBefore = line + removed.length - numAdded; + //System.err.println("... removing lines: " + line + " - " + (endBefore-1)); + //System.err.println("... added: " + numAdded + ", removed: " + removed.length); + + lastTokensOnLines.removeRange(line, endBefore); // Removing values for lines [line-(endBefore-1)]. + //System.err.println("--------- lastTokensOnLines.size() == " + lastTokensOnLines.getSize()); + + // Update last tokens for lines below until they've stopped changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } // End of if (removed!=null && removed.size()>0). + + // Otherwise, text was removed from just one line... + else { + + int line = lineMap.getElementIndex(chng.getOffset()); + if (line>=lastTokensOnLines.getSize()) { + return; // If we're editing the last line in a document... + } + + int previousLine = line - 1; + int previousTokenType = (previousLine>-1 ? + lastTokensOnLines.get(previousLine) : Token.NULL); + //System.err.println("previousTokenType for line : " + previousLine + " is " + previousTokenType); + // Update last tokens for lines below until they've stopped changing. + updateLastTokensBelow(line, numLines, previousTokenType); + + } + + // Let all of our listeners know about the removal. + super.fireRemoveUpdate(chng); + + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + * + * @param type The token type. + * @return The closest "standard" token type. If a mapping is not defined + * for this language, then type is returned. + */ + public int getClosestStandardTokenTypeForInternalType(int type) { + return tokenMaker.getClosestStandardTokenTypeForInternalType(type); + } + + + /** + * Returns whether closing markup tags should be automatically completed. + * This method only returns true if + * {@link #getLanguageIsMarkup()} also returns true. + * + * @return Whether markup closing tags should be automatically completed. + * @see #getLanguageIsMarkup() + */ + public boolean getCompleteMarkupCloseTags() { + // TODO: Remove terrible dependency on AbstractMarkupTokenMaker + return getLanguageIsMarkup() && + ((AbstractMarkupTokenMaker)tokenMaker).getCompleteCloseTags(); + } + + + /** + * Returns whether the current programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return tokenMaker.getCurlyBracesDenoteCodeBlocks(languageIndex); + } + + + /** + * Returns whether the current language is a markup language, such as + * HTML, XML or PHP. + * + * @return Whether the current language is a markup language. + */ + public boolean getLanguageIsMarkup() { + return tokenMaker.isMarkupLanguage(); + } + + + /** + * Returns the token type of the last token on the given line. + * + * @param line The line to inspect. + * @return The token type of the last token on the specified line. If + * the line is invalid, an exception is thrown. + */ + public int getLastTokenTypeOnLine(int line) { + return lastTokensOnLines.get(line); + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in this programming language. + * + * @return The start and end strings to add to a line to "comment" + * it out. A null value for either means there + * is no string to add for that part. A value of + * null for the array means this language + * does not support commenting/uncommenting lines. + */ + public String[] getLineCommentStartAndEnd(int languageIndex) { + return tokenMaker.getLineCommentStartAndEnd(languageIndex); + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + boolean getMarkOccurrencesOfTokenType(int type) { + return tokenMaker.getMarkOccurrencesOfTokenType(type); + } + + + /** + * Returns the occurrence marker for the current language. + * + * @return The occurrence marker. + */ + OccurrenceMarker getOccurrenceMarker() { + return tokenMaker.getOccurrenceMarker(); + } + + + /** + * This method returns whether auto indentation should be done if Enter + * is pressed at the end of the specified line. + * + * @param line The line to check. + * @return Whether an extra indentation should be done. + */ + public boolean getShouldIndentNextLine(int line) { + Token t = getTokenListForLine(line); + t = t.getLastNonCommentNonWhitespaceToken(); + return tokenMaker.getShouldIndentNextLineAfter(t); + } + + + /** + * Returns the syntax style being used. + * + * @return The syntax style. + * @see #setSyntaxStyle(String) + */ + public String getSyntaxStyle() { + return syntaxStyle; + } + + + /** + * Returns a token list for the specified segment of text representing + * the specified line number. This method is basically a wrapper for + * tokenMaker.getTokenList that takes into account the last + * token on the previous line to assure token accuracy. + * + * @param line The line number of text in the document, + * >= 0. + * @return A token list representing the specified line. + */ + public final Token getTokenListForLine(int line) { + + tokenRetrievalCount++; + if (line==lastLine && cachedTokenList!=null) { + if (DEBUG_TOKEN_CACHING) { + useCacheCount++; + System.err.println("--- Using cached line; ratio now: " + + useCacheCount + "/" + tokenRetrievalCount); + } + return cachedTokenList; + } + lastLine = line; + + Element map = getDefaultRootElement(); + Element elem = map.getElement(line); + int startOffset = elem.getStartOffset(); + //int endOffset = (line==map.getElementCount()-1 ? elem.getEndOffset() - 1: + // elem.getEndOffset() - 1); + int endOffset = elem.getEndOffset() - 1; // Why always "-1"? + try { + getText(startOffset,endOffset-startOffset, s); + } catch (BadLocationException ble) { + ble.printStackTrace(); + return null; + } + int initialTokenType = line==0 ? Token.NULL : + getLastTokenTypeOnLine(line-1); + + //return tokenMaker.getTokenList(s, initialTokenType, startOffset); + cachedTokenList = tokenMaker.getTokenList(s, initialTokenType, startOffset); + return cachedTokenList; + + } + + + boolean insertBreakSpecialHandling(ActionEvent e) { + Action a = tokenMaker.getInsertBreakAction(); + if (a!=null) { + a.actionPerformed(e); + return true; + } + return false; + } + + + /** + * Returns whether a character could be part of an "identifier" token + * in a specific language. This is used to identify such things as the + * bounds of the "word" to select on double-clicking. + * + * @param languageIndex The language index the character was found in. + * @param ch The character. + * @return Whether the character could be part of an "identifier" token. + */ + public boolean isIdentifierChar(int languageIndex, char ch) { + return tokenMaker.isIdentifierChar(languageIndex, ch); + } + + + /** + * Returns an iterator over the paintable tokens in this document. Results + * are undefined if this document is modified while the iterator is being + * iterated through, so this should only be used on the EDT.

+ * + * The remove() method of the returned iterator will throw + * an UnsupportedOperationException. + * + * @return An iterator. + */ + @Override + public Iterator iterator() { + return new TokenIterator(this); + } + + + /** + * Deserializes a document. + * + * @param in The stream to read from. + * @throws ClassNotFoundException + * @throws IOException + */ + private void readObject(ObjectInputStream in) + throws ClassNotFoundException, IOException { + + in.defaultReadObject(); + + // Install default TokenMakerFactory. To support custom TokenMakers, + // both JVM's should install default TokenMakerFactories that support + // the language they want to use beforehand. + setTokenMakerFactory(null); + + // Handle other transient stuff + this.s = new Segment(); + int lineCount = getDefaultRootElement().getElementCount(); + lastTokensOnLines = new DynamicIntArray(lineCount); + setSyntaxStyle(syntaxStyle); // Actually install (transient) TokenMaker + + } + + + /** + * Makes our private Segment s point to the text in our + * document referenced by the specified element. Note that + * line MUST be a valid line number in the document. + * + * @param line The line number you want to get. + */ + private void setSharedSegment(int line) { + + Element map = getDefaultRootElement(); + //int numLines = map.getElementCount(); + + Element element = map.getElement(line); + if (element==null) { + throw new InternalError("Invalid line number: " + line); + } + int startOffset = element.getStartOffset(); + //int endOffset = (line==numLines-1 ? + // element.getEndOffset()-1 : element.getEndOffset() - 1); + int endOffset = element.getEndOffset()-1; // Why always "-1"? + try { + getText(startOffset, endOffset-startOffset, s); + } catch (BadLocationException ble) { + throw new InternalError("Text range not in document: " + + startOffset + "-" + endOffset); + } + + } + + + /** + * Sets the syntax style being used for syntax highlighting in this + * document. What styles are supported by a document is determined by its + * {@link TokenMakerFactory}. By default, all RSyntaxDocuments + * support all languages built into RSyntaxTextArea. + * + * @param styleKey The new style to use, such as + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. If this style is not + * known or supported by this document, then + * {@link SyntaxConstants#SYNTAX_STYLE_NONE} is used. + * @see #setSyntaxStyle(TokenMaker) + * @see #getSyntaxStyle() + */ + public void setSyntaxStyle(String styleKey) { + tokenMaker = tokenMakerFactory.getTokenMaker(styleKey); + updateSyntaxHighlightingInformation(); + this.syntaxStyle = styleKey; + } + + + /** + * Sets the syntax style being used for syntax highlighting in this + * document. You should call this method if you've created a custom token + * maker for a language not normally supported by + * RSyntaxTextArea. + * + * @param tokenMaker The new token maker to use. + * @see #setSyntaxStyle(String) + */ + public void setSyntaxStyle(TokenMaker tokenMaker) { + this.tokenMaker = tokenMaker; + updateSyntaxHighlightingInformation(); + this.syntaxStyle = "text/unknown"; // TODO: Make me public? + } + + + /** + * Sets the token maker factory used by this document. + * + * @param tmf The TokenMakerFactory for this document. If + * this is null, a default factory is used. + */ + public void setTokenMakerFactory(TokenMakerFactory tmf) { + tokenMakerFactory = tmf!=null ? tmf : + TokenMakerFactory.getDefaultInstance(); + } + + + /** + * Loops through the last-tokens-on-lines array from a specified point + * onward, updating last-token values until they stop changing. This + * should be called when lines are updated/inserted/removed, as doing + * so may cause lines below to change color. + * + * @param line The first line to check for a change in last-token value. + * @param numLines The number of lines in the document. + * @param previousTokenType The last-token value of the line just before + * line. + * @return The last line that needs repainting. + */ + private int updateLastTokensBelow(int line, int numLines, int previousTokenType) { + + int firstLine = line; + + // Loop through all lines past our starting point. Update even the last + // line's info, even though there aren't any lines after it that depend + // on it changing for them to be changed, as its state may be used + // elsewhere in the library. + int end = numLines; + //System.err.println("--- end==" + end + " (numLines==" + numLines + ")"); + while (linefirstLine) { + //System.err.println("... ... ... repainting lines " + firstLine + "-" + line); + fireChangedUpdate(new DefaultDocumentEvent(firstLine, line, + DocumentEvent.EventType.CHANGE)); + } + + return line; + + } + + + /** + * Updates internal state information; e.g. the "last tokens on lines" + * data. After this, a changed update is fired to let listeners know that + * the document's structure has changed.

+ * + * This is called internally whenever the syntax style changes. + */ + private void updateSyntaxHighlightingInformation() { + + // Reinitialize the "last token on each line" array. Note that since + // the actual text in the document isn't changing, the number of lines + // is the same. + Element map = getDefaultRootElement(); + int numLines = map.getElementCount(); + int lastTokenType = Token.NULL; + for (int i=0; iRTextArea that adds syntax highlighting of certain programming languages to its list of - * features. Languages currently supported include: - *

    - *
  • ActionScript - *
  • Assembler (X86) - *
  • BBCode - *
  • C - *
  • C++ - *
  • CSS - *
  • C# - *
  • Clojure - *
  • Delphi - *
  • Fortran - *
  • Groovy - *
  • HTML - *
  • Java - *
  • JavaScript - *
  • JSP - *
  • Lisp - *
  • Lua - *
  • Make - *
  • MXML - *
  • Perl - *
  • PHP - *
  • Ruby - *
  • SAS - *
  • Scala - *
  • SQL - *
  • Tcl - *
  • UNIX shell scripts - *
  • Windows batch - *
  • XML files - *
- * + * An extension of RTextArea that adds syntax highlighting + * of certain programming languages to its list of features. Languages + * currently supported include: + * + * + * + * + * + * + *
+ *
    + *
  • ActionScript + *
  • Assembler (X86) + *
  • BBCode + *
  • C + *
  • C++ + *
  • CSS + *
  • C# + *
  • Clojure + *
  • Dart + *
  • Delphi + *
  • DTD + *
  • Fortran + *
  • Groovy + *
  • HTML + *
  • htaccess + *
  • Java + *
  • JavaScript + *
  • .jshintrc + *
  • JSP + *
+ *
+ *
    + *
  • LaTeX + *
  • Lisp + *
  • Lua + *
  • Make + *
  • MXML + *
  • NSIS + *
  • Perl + *
  • PHP + *
  • Properties files + *
  • Python + *
  • Ruby + *
  • SAS + *
  • Scala + *
  • SQL + *
  • Tcl + *
  • UNIX shell scripts + *
  • Visual Basic + *
  • Windows batch + *
  • XML files + *
+ *
+ * * Other added features include: - *
    - *
  • Bracket matching - *
  • Auto-indentation - *
  • Copy as RTF - *
  • Clickable hyperlinks (if the language scanner being used supports it) - *
  • A pluggable "parser" system that can be used to implement syntax validation, spell checking, etc. + *
      + *
    • Code folding + *
    • Bracket matching + *
    • Auto-indentation + *
    • Copy as RTF + *
    • Clickable hyperlinks (if the language scanner being used supports it) + *
    • A pluggable "parser" system that can be used to implement syntax + * validation, spell checking, etc. *
    - * - * It is recommended that you use an instance of {@link org.fife.ui.rtextarea.RTextScrollPane} instead of a regular - * JScrollPane as this class allows you to add line numbers and bookmarks easily to your text area. - * + * + * It is recommended that you use an instance of + * {@link org.fife.ui.rtextarea.RTextScrollPane} instead of a regular + * JScrollPane as this class allows you to add line numbers and + * bookmarks easily to your text area. + * * @author Robert Futrell - * @version 1.3 + * @version 3.0.0 + * @see TextEditorPane */ public class RSyntaxTextArea extends RTextArea implements SyntaxConstants { - public static final String ANIMATE_BRACKET_MATCHING_PROPERTY = "RSTA.animateBracketMatching"; - public static final String ANTIALIAS_PROPERTY = "RSTA.antiAlias"; - public static final String AUTO_INDENT_PROPERTY = "RSTA.autoIndent"; - public static final String BRACKET_MATCHING_PROPERTY = "RSTA.bracketMatching"; - public static final String CLEAR_WHITESPACE_LINES_PROPERTY = "RSTA.clearWhitespaceLines"; - public static final String CLOSE_CURLY_BRACES_PROPERTY = "RSTA.closeCurlyBraces"; - public static final String CLOSE_MARKUP_TAGS_PROPERTY = "RSTA.closeMarkupTags"; - public static final String EOL_VISIBLE_PROPERTY = "RSTA.eolMarkersVisible"; - public static final String FOCUSABLE_TIPS_PROPERTY = "RSTA.focusableTips"; - public static final String FRACTIONAL_FONTMETRICS_PROPERTY = "RSTA.fractionalFontMetrics"; - public static final String HYPERLINKS_ENABLED_PROPERTY = "RSTA.hyperlinksEnabled"; - public static final String MARK_OCCURRENCES_PROPERTY = "RSTA.markOccurrences"; - public static final String MARKED_OCCURRENCES_CHANGED_PROPERTY = "RSTA.markedOccurrencesChanged"; - public static final String PARSER_NOTICES_PROPERTY = "RSTA.parserNotices"; - public static final String SYNTAX_SCHEME_PROPERTY = "RSTA.syntaxScheme"; - public static final String SYNTAX_STYLE_PROPERTY = "RSTA.syntaxStyle"; - public static final String VISIBLE_WHITESPACE_PROPERTY = "RSTA.visibleWhitespace"; - - private static final Color DEFAULT_BRACKET_MATCH_BG_COLOR = new Color(234, 234, 255); - private static final Color DEFAULT_BRACKET_MATCH_BORDER_COLOR = new Color(0, 0, 128); - private static final Color DEFAULT_SELECTION_COLOR = new Color(200, 200, 255); - - /** - * The key for the syntax style to be highlighting. - */ - private String syntaxStyleKey; - - /** - * The colors used for syntax highlighting. - */ - private SyntaxScheme syntaxScheme; - - /** - * Handles code templates. - */ - private static CodeTemplateManager codeTemplateManager; - - /** - * Whether or not templates are enabled. - */ - private static boolean templatesEnabled; - - /** - * The rectangle surrounding the "matched bracket" if bracket matching is enabled. - */ - Rectangle match; - - /** - * Colors used for the "matched bracket" if bracket matching is enabled. - */ - private Color matchedBracketBGColor; - private Color matchedBracketBorderColor; - - /** - * The location of the last matched bracket. - */ - private int lastBracketMatchPos; - - /** - * Whether or not bracket matching is enabled. - */ - private boolean bracketMatchingEnabled; - - /** - * Whether or not bracket matching is animated. - */ - private boolean animateBracketMatching; - - private BracketMatchingTimer bracketRepaintTimer; - - /** - * Whether or not auto-indent is on. - */ - private boolean autoIndentEnabled; - - /** - * Whether curly braces should be closed on Enter key presses, (if the current language supports it). - */ - private boolean closeCurlyBraces; - - /** - * Whether closing markup tags should be automatically completed when "</" is typed (if the current - * language is a markup language). - */ - private boolean closeMarkupTags; - - /** - * Whether or not lines with nothing but whitespace are "made empty." - */ - private boolean clearWhitespaceLines; - - /** - * Whether we are displaying visible whitespace (spaces and tabs). - */ - private boolean whitespaceVisible; - - /** - * Whether EOL markers should be visible at the end of each line. - */ - private boolean eolMarkersVisible; - - /** - * Whether hyperlinks are enabled (must be supported by the syntax scheme being used). - */ - private boolean hyperlinksEnabled; - - /** - * The color to use when painting hyperlinks. - */ - private Color hyperlinkFG; - - /** - * Mask used to determine if the correct key is being held down to scan for hyperlinks (ctrl, meta, etc.). - */ - private int linkScanningMask; - - /** - * Used during "Copy as RTF" operations. - */ - private RtfGenerator rtfGenerator; - - /** - * Handles "mark occurrences" support. - */ - private MarkOccurrencesSupport markOccurrencesSupport; - - /** - * The color used to render "marked occurrences." - */ - private Color markOccurrencesColor; - - /** - * Metrics of the text area's font. - */ - private FontMetrics defaultFontMetrics; - - /** - * Manages running the parser. - */ - private ParserManager parserManager; - - /** - * Whether the editor is currently scanning for hyperlinks on mouse movement. - */ - private boolean isScanningForLinks; - - private int hoveredOverLinkOffset; - - /** - * Whether "focusable" tool tips are used instead of standard ones. - */ - private boolean useFocusableTips; - - /** - * The last focusable tip displayed. - */ - private FocusableTip focusableTip; - - private int lineHeight; // Height of a line of text; same for default, bold & italic. - private int maxAscent; - - public int getMaxAscent() { - return maxAscent; - } - - private String aaHintFieldName; - private Object aaHint; - private boolean fractionalFontMetricsEnabled; - - /** - * Constructor. - */ - public RSyntaxTextArea() { - init(); - } - - /** - * Constructor. - * - * @param doc - * The document for the editor. - */ - public RSyntaxTextArea(RSyntaxDocument doc) { - super(doc); - init(); - } - - /** - * Constructor. - * - * @param text - * The initial text to display. - */ - public RSyntaxTextArea(String text) { - super(text); - init(); - } - - /** - * Constructor. - * - * @param rows - * The number of rows to display. - * @param cols - * The number of columns to display. - * @throws IllegalArgumentException - * If either rows or cols is negative. - */ - public RSyntaxTextArea(int rows, int cols) { - super(rows, cols); - init(); - } - - /** - * Constructor. - * - * @param text - * The initial text to display. - * @param rows - * The number of rows to display. - * @param cols - * The number of columns to display. - * @throws IllegalArgumentException - * If either rows or cols is negative. - */ - public RSyntaxTextArea(String text, int rows, int cols) { - super(text, rows, cols); - init(); - } - - /** - * Constructor. - * - * @param doc - * The document for the editor. - * @param text - * The initial text to display. - * @param rows - * The number of rows to display. - * @param cols - * The number of columns to display. - * @throws IllegalArgumentException - * If either rows or cols is negative. - */ - public RSyntaxTextArea(RSyntaxDocument doc, String text, int rows, int cols) { - super(doc, text, rows, cols); - init(); - } - - /** - * Creates a new RSyntaxTextArea. - * - * @param textMode - * Either INSERT_MODE or OVERWRITE_MODE. - */ - public RSyntaxTextArea(int textMode) { - super(textMode); - init(); - } - - /** - * Adds an "active line range" listener to this text area. - * - * @param l - * The listener to add. - * @see #removeActiveLineRangeListener(ActiveLineRangeListener) - */ - public void addActiveLineRangeListener(ActiveLineRangeListener l) { - listenerList.add(ActiveLineRangeListener.class, l); - } - - /** - * Adds a hyperlink listener to this text area. - * - * @param l - * The listener to add. - * @see #removeHyperlinkListener(HyperlinkListener) - */ - public void addHyperlinkListener(HyperlinkListener l) { - listenerList.add(HyperlinkListener.class, l); - } - - /** - * Updates the font metrics the first time we're displayed. - */ - public void addNotify() { - - super.addNotify(); - - // We know we've just been connected to a screen resource (by - // definition), so initialize our font metrics objects. - refreshFontMetrics(getGraphics2D(getGraphics())); - - // Re-start parsing if we were removed from one container and added - // to another - if (parserManager != null) { - parserManager.restartParsing(); - } - - } - - /** - * Adds the parser to "validate" the source code in this text area. This can be anything from a spell checker to a - * "compiler" that verifies source code. - * - * @param parser - * The new parser. A value of null will do nothing. - * @see #getParser(int) - * @see #getParserCount() - * @see #removeParser(Parser) - */ - public void addParser(Parser parser) { - if (parserManager == null) { - parserManager = new ParserManager(this); - } - parserManager.addParser(parser); - } - - /** - * Recalculates the height of a line in this text area and the maximum ascent of all fonts displayed. - */ - private void calculateLineHeight() { - - lineHeight = maxAscent = 0; - - // Each token style. - for (int i = 0; i < syntaxScheme.styles.length; i++) { - Style ss = syntaxScheme.styles[i]; - if (ss != null && ss.font != null) { - FontMetrics fm = getFontMetrics(ss.font); - int height = fm.getHeight(); - if (height > lineHeight) - lineHeight = height; - int ascent = fm.getMaxAscent(); - if (ascent > maxAscent) - maxAscent = ascent; - } - } - - // The text area's (default) font). - Font temp = getFont(); - FontMetrics fm = getFontMetrics(temp); - int height = fm.getHeight(); - if (height > lineHeight) { - lineHeight = height; - } - int ascent = fm.getMaxAscent(); - if (ascent > maxAscent) { - maxAscent = ascent; - } - - } - - /** - * Removes all parsers from this text area. - * - * @see #removeParser(Parser) - */ - public void clearParsers() { - if (parserManager != null) { - parserManager.clearParsers(); - } - } - - /** - * Clones a token list. This is necessary as tokens are reused in {@link RSyntaxDocument}, so we can't simply use - * the ones we are handed from it. - * - * @param t - * The token list to clone. - * @return The clone of the token list. - */ - private Token cloneTokenList(Token t) { - - if (t == null) { - return null; - } - - Token clone = new DefaultToken(); - clone.copyFrom(t); - Token cloneEnd = clone; - - while ((t = t.getNextToken()) != null) { - Token temp = new DefaultToken(); - temp.copyFrom(t); - cloneEnd.setNextToken(temp); - cloneEnd = temp; - } - - return clone; - - } - - /** - * Copies the currently selected text to the system clipboard, with any necessary style information (font, - * foreground color and background color). Does nothing for null selections. - */ - public void copyAsRtf() { - - int selStart = getSelectionStart(); - int selEnd = getSelectionEnd(); - if (selStart == selEnd) { - return; - } - - // Make sure there is a system clipboard, and that we can write - // to it. - SecurityManager sm = System.getSecurityManager(); - if (sm != null) { - try { - sm.checkSystemClipboardAccess(); - } catch (SecurityException se) { - UIManager.getLookAndFeel().provideErrorFeedback(null); - return; - } - } - Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); - - // Create the RTF selection. - RtfGenerator gen = getRTFGenerator(); - Token tokenList = getTokenListFor(selStart, selEnd); - for (Token t = tokenList; t != null; t = t.getNextToken()) { - if (t.isPaintable()) { - if (t.textCount == 1 && t.text[t.textOffset] == '\n') { - gen.appendNewline(); - } - else { - Font font = getFontForTokenType(t.type); - Color bg = getBackgroundForTokenType(t.type); - boolean underline = getUnderlineForToken(t); - // Small optimization - don't print fg color if this - // is a whitespace color. Saves on RTF size. - if (t.isWhitespace()) { - gen.appendToDocNoFG(t.getLexeme(), font, bg, underline); - } - else { - Color fg = getForegroundForToken(t); - gen.appendToDoc(t.getLexeme(), font, fg, bg, underline); - } - } - } - } - - // Set the system clipboard contents to the RTF selection. - RtfTransferable contents = new RtfTransferable(gen.getRtf().getBytes()); - // System.out.println("*** " + new String(gen.getRtf().getBytes())); - try { - cb.setContents(contents, null); - } catch (IllegalStateException ise) { - UIManager.getLookAndFeel().provideErrorFeedback(null); - return; - } - - } - - /** - * Returns the document to use for an RSyntaxTextArea - * - * @return The document. - */ - protected Document createDefaultModel() { - return new RSyntaxDocument(SYNTAX_STYLE_NONE); - } - - /** - * Returns the caret event/mouse listener for RTextAreas. - * - * @return The caret event/mouse listener. - */ - protected RTAMouseListener createMouseListener() { - return new RSyntaxTextAreaMutableCaretEvent(this); - } - - /** - * Returns the a real UI to install on this text area. - * - * @return The UI. - */ - protected RTextAreaUI createRTextAreaUI() { - return new RSyntaxTextAreaUI(this); - } - - /** - * If the caret is on a bracket, this method finds the matching bracket, and if it exists, highlights it. - */ - protected final void doBracketMatching() { - - // We always need to repaint the "matched bracket" highlight if it - // exists. - if (match != null) { - repaint(match); - } - - // If a matching bracket is found, get its bounds and paint it! - int pos = RSyntaxUtilities.getMatchingBracketPosition(this); - if (pos > -1 && pos != lastBracketMatchPos) { - try { - match = modelToView(pos); - if (match != null) { // Happens if we're not yet visible - if (getAnimateBracketMatching()) { - bracketRepaintTimer.restart(); - } - repaint(match); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); // Shouldn't happen. - } - } - else if (pos == -1) { - // Set match to null so the old value isn't still repainted. - match = null; - bracketRepaintTimer.stop(); - } - lastBracketMatchPos = pos; - - } - - /** - * Notifies all listeners that a caret change has occurred. - * - * @param e - * The caret event. - */ - protected void fireCaretUpdate(CaretEvent e) { - super.fireCaretUpdate(e); - if (isBracketMatchingEnabled()) { - doBracketMatching(); - } - } - - /** - * Notifies all listeners that the active line range has changed. - * - * @param min - * The minimum "active" line, or -1. - * @param max - * The maximum "active" line, or -1. - */ - private void fireActiveLineRangeEvent(int min, int max) { - ActiveLineRangeEvent e = null; // Lazily created - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == ActiveLineRangeListener.class) { - if (e == null) { - e = new ActiveLineRangeEvent(this, min, max); - } - ((ActiveLineRangeListener) listeners[i + 1]).activeLineRangeChanged(e); - } - } - } - - /** - * Notifies all listeners that have registered interest for notification on this event type. The listener list is - * processed last to first. - * - * @param e - * The event to fire. - * @see EventListenerList - */ - private void fireHyperlinkUpdate(HyperlinkEvent e) { - // Guaranteed to return a non-null array - Object[] listeners = listenerList.getListenerList(); - // Process the listeners last to first, notifying - // those that are interested in this event - for (int i = listeners.length - 2; i >= 0; i -= 2) { - if (listeners[i] == HyperlinkListener.class) { - ((HyperlinkListener) listeners[i + 1]).hyperlinkUpdate(e); - } - } - } - - /** - * Notifies listeners that the marked occurrences for this text area have changed. - */ - void fireMarkedOccurrencesChanged() { - firePropertyChange(RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, - null, null); - } - - /** - * Fires a notification that the parser notices for this text area have changed. - */ - void fireParserNoticesChange() { - firePropertyChange(PARSER_NOTICES_PROPERTY, null, null); - } - - /** - * Forces the given {@link Parser} to re-parse the content of this text area. - *

    - * - * This method can be useful when a Parser can be configured as to what notices it returns. For - * example, if a Java language parser can be configured to set whether no serialVersionUID is a warning, error, or - * ignored, this method can be called after changing the expected notice type to have the document re-parsed. - * - * @param parser - * The index of the Parser to re-run. - * @see #getParser(int) - */ - public void forceReparsing(int parser) { - parserManager.forceReparsing(parser); - } - - /** - * Forces re-parsing with a specific parser. Note that if this parser is not installed on this text area, nothing - * will happen. - * - * @param parser - * The parser that should re-parse this text area's contents. This should be installed on this text area. - * @return Whether the parser was installed on this text area. - * @see #forceReparsing(int) - */ - public boolean forceReparsing(Parser parser) { - for (int i = 0; i < getParserCount(); i++) { - if (getParser(i) == parser) { - forceReparsing(i); - return true; - } - } - return false; - } - - /** - * Returns whether bracket matching should be animated. - * - * @return Whether bracket matching should be animated. - * @see #setAnimateBracketMatching(boolean) - */ - public boolean getAnimateBracketMatching() { - return animateBracketMatching; - } - - /** - * Returns the background color for tokens of the specified type. - * - * @param type - * The type of token. - * @return The background color to use for that token type. If this value is null then this token type - * has no special background color. - * @see #getForegroundForToken(Token) - */ - public Color getBackgroundForTokenType(int type) { - // Don't default to this.getBackground(), as Tokens simply don't - // paint a background if they get a null Color. - return syntaxScheme.styles[type].background; - } - - /** - * Returns whether curly braces should be automatically closed when a newline is entered after an opening curly - * brace. Note that this property is only honored for languages that use curly braces to denote code blocks. - * - * @return Whether curly braces should be automatically closed. - * @see #setCloseCurlyBraces(boolean) - */ - public boolean getCloseCurlyBraces() { - return closeCurlyBraces; - } - - /** - * Returns whether closing markup tags should be automatically completed when "</" is typed. Note - * that this property is only honored for markup languages, such as HTML, XML and PHP. - * - * @return Whether closing markup tags should be automatically completed. - * @see #setCloseMarkupTags(boolean) - */ - public boolean getCloseMarkupTags() { - return closeMarkupTags; - } - - /** - * Returns the code template manager for all instances of RSyntaxTextArea. The manager is lazily - * created. - * - * @return The code template manager. - * @see #setTemplatesEnabled(boolean) - */ - public static synchronized CodeTemplateManager getCodeTemplateManager() { - if (codeTemplateManager == null) { - codeTemplateManager = new CodeTemplateManager(); - } - return codeTemplateManager; - } - - /** - * Returns the default bracket-match background color. - * - * @return The color. - * @see #getDefaultBracketMatchBorderColor - */ - public static final Color getDefaultBracketMatchBGColor() { - return DEFAULT_BRACKET_MATCH_BG_COLOR; - } - - /** - * Returns the default bracket-match border color. - * - * @return The color. - * @see #getDefaultBracketMatchBGColor - */ - public static final Color getDefaultBracketMatchBorderColor() { - return DEFAULT_BRACKET_MATCH_BORDER_COLOR; - } - - /** - * Returns the default selection color for this text area. This color was chosen because it's light and - * RSyntaxTextArea does not change text color between selected/unselected text for contrast like - * regular JTextAreas do. - * - * @return The default selection color. - */ - public static Color getDefaultSelectionColor() { - return DEFAULT_SELECTION_COLOR; - } - - /** - * Returns the "default" syntax highlighting color scheme. The colors used are somewhat standard among syntax - * highlighting text editors. - * - * @return The default syntax highlighting color scheme. - * @see #restoreDefaultSyntaxScheme() - * @see #getSyntaxScheme() - * @see #setSyntaxScheme(SyntaxScheme) - */ - public SyntaxScheme getDefaultSyntaxScheme() { - return new SyntaxScheme(getFont()); - } - - /** - * Returns whether an EOL marker should be drawn at the end of each line. - * - * @return Whether EOL markers should be visible. - * @see #setEOLMarkersVisible(boolean) - * @see #isWhitespaceVisible() - */ - public boolean getEOLMarkersVisible() { - return eolMarkersVisible; - } - - /** - * Returns the font for tokens of the specified type. - * - * @param type - * The type of token. - * @return The font to use for that token type. - * @see #getFontMetricsForTokenType(int) - */ - public Font getFontForTokenType(int type) { - Font f = syntaxScheme.styles[type].font; - return f != null ? f : getFont(); - } - - /** - * Returns the font metrics for tokens of the specified type. - * - * @param type - * The type of token. - * @return The font metrics to use for that token type. - * @see #getFontForTokenType(int) - */ - public FontMetrics getFontMetricsForTokenType(int type) { - FontMetrics fm = syntaxScheme.styles[type].fontMetrics; - return fm != null ? fm : defaultFontMetrics; - } - - /** - * Returns the foreground color to use when painting a token. - * - * @param t - * The token. - * @return The foreground color to use for that token. This value is never null. - * @see #getBackgroundForTokenType(int) - */ - public Color getForegroundForToken(Token t) { - if (getHyperlinksEnabled() && t.isHyperlink() && - hoveredOverLinkOffset == t.offset) { - return hyperlinkFG; - } - return getForegroundForTokenType(t.type); - } - - /** - * Returns the foreground color to use when painting a token. This does not take into account whether the token is a - * hyperlink. - * - * @param type - * The token type. - * @return The foreground color to use for that token. This value is never null. - * @see #getForegroundForToken(Token) - */ - public Color getForegroundForTokenType(int type) { - Color fg = syntaxScheme.styles[type].foreground; - return fg != null ? fg : getForeground(); - } - - /** - * Returns whether fractional font metrics are enabled for this text area. - * - * @return Whether fractional font metrics are enabled. - * @see #setFractionalFontMetricsEnabled - * @see #getTextAntiAliasHint - */ - public boolean getFractionalFontMetricsEnabled() { - return fractionalFontMetricsEnabled; - } - - /** - * Returns a Graphics2D version of the specified graphics that has been initialized with the proper - * rendering hints. - * - * @param g - * The graphics context for which to get a Graphics2D. - * @return The Graphics2D. - */ - private final Graphics2D getGraphics2D(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - if (aaHint != null) { - g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, - aaHint); - } - if (fractionalFontMetricsEnabled) { - g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, - RenderingHints.VALUE_FRACTIONALMETRICS_ON); - } - return g2d; - } - - /** - * Returns the color to use when painting hyperlinks. - * - * @return The color to use when painting hyperlinks. - * @see #setHyperlinkForeground(Color) - * @see #getHyperlinksEnabled() - */ - public Color getHyperlinkForeground() { - return hyperlinkFG; - } - - /** - * Returns whether hyperlinks are enabled for this text area. - * - * @return Whether hyperlinks are enabled for this text area. - * @see #setHyperlinksEnabled(boolean) - */ - public boolean getHyperlinksEnabled() { - return hyperlinksEnabled; - } - - /** - * Returns the height to use for a line of text in this text area. - * - * @return The height of a line of text in this text area. - */ - public int getLineHeight() { - // System.err.println("... getLineHeight() returning " + lineHeight); - return lineHeight; - } - - /** - * Returns a list of "marked occurrences" in the text area. If there are no marked occurrences, this will be an - * empty list. - * - * @return The list of marked occurrences. - */ - public List getMarkedOccurrences() { - return ((RSyntaxTextAreaHighlighter) getHighlighter()). - getMarkedOccurrences(); - } - - /** - * Returns whether "Mark Occurrences" is enabled. - * - * @return Whether "Mark Occurrences" is enabled. - * @see #setMarkOccurrences(boolean) - */ - public boolean getMarkOccurrences() { - return markOccurrencesSupport != null; - } - - /** - * Returns the color used to "mark occurrences." - * - * @return The mark occurrences color. - * @see #setMarkOccurrencesColor(Color) - */ - public Color getMarkOccurrencesColor() { - return markOccurrencesColor; - } - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - boolean getMarkOccurrencesOfTokenType(int type) { - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - return doc.getMarkOccurrencesOfTokenType(type); - } - - /** - * Gets the color used as the background for a matched bracket. - * - * @return The color used. - * @see #setMatchedBracketBGColor - * @see #getMatchedBracketBorderColor - */ - public Color getMatchedBracketBGColor() { - return matchedBracketBGColor; - } - - /** - * Gets the color used as the border for a matched bracket. - * - * @return The color used. - * @see #setMatchedBracketBorderColor - * @see #getMatchedBracketBGColor - */ - public Color getMatchedBracketBorderColor() { - return matchedBracketBorderColor; - } - - /** - * Returns the matched bracket's rectangle, or null if there is currently no matched bracket. Note that - * this shouldn't ever be called by the user. - * - * @return The rectangle surrounding the matched bracket. - */ - public final Rectangle getMatchRectangle() { - return match; - } - - /** - * Returns the specified parser. - * - * @param index - * The {@link Parser} to retrieve. - * @return The Parser. - * @see #getParserCount() - * @see #addParser(Parser) - */ - public Parser getParser(int index) { - return parserManager.getParser(index); - } - - /** - * Returns the number of parsers operating on this text area. - * - * @return The parser count. - * @see #addParser(Parser) - */ - public int getParserCount() { - return parserManager == null ? 0 : parserManager.getParserCount(); - } - - /** - * Returns a list of the current parser notices for this text area. This method (like most Swing methods) should - * only be called on the EDT. - * - * @return The list of notices. This will be an empty list if there are none. - */ - public List getParserNotices() { - return parserManager == null ? new ArrayList(0) : - parserManager.getParserNotices(); - } - - /** - * Returns the RTF generator for this text area, lazily creating it if necessary. - * - * @return The RTF generator. - */ - private RtfGenerator getRTFGenerator() { - if (rtfGenerator == null) { - rtfGenerator = new RtfGenerator(); - } - else { - rtfGenerator.reset(); - } - return rtfGenerator; - } - - /** - * If auto-indent is enabled, this method returns whether a new line after this one should be indented (based on the - * standard indentation rules for the current programming language). For example, in Java, for a line containing: - * - *

    -     * for (int i=0; i<10; i++) {
    -     * 
    - * - * the following line should be indented. - * - * @param line - * The line to check. - * @return Whether a line inserted after this one should be auto-indented. If auto-indentation is disabled, this - * will always return false. - * @see #isAutoIndentEnabled() - */ - public boolean getShouldIndentNextLine(int line) { - if (isAutoIndentEnabled()) { - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - return doc.getShouldIndentNextLine(line); - } - return false; - } - - /** - * Returns what type of syntax highlighting this editor is doing. - * - * @return The style being used, such as {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. - * @see #setSyntaxEditingStyle(String) - * @see SyntaxConstants - */ - public String getSyntaxEditingStyle() { - return syntaxStyleKey; - } - - /** - * Returns all of the colors currently being used in syntax highlighting by this text component. - * - * @return An instance of SyntaxScheme that represents the colors currently being used for syntax - * highlighting. - * @see #setSyntaxScheme(SyntaxScheme) - */ - public SyntaxScheme getSyntaxScheme() { - return syntaxScheme; - } - - /** - * Returns whether or not templates are enabled for all instances of RSyntaxTextArea. - * - * @return Whether templates are enabled. - * @see #saveTemplates() - * @see #setTemplateDirectory(String) - * @see #setTemplatesEnabled(boolean) - */ - public static synchronized boolean getTemplatesEnabled() { - return templatesEnabled; - } - - /** - * Returns the rendering hint used when antialiasing text in this editor. - * - * @return The name of a field in java.awt.RenderingHints, or null if no text antialiasing - * is being done. - * @see #setTextAntiAliasHint(String) - * @see #getFractionalFontMetricsEnabled() - */ - public String getTextAntiAliasHint() { - return aaHintFieldName; - } - - /** - * Returns a token list for the given range in the document. - * - * @param startOffs - * The starting offset in the document. - * @param endOffs - * The end offset in the document. - * @return The first token in the token list. - */ - private Token getTokenListFor(int startOffs, int endOffs) { - - Token tokenList = null; - Token lastToken = null; - - Element map = getDocument().getDefaultRootElement(); - int startLine = map.getElementIndex(startOffs); - int endLine = map.getElementIndex(endOffs); - - for (int line = startLine; line <= endLine; line++) { - Token t = getTokenListForLine(line); - t = cloneTokenList(t); - if (tokenList == null) { - tokenList = t; - lastToken = tokenList; - } - else { - lastToken.setNextToken(t); - } - while (lastToken.getNextToken() != null && - lastToken.getNextToken().isPaintable()) { - lastToken = lastToken.getNextToken(); - } - if (line < endLine) { - // Document offset MUST be correct to prevent exceptions - // in getTokenListFor() - int docOffs = map.getElement(line).getEndOffset() - 1; - t = new DefaultToken(new char[] { '\n' }, 0, 0, docOffs, - Token.WHITESPACE); - lastToken.setNextToken(t); - lastToken = t; - } - } - - // Trim the beginning and end of the token list so that it starts - // at startOffs and ends at endOffs. - - // Be careful and check that startOffs is actually in the list. - // startOffs can be < the token list's start if the end "newline" - // character of a line is the first character selected (the token - // list returned for that line will be null, so the first token in - // the final token list will be from the next line and have a - // starting offset > startOffs?). - if (startOffs >= tokenList.offset) { - while (!tokenList.containsPosition(startOffs)) { - tokenList = tokenList.getNextToken(); - } - tokenList.makeStartAt(startOffs); - } - - Token temp = tokenList; - // Be careful to check temp for null here. It is possible that no - // token contains endOffs, if endOffs is at the end of a line. - while (temp != null && !temp.containsPosition(endOffs)) { - temp = temp.getNextToken(); - } - if (temp != null) { - temp.textCount = endOffs - temp.offset; - temp.setNextToken(null); - } - - return tokenList; - - } - - /** - * Returns a list of tokens representing the given line. - * - * @param line - * The line number to get tokens for. - * @return A linked list of tokens representing the line's text. - */ - public Token getTokenListForLine(int line) { - return ((RSyntaxDocument) getDocument()).getTokenListForLine(line); - } - - /** - * Returns the tool tip to display for a mouse event at the given location. This method is overridden to give a - * registered parser a chance to display a tool tip (such as an error description when the mouse is over an error - * highlight). - * - * @param e - * The mouse event. - */ - public String getToolTipText(MouseEvent e) { - - // Check parsers for tool tips first. - String text = null; - URL imageBase = null; - if (parserManager != null) { - ToolTipInfo info = parserManager.getToolTipText(e); - if (info != null) { // Should always be true - text = info.getToolTipText(); // May be null - imageBase = info.getImageBase(); // May be null - } - } - if (text == null) { - text = super.getToolTipText(e); - } - - // Do we want to use "focusable" tips? - if (getUseFocusableTips()) { - if (text != null) { - if (focusableTip == null) { - focusableTip = new FocusableTip(this, parserManager); - } - focusableTip.setImageBase(imageBase); - focusableTip.toolTipRequested(e, text); - } - // No tooltip text at new location - hide tip window if one is - // currently visible - else if (focusableTip != null) { - focusableTip.possiblyDisposeOfTipWindow(); - } - return null; - } - - return text; // Standard tool tips - - } - - /** - * Returns whether the specified token should be underlined. A token is underlined if its syntax style includes - * underlining, or if it is a hyperlink and hyperlinks are enabled. - * - * @param t - * The token. - * @return Whether the specified token should be underlined. - */ - public boolean getUnderlineForToken(Token t) { - return (t.isHyperlink() && getHyperlinksEnabled()) || - syntaxScheme.styles[t.type].underline; - } - - /** - * Returns whether "focusable" tool tips are used instead of standard ones. Focusable tool tips are tool tips that - * the user can click on, resize, copy from, and click links in. - * - * @return Whether to use focusable tool tips. - * @see #setUseFocusableTips(boolean) - * @see FocusableTip - */ - public boolean getUseFocusableTips() { - return useFocusableTips; - } - - /** - * Called by constructors to initialize common properties of the text editor. - */ - protected void init() { - - // Set some RSyntaxTextArea default values. - syntaxStyleKey = SYNTAX_STYLE_NONE; - setMatchedBracketBGColor(getDefaultBracketMatchBGColor()); - setMatchedBracketBorderColor(getDefaultBracketMatchBorderColor()); - setBracketMatchingEnabled(true); - setAnimateBracketMatching(true); - lastBracketMatchPos = -1; - setSelectionColor(getDefaultSelectionColor()); - - // Set auto-indent related stuff. - setAutoIndentEnabled(true); - setCloseCurlyBraces(true); - setCloseMarkupTags(true); - setClearWhitespaceLinesEnabled(true); - - setHyperlinksEnabled(true); - setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); - setHyperlinkForeground(Color.BLUE); - isScanningForLinks = false; - setUseFocusableTips(true); - - restoreDefaultSyntaxScheme(); - - } - - /** - * Returns whether or not auto-indent is enabled. - * - * @return Whether or not auto-indent is enabled. - * @see #setAutoIndentEnabled(boolean) - */ - public boolean isAutoIndentEnabled() { - return autoIndentEnabled; - } - - /** - * Returns whether or not bracket matching is enabled. - * - * @return true iff bracket matching is enabled. - * @see #setBracketMatchingEnabled - */ - public final boolean isBracketMatchingEnabled() { - return bracketMatchingEnabled; - } - - /** - * Returns whether or not lines containing nothing but whitespace are made into blank lines when Enter is pressed in - * them. - * - * @return Whether or not whitespace-only lines are cleared when the user presses Enter on them. - * @see #setClearWhitespaceLinesEnabled(boolean) - */ - public boolean isClearWhitespaceLinesEnabled() { - return clearWhitespaceLines; - } - - /** - * Returns whether whitespace (spaces and tabs) is visible. - * - * @return Whether whitespace is visible. - * @see #setWhitespaceVisible(boolean) - * @see #getEOLMarkersVisible() - */ - public boolean isWhitespaceVisible() { - return whitespaceVisible; - } - - /** - * Returns the token at the specified position in the model. - * - * @param offs - * The position in the model. - * @return The token, or null if no token is at that position. - * @see #viewToToken(Point) - */ - private Token modelToToken(int offs) { - if (offs >= 0) { - try { - int line = getLineOfOffset(offs); - Token t = getTokenListForLine(line); - while (t != null && t.isPaintable()) { - if (t.containsPosition(offs)) { - return t; - } - t = t.getNextToken(); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); // Never happens - } - } - return null; - } - - /** - * The paintComponent method is overridden so we apply any necessary rendering hints to the Graphics - * object. - */ - protected void paintComponent(Graphics g) { - super.paintComponent(getGraphics2D(g)); - } - - private void refreshFontMetrics(Graphics2D g2d) { - // It is assumed that any rendering hints are already applied to g2d. - defaultFontMetrics = g2d.getFontMetrics(getFont()); - syntaxScheme.refreshFontMetrics(g2d); - if (getLineWrap() == false) { - // HORRIBLE HACK! The un-wrapped view needs to refresh its cached - // longest line information. - SyntaxView sv = (SyntaxView) getUI().getRootView(this).getView(0); - sv.calculateLongestLine(); - } - } - - /** - * Removes an "active line range" listener from this text area. - * - * @param l - * The listener to remove. - * @see #removeActiveLineRangeListener(ActiveLineRangeListener) - */ - public void removeActiveLineRangeListener(ActiveLineRangeListener l) { - listenerList.remove(ActiveLineRangeListener.class, l); - } - - /** - * Removes a hyperlink listener from this text area. - * - * @param l - * The listener to remove. - * @see #addHyperlinkListener(HyperlinkListener) - */ - public void removeHyperlinkListener(HyperlinkListener l) { - listenerList.remove(HyperlinkListener.class, l); - } - - /** - * Overridden so we stop this text area's parsers, if any. - */ - public void removeNotify() { - if (parserManager != null) { - parserManager.stopParsing(); - } - super.removeNotify(); - } - - /** - * Removes a parser from this text area. - * - * @param parser - * The {@link Parser} to remove. - * @return Whether the parser was found and removed. - * @see #clearParsers() - * @see #addParser(Parser) - * @see #getParser(int) - */ - public boolean removeParser(Parser parser) { - boolean removed = false; - if (parserManager != null) { - removed = parserManager.removeParser(parser); - } - return removed; - } - - /** - * Sets the colors used for syntax highlighting to their defaults. - * - * @see #setSyntaxScheme(SyntaxScheme) - * @see #getSyntaxScheme() - * @see #getDefaultSyntaxScheme() - */ - public void restoreDefaultSyntaxScheme() { - setSyntaxScheme(getDefaultSyntaxScheme()); - } - - /** - * Attempts to save all currently-known templates to the current template directory, as set by - * setTemplateDirectory. Templates will be saved as XML files with names equal to their abbreviations; - * for example, a template that expands on the word "forb" will be saved as forb.xml. - * - * @return Whether or not the save was successful. The save will be unsuccessful if the template directory does not - * exist or if it has not been set (i.e., you have not yet called setTemplateDirectory). - * @see #getTemplatesEnabled - * @see #setTemplateDirectory - * @see #setTemplatesEnabled - */ - public static synchronized boolean saveTemplates() { - if (!getTemplatesEnabled()) { - return false; - } - return getCodeTemplateManager().saveTemplates(); - } - - /** - * Sets the "active line range." Note that this RSyntaxTextArea itself does nothing with this - * information, but if it is contained inside an {@link RTextScrollPane}, the active line range may be displayed in - * the icon area of the {@link Gutter}. - *

    - * - * Note that basic users of RSyntaxTextArea will not call this method directly; rather, it is usually - * called by instances of LanguageSupport in the RSTALangaugeSupport library. See http://fifesoft.com for more information about this library. - * - * @param min - * The "minimum" line in the active line range, or -1 if the range is being cleared. - * @param max - * The "maximum" line in the active line range, or -1 if the range is being cleared. - * @see #addActiveLineRangeListener(ActiveLineRangeListener) - */ - public void setActiveLineRange(int min, int max) { - if (min == -1) { - max = -1; // Force max to be -1 if min is. - } - fireActiveLineRangeEvent(min, max); - } - - /** - * Sets whether bracket matching should be animated. This fires a property change event of type - * {@link #ANIMATE_BRACKET_MATCHING_PROPERTY}. - * - * @param animate - * Whether to animate bracket matching. - * @see #getAnimateBracketMatching() - */ - public void setAnimateBracketMatching(boolean animate) { - if (animate != animateBracketMatching) { - animateBracketMatching = animate; - if (animate && bracketRepaintTimer == null) { - bracketRepaintTimer = new BracketMatchingTimer(); - } - firePropertyChange(ANIMATE_BRACKET_MATCHING_PROPERTY, - !animate, animate); - } - } - - /** - * Sets whether or not auto-indent is enabled. This fires a property change event of type - * {@link #AUTO_INDENT_PROPERTY}. - * - * @param enabled - * Whether or not auto-indent is enabled. - * @see #isAutoIndentEnabled() - */ - public void setAutoIndentEnabled(boolean enabled) { - if (autoIndentEnabled != enabled) { - autoIndentEnabled = enabled; - firePropertyChange(AUTO_INDENT_PROPERTY, !enabled, enabled); - } - } - - /** - * Sets whether bracket matching is enabled. This fires a property change event of type - * {@link #BRACKET_MATCHING_PROPERTY}. - * - * @param enabled - * Whether or not bracket matching should be enabled. - * @see #isBracketMatchingEnabled() - */ - public void setBracketMatchingEnabled(boolean enabled) { - if (enabled != bracketMatchingEnabled) { - bracketMatchingEnabled = enabled; - repaint(); - firePropertyChange(BRACKET_MATCHING_PROPERTY, !enabled, enabled); - } - } - - /** - * Sets whether or not lines containing nothing but whitespace are made into blank lines when Enter is pressed in - * them. This method fires a property change event of type {@link #CLEAR_WHITESPACE_LINES_PROPERTY}. - * - * @param enabled - * Whether or not whitespace-only lines are cleared when the user presses Enter on them. - * @see #isClearWhitespaceLinesEnabled() - */ - public void setClearWhitespaceLinesEnabled(boolean enabled) { - if (enabled != clearWhitespaceLines) { - clearWhitespaceLines = enabled; - firePropertyChange(CLEAR_WHITESPACE_LINES_PROPERTY, - !enabled, enabled); - } - } - - /** - * Toggles whether curly braces should be automatically closed when a newline is entered after an opening curly - * brace. Note that this property is only honored for languages that use curly braces to denote code blocks. - *

    - * - * This method fires a property change event of type {@link #CLOSE_CURLY_BRACES_PROPERTY}. - * - * @param close - * Whether curly braces should be automatically closed. - * @see #getCloseCurlyBraces() - */ - public void setCloseCurlyBraces(boolean close) { - if (close != closeCurlyBraces) { - closeCurlyBraces = close; - firePropertyChange(CLOSE_CURLY_BRACES_PROPERTY, !close, close); - } - } - - /** - * Sets whether closing markup tags should be automatically completed when "</" is typed. Note that - * this property is only honored for markup languages, such as HTML, XML and PHP. - *

    - * - * This method fires a property change event of type {@link #CLOSE_MARKUP_TAGS_PROPERTY}. - * - * @param close - * Whether closing markup tags should be automatically completed. - * @see #getCloseMarkupTags() - */ - public void setCloseMarkupTags(boolean close) { - if (close != closeMarkupTags) { - closeMarkupTags = close; - firePropertyChange(CLOSE_MARKUP_TAGS_PROPERTY, !close, close); - } - } - - /** - * Sets the document used by this text area. This is overridden so that only instances of {@link RSyntaxDocument} - * are accepted; for all others, an exception will be thrown. - * - * @param document - * The new document for this text area. - * @throws IllegalArgumentException - * If the document is not an RSyntaxDocument. - */ - public void setDocument(Document document) { - if (!(document instanceof RSyntaxDocument)) - throw new IllegalArgumentException("Documents for " + - "RSyntaxTextArea must be instances of " + - "RSyntaxDocument!"); - super.setDocument(document); - } - - /** - * Sets whether EOL markers are visible at the end of each line. This method fires a property change of type - * {@link #EOL_VISIBLE_PROPERTY}. - * - * @param visible - * Whether EOL markers are visible. - * @see #getEOLMarkersVisible() - * @see #setWhitespaceVisible(boolean) - */ - public void setEOLMarkersVisible(boolean visible) { - if (visible != eolMarkersVisible) { - eolMarkersVisible = visible; - repaint(); - firePropertyChange(EOL_VISIBLE_PROPERTY, !visible, visible); - } - } - - /** - * Sets the font used by this text area. Note that this method does not alter the appearance of an - * RSyntaxTextArea since it uses different fonts for each token type. - * - * @param font - * The font. - */ - public void setFont(Font font) { - - Font old = super.getFont(); - super.setFont(font); // Do this first. - - // Usually programmers keep a single font for all token types, but - // may use bold or italic for styling some. - SyntaxScheme scheme = getSyntaxScheme(); - if (scheme != null && old != null) { - scheme.changeBaseFont(old, font); - calculateLineHeight(); - } - - // We must be connected to a screen resource for our - // graphics to be non-null. - if (isDisplayable()) { - refreshFontMetrics(getGraphics2D(getGraphics())); - // Updates the margin line. - updateMarginLineX(); - // Force the current line highlight to be repainted, even - // though the caret's location hasn't changed. - forceCurrentLineHighlightRepaint(); - // Get line number border in text area to repaint again - // since line heights have updated. - firePropertyChange("font", old, font); - // So parent JScrollPane will have its scrollbars updated. - revalidate(); - } - - } - - /** - * Sets whether fractional font metrics are enabled. This method fires a property change event of type - * {@link #FRACTIONAL_FONTMETRICS_PROPERTY}. - * - * @param enabled - * Whether fractional font metrics are enabled. - * @see #getFractionalFontMetricsEnabled() - */ - public void setFractionalFontMetricsEnabled(boolean enabled) { - if (fractionalFontMetricsEnabled != enabled) { - fractionalFontMetricsEnabled = enabled; - // We must be connected to a screen resource for our graphics to be - // non-null. - if (isDisplayable()) { - refreshFontMetrics(getGraphics2D(getGraphics())); - } - firePropertyChange(FRACTIONAL_FONTMETRICS_PROPERTY, - !enabled, enabled); - } - } - - /** - * Sets the highlighter used by this text area. - * - * @param h - * The highlighter. - * @throws IllegalArgumentException - * If h is not an instance of {@link RSyntaxTextAreaHighlighter}. - */ - public void setHighlighter(Highlighter h) { - if (!(h instanceof RSyntaxTextAreaHighlighter)) { - throw new IllegalArgumentException("RSyntaxTextArea requires " + - "an RSyntaxTextAreaHighlighter for its Highlighter"); - } - super.setHighlighter(h); - } - - /** - * Sets the color to use when painting hyperlinks. - * - * @param fg - * The color to use when painting hyperlinks. - * @throws NullPointerException - * If fg is null. - * @see #getHyperlinkForeground() - * @see #setHyperlinksEnabled(boolean) - */ - public void setHyperlinkForeground(Color fg) { - if (fg == null) { - throw new NullPointerException("fg cannot be null"); - } - hyperlinkFG = fg; - } - - /** - * Sets whether hyperlinks are enabled for this text area. This method fires a property change event of type - * {@link #HYPERLINKS_ENABLED_PROPERTY}. - * - * @param enabled - * Whether hyperlinks are enabled. - * @see #getHyperlinksEnabled() - */ - public void setHyperlinksEnabled(boolean enabled) { - if (this.hyperlinksEnabled != enabled) { - this.hyperlinksEnabled = enabled; - repaint(); - firePropertyChange(HYPERLINKS_ENABLED_PROPERTY, !enabled, enabled); - } - } - - /** - * Sets the mask for the key used to toggle whether we are scanning for hyperlinks with mouse hovering. - * - * @param mask - * The mask to use. This should be a value such as {@link InputEvent#CTRL_DOWN_MASK} or - * {@link InputEvent#META_DOWN_MASK}. For invalid values, behavior is undefined. - * @see InputEvent - */ - public void setLinkScanningMask(int mask) { - if (mask == InputEvent.CTRL_DOWN_MASK || - mask == InputEvent.META_DOWN_MASK || - mask == InputEvent.ALT_DOWN_MASK || - mask == InputEvent.SHIFT_DOWN_MASK) { - linkScanningMask = mask; - } - } - - /** - * Toggles whether "mark occurrences" is enabled. This method fires a property change event of type - * {@link #MARK_OCCURRENCES_PROPERTY}. - * - * @param markOccurrences - * Whether "Mark Occurrences" should be enabled. - * @see #getMarkOccurrences() - * @see #setMarkOccurrencesColor(Color) - */ - public void setMarkOccurrences(boolean markOccurrences) { - if (markOccurrences) { - if (markOccurrencesSupport == null) { - markOccurrencesSupport = new MarkOccurrencesSupport(); - markOccurrencesSupport.install(this); - firePropertyChange(MARK_OCCURRENCES_PROPERTY, false, true); - } - } - else { - if (markOccurrencesSupport != null) { - markOccurrencesSupport.uninstall(); - markOccurrencesSupport = null; - firePropertyChange(MARK_OCCURRENCES_PROPERTY, true, false); - } - } - } - - /** - * Sets the "mark occurrences" color. - * - * @param color - * The new color. This cannot be null. - * @see #getMarkOccurrencesColor() - * @see #setMarkOccurrences(boolean) - */ - public void setMarkOccurrencesColor(Color color) { - markOccurrencesColor = color; - if (markOccurrencesSupport != null) { - markOccurrencesSupport.setColor(color); - } - } - - /** - * Sets the color used as the background for a matched bracket. - * - * @param color - * The color to use. - * @see #getMatchedBracketBGColor - * @see #setMatchedBracketBorderColor - */ - public void setMatchedBracketBGColor(Color color) { - matchedBracketBGColor = color; - if (match != null) - repaint(); - } - - /** - * Sets the color used as the border for a matched bracket. - * - * @param color - * The color to use. - * @see #getMatchedBracketBorderColor - * @see #setMatchedBracketBGColor - */ - public void setMatchedBracketBorderColor(Color color) { - matchedBracketBorderColor = color; - if (match != null) - repaint(); - } - - /** - * Sets what type of syntax highlighting this editor is doing. This method fires a property change of type - * {@link #SYNTAX_STYLE_PROPERTY}. - * - * @param styleKey - * The syntax editing style to use, for example, {@link SyntaxConstants#SYNTAX_STYLE_NONE} or - * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. - * @see #getSyntaxEditingStyle() - * @see SyntaxConstants - */ - public void setSyntaxEditingStyle(String styleKey) { - if (styleKey == null) { - styleKey = SYNTAX_STYLE_NONE; - } - if (!styleKey.equals(syntaxStyleKey)) { - String oldStyle = syntaxStyleKey; - syntaxStyleKey = styleKey; - ((RSyntaxDocument) getDocument()).setSyntaxStyle(styleKey); - firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); - } - - } - - /** - * Sets all of the colors used in syntax highlighting to the colors specified. This uses a shallow copy of the color - * scheme so that multiple text areas can share the same color scheme and have their properties changed - * simultaneously. - *

    - * - * This method fires a property change event of type {@link #SYNTAX_SCHEME_PROPERTY}. - * - * @param scheme - * The instance of SyntaxScheme to use. - * @see #getSyntaxScheme() - */ - public void setSyntaxScheme(SyntaxScheme scheme) { - - // NOTE: We don't check whether colorScheme is the same as the - // current scheme because DecreaseFontSizeAction and - // IncreaseFontSizeAction need it this way. - // FIXME: Find a way around this. - - SyntaxScheme old = this.syntaxScheme; - this.syntaxScheme = scheme; - - // Recalculate the line height. We do this here instead of in - // refreshFontMetrics() as this method is called less often and we - // don't need the rendering hints to get the font's height. - calculateLineHeight(); - - if (isDisplayable()) { - refreshFontMetrics(getGraphics2D(getGraphics())); - } - - // Updates the margin line. - updateMarginLineX(); - - // Force the current line highlight to be repainted, even though - // the caret's location hasn't changed. - forceCurrentLineHighlightRepaint(); - - // So encompassing JScrollPane will have its scrollbars updated. - revalidate(); - - firePropertyChange(SYNTAX_SCHEME_PROPERTY, old, this.syntaxScheme); - - } - - /** - * If templates are enabled, all currently-known templates are forgotten and all templates are loaded from all files - * in the specified directory ending in "*.xml". If templates aren't enabled, nothing happens. - * - * @param dir - * The directory containing files ending in extension .xml that contain templates to load. - * @return true if the load was successful; false if either templates aren't currently - * enabled or the load failed somehow (most likely, the directory doesn't exist). - * @see #getTemplatesEnabled - * @see #setTemplatesEnabled - * @see #saveTemplates - */ - public static synchronized boolean setTemplateDirectory(String dir) { - if (getTemplatesEnabled() && dir != null) { - File directory = new File(dir); - if (directory.isDirectory()) { - return getCodeTemplateManager(). - setTemplateDirectory(directory) > -1; - } - boolean created = directory.mkdir(); - if (created) { - return getCodeTemplateManager(). - setTemplateDirectory(directory) > -1; - } - } - return false; - } - - /** - * Enables or disables templates. - *

    - * - * Templates are a set of "shorthand identifiers" that you can configure so that you only have to type a short - * identifier (such as "forb") to insert a larger amount of code into the document (such as: - *

    - * - *

    -     *   for (<caret>) {
    -     * 
    -     *   }
    -     * 
    - * - * Templates are a shared resource among all instances of RSyntaxTextArea; that is, templates can only - * be enabled/disabled for all text areas globally, not individually, and all text areas have access of the same - * templates. This should not be an issue; rather, it should be beneficial as it promotes uniformity among all text - * areas in an application. - * - * @param enabled - * Whether or not templates should be enabled. - * @see #getTemplatesEnabled() - */ - public static synchronized void setTemplatesEnabled(boolean enabled) { - templatesEnabled = enabled; - } - - /** - * Sets the rendering hint to use when anti-aliasing text in this editor. - * - * @param aaHintFieldName - * The name of a field in java.awt.RenderingHints. If an unknown or unsupported field name - * is specified (such as a 1.6+ hint being specified when this is a 1.4/1.5 JVM), null is - * used instead. A value of null means "no antialiasing." - * @see #getTextAntiAliasHint() - */ - public void setTextAntiAliasHint(String aaHintFieldName) { - - // System.out.println("Trying to set AA hint to: " + aaHintFieldName); - - // If the new AA hint is null, disable text anti-aliasing. - if (aaHintFieldName == null && this.aaHintFieldName != null) { - String old = this.aaHintFieldName; - this.aaHint = null; - this.aaHintFieldName = null; - // We must be connected to a screen resource for our graphics - // to be non-null. - if (isDisplayable()) { - refreshFontMetrics(getGraphics2D(getGraphics())); - } - firePropertyChange(ANTIALIAS_PROPERTY, old, null); - repaint(); - } - - // Otherwise, if they're specifying a new hint type, use it instead. - else if (aaHintFieldName != null && - !aaHintFieldName.equals(this.aaHintFieldName)) { - String old = this.aaHintFieldName; - try { - Field f = RenderingHints.class.getField(aaHintFieldName); - this.aaHint = f.get(null); - this.aaHintFieldName = aaHintFieldName; - } catch (RuntimeException re) { - // Re-throw (keep FindBugs happy) - } catch (/* NoSuchField|IllegalAccess */Exception e) { - this.aaHint = RenderingHints.VALUE_TEXT_ANTIALIAS_OFF; - this.aaHintFieldName = "VALUE_TEXT_ANTIALIAS_OFF"; - } - // We must be connected to a screen resource for our graphics - // to be non-null. - if (isDisplayable()) { - refreshFontMetrics(getGraphics2D(getGraphics())); - } - firePropertyChange(ANTIALIAS_PROPERTY, old, this.aaHintFieldName); - repaint(); - } - - // System.out.println("... Actual new value: " + this.aaHintFieldName); - - } - - /** - * Sets whether "focusable" tool tips are used instead of standard ones. Focusable tool tips are tool tips that the - * user can click on, resize, copy from, and clink links in. This method fires a property change event of type - * {@link #FOCUSABLE_TIPS_PROPERTY}. - * - * @param use - * Whether to use focusable tool tips. - * @see #getUseFocusableTips() - * @see FocusableTip - */ - public void setUseFocusableTips(boolean use) { - if (use != useFocusableTips) { - useFocusableTips = use; - firePropertyChange(FOCUSABLE_TIPS_PROPERTY, !use, use); - } - } - - /** - * Sets whether whitespace is visible. This method fires a property change of type - * {@link #VISIBLE_WHITESPACE_PROPERTY}. - * - * @param visible - * Whether whitespace should be visible. - * @see #isWhitespaceVisible - */ - public void setWhitespaceVisible(boolean visible) { - if (whitespaceVisible != visible) { - whitespaceVisible = visible; - ((RSyntaxDocument) getDocument()).setWhitespaceVisible( - visible, this); - repaint(); - firePropertyChange(VISIBLE_WHITESPACE_PROPERTY, - !visible, visible); - } - } - - /** - * Returns the token at the specified position in the view. - * - * @param p - * The position in the view. - * @return The token, or null if no token is at that position. - * @see #modelToToken(int) - */ - /* - * TODO: This is a little inefficient. This should convert view coordinates to the underlying token (if any). The - * way things currently are, we're calling getTokenListForLine() twice (once in viewToModel() and once here). - */ - private Token viewToToken(Point p) { - return modelToToken(viewToModel(p)); - } - - /** - * A timer that animates the "bracket matching" animation. - */ - private class BracketMatchingTimer extends Timer implements ActionListener { - - private int pulseCount; - - public BracketMatchingTimer() { - super(20, null); - addActionListener(this); - setCoalesce(false); - } - - public void actionPerformed(ActionEvent e) { - if (isBracketMatchingEnabled()) { - if (match != null) { - if (pulseCount < 5) { - pulseCount++; - match.x--; - match.y--; - match.width += 2; - match.height += 2; - repaint(match.x, match.y, match.width, match.height); - } - else if (pulseCount < 7) { - pulseCount++; - match.x++; - match.y++; - match.width -= 2; - match.height -= 2; - repaint(match.x - 2, match.y - 2, match.width + 5, match.height + 5); - } - else { - stop(); - pulseCount = 0; - } - } - } - } - - public void start() { - match.x += 3; - match.y += 3; - match.width -= 6; - match.height -= 6; // So animation can "grow" match - pulseCount = 0; - super.start(); - } - - } - - /** - * Handles hyperlinks. - */ - private class RSyntaxTextAreaMutableCaretEvent - extends RTextAreaMutableCaretEvent { - - protected RSyntaxTextAreaMutableCaretEvent(RTextArea textArea) { - super(textArea); - } - - public void mouseClicked(MouseEvent e) { - if (getHyperlinksEnabled() && isScanningForLinks && - hoveredOverLinkOffset > -1) { - Token t = modelToToken(hoveredOverLinkOffset); - URL url = null; - String desc = null; - try { - String temp = t.getLexeme(); - // URI's need "http://" prefix for web URL's to work. - if (temp.startsWith("www.")) { - temp = "http://" + temp; - } - url = new URL(temp); - } catch (MalformedURLException mue) { - desc = mue.getMessage(); - } - HyperlinkEvent he = new HyperlinkEvent(this, - HyperlinkEvent.EventType.ACTIVATED, - url, desc); - fireHyperlinkUpdate(he); - } - } - - public void mouseMoved(MouseEvent e) { - super.mouseMoved(e); - if (getHyperlinksEnabled()) { - if ((e.getModifiersEx() & linkScanningMask) != 0) { - isScanningForLinks = true; - Token t = viewToToken(e.getPoint()); - Cursor c2 = null; - if (t != null && t.isHyperlink()) { - hoveredOverLinkOffset = t.offset; - c2 = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); - } - else { - c2 = Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR); - hoveredOverLinkOffset = -1; - } - if (getCursor() != c2) { - setCursor(c2); - // TODO: Repaint just the affected line(s). - repaint(); // Link either left or went into. - } - } - else { - if (isScanningForLinks) { - Cursor c = getCursor(); - isScanningForLinks = false; - hoveredOverLinkOffset = -1; - if (c != null && c.getType() == Cursor.HAND_CURSOR) { - setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); - repaint(); // TODO: Repaint just the affected line. - } - } - } - } - } - - } - -} \ No newline at end of file + public static final String ANIMATE_BRACKET_MATCHING_PROPERTY = "RSTA.animateBracketMatching"; + public static final String ANTIALIAS_PROPERTY = "RSTA.antiAlias"; + public static final String AUTO_INDENT_PROPERTY = "RSTA.autoIndent"; + public static final String BRACKET_MATCHING_PROPERTY = "RSTA.bracketMatching"; + public static final String CLEAR_WHITESPACE_LINES_PROPERTY = "RSTA.clearWhitespaceLines"; + public static final String CLOSE_CURLY_BRACES_PROPERTY = "RSTA.closeCurlyBraces"; + public static final String CLOSE_MARKUP_TAGS_PROPERTY = "RSTA.closeMarkupTags"; + public static final String CODE_FOLDING_PROPERTY = "RSTA.codeFolding"; + public static final String EOL_VISIBLE_PROPERTY = "RSTA.eolMarkersVisible"; + public static final String FOCUSABLE_TIPS_PROPERTY = "RSTA.focusableTips"; + public static final String FRACTIONAL_FONTMETRICS_PROPERTY = "RSTA.fractionalFontMetrics"; + public static final String HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY = "RSTA.highlightSecondaryLanguages"; + public static final String HYPERLINKS_ENABLED_PROPERTY = "RSTA.hyperlinksEnabled"; + public static final String MARK_OCCURRENCES_PROPERTY = "RSTA.markOccurrences"; + public static final String MARKED_OCCURRENCES_CHANGED_PROPERTY = "RSTA.markedOccurrencesChanged"; + public static final String PAINT_MATCHED_BRACKET_PAIR_PROPERTY = "RSTA.paintMatchedBracketPair"; + public static final String PARSER_NOTICES_PROPERTY = "RSTA.parserNotices"; + public static final String SYNTAX_SCHEME_PROPERTY = "RSTA.syntaxScheme"; + public static final String SYNTAX_STYLE_PROPERTY = "RSTA.syntaxStyle"; + public static final String TAB_LINE_COLOR_PROPERTY = "RSTA.tabLineColor"; + public static final String TAB_LINES_PROPERTY = "RSTA.tabLines"; + public static final String USE_SELECTED_TEXT_COLOR_PROPERTY = "RSTA.useSelectedTextColor"; + public static final String VISIBLE_WHITESPACE_PROPERTY = "RSTA.visibleWhitespace"; + + private static final Color DEFAULT_BRACKET_MATCH_BG_COLOR = new Color(234,234,255); + private static final Color DEFAULT_BRACKET_MATCH_BORDER_COLOR = new Color(0,0,128); + private static final Color DEFAULT_SELECTION_COLOR = new Color(200,200,255); + + private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; + + private JMenu foldingMenu; + private static RecordableTextAction toggleCurrentFoldAction; + private static RecordableTextAction collapseAllCommentFoldsAction; + private static RecordableTextAction collapseAllFoldsAction; + private static RecordableTextAction expandAllFoldsAction; + + /** The key for the syntax style to be highlighting. */ + private String syntaxStyleKey; + + /** The colors used for syntax highlighting. */ + private SyntaxScheme syntaxScheme; + + /** Handles code templates. */ + private static CodeTemplateManager codeTemplateManager; + + /** Whether or not templates are enabled. */ + private static boolean templatesEnabled; + + /** + * The rectangle surrounding the "matched bracket" if bracket matching + * is enabled. + */ + private Rectangle match; + + /** + * The rectangle surrounding the current offset if both bracket matching and + * "match both brackets" are enabled. + */ + private Rectangle dotRect; + + /** + * Used to store the location of the bracket at the caret position (either + * just before or just after it) and the location of its match. + */ + private Point bracketInfo; + + /** + * Colors used for the "matched bracket" if bracket matching is enabled. + */ + private Color matchedBracketBGColor; + private Color matchedBracketBorderColor; + + /** The location of the last matched bracket. */ + private int lastBracketMatchPos; + + /** Whether or not bracket matching is enabled. */ + private boolean bracketMatchingEnabled; + + /** Whether or not bracket matching is animated. */ + private boolean animateBracketMatching; + + /** Whether both brackets are highlighted when bracket matching. */ + private boolean paintMatchedBracketPair; + + private BracketMatchingTimer bracketRepaintTimer; + + private MatchedBracketPopupTimer matchedBracketPopupTimer; + + private boolean metricsNeverRefreshed; + + /** + * Whether or not auto-indent is on. + */ + private boolean autoIndentEnabled; + + /** + * Whether curly braces should be closed on Enter key presses, (if the + * current language supports it). + */ + private boolean closeCurlyBraces; + + /** + * Whether closing markup tags should be automatically completed when + * "</" is typed (if the current language is a markup + * language). + */ + private boolean closeMarkupTags; + + /** + * Whether or not lines with nothing but whitespace are "made empty". + */ + private boolean clearWhitespaceLines; + + /** Whether we are displaying visible whitespace (spaces and tabs). */ + private boolean whitespaceVisible; + + /** Whether EOL markers should be visible at the end of each line. */ + private boolean eolMarkersVisible; + + /** Whether tab lines are enabled. */ + private boolean paintTabLines; + + /** The color to use when painting tab lines. */ + private Color tabLineColor; + + /** + * Whether hyperlinks are enabled (must be supported by the syntax + * scheme being used). + */ + private boolean hyperlinksEnabled; + + /** The color to use when painting hyperlinks. */ + private Color hyperlinkFG; + + /** + * Mask used to determine if the correct key is being held down to scan + * for hyperlinks (ctrl, meta, etc.). + */ + private int linkScanningMask; + + /** Whether secondary languages have their backgrounds colored. */ + private boolean highlightSecondaryLanguages; + + /** Whether the "selected text" color should be used with selected text. */ + private boolean useSelectedTextColor; + + /** Handles "mark occurrences" support. */ + private MarkOccurrencesSupport markOccurrencesSupport; + + /** The color used to render "marked occurrences". */ + private Color markOccurrencesColor; + + /** The delay before occurrences are marked in the editor. */ + private int markOccurrencesDelay; + + /** Whether a border should be painted around marked occurrences. */ + private boolean paintMarkOccurrencesBorder; + + /** Metrics of the text area's font. */ + private FontMetrics defaultFontMetrics; + + /** Manages running the parser. */ + private ParserManager parserManager; + + private String cachedTip; + /** Used to work around an issue with Apple JVMs. */ + private Point cachedTipLoc; + + /** + * Whether the editor is currently scanning for hyperlinks on mouse + * movement. + */ + private boolean isScanningForLinks; + + private int hoveredOverLinkOffset; + + private LinkGenerator linkGenerator; + private LinkGeneratorResult linkGeneratorResult; + + private int rhsCorrection; + + private FoldManager foldManager; + + /** Whether "focusable" tool tips are used instead of standard ones. */ + private boolean useFocusableTips; + + /** The last focusable tip displayed. */ + private FocusableTip focusableTip; + + /** Cached desktop anti-aliasing hints, if anti-aliasing is enabled. */ + private Map aaHints; + + /** Renders tokens. */ + private TokenPainter tokenPainter; + + /** Whether a popup showing matched bracket lines when they're off-screen. */ + private boolean showMatchedBracketPopup; + +private int lineHeight; // Height of a line of text; same for default, bold & italic. +private int maxAscent; +private boolean fractionalFontMetricsEnabled; + + private Color[] secondaryLanguageBackgrounds; + + + /** + * Constructor. + */ + public RSyntaxTextArea() { + } + + + /** + * Constructor. + * + * @param doc The document for the editor. + */ + public RSyntaxTextArea(RSyntaxDocument doc) { + super(doc); + setSyntaxEditingStyle(doc.getSyntaxStyle()); + } + + /** + * Constructor. + * + * @param text The initial text to display. + */ + public RSyntaxTextArea(String text) { + super(text); + } + + + /** + * Constructor. + * + * @param rows The number of rows to display. + * @param cols The number of columns to display. + * @throws IllegalArgumentException If either rows or + * cols is negative. + */ + public RSyntaxTextArea(int rows, int cols) { + super(rows, cols); + } + + + /** + * Constructor. + * + * @param text The initial text to display. + * @param rows The number of rows to display. + * @param cols The number of columns to display. + * @throws IllegalArgumentException If either rows or + * cols is negative. + */ + public RSyntaxTextArea(String text, int rows, int cols) { + super(text, rows, cols); + } + + + /** + * Constructor. + * + * @param doc The document for the editor. + * @param text The initial text to display. + * @param rows The number of rows to display. + * @param cols The number of columns to display. + * @throws IllegalArgumentException If either rows or + * cols is negative. + */ + public RSyntaxTextArea(RSyntaxDocument doc, String text,int rows,int cols) { + super(doc, text, rows, cols); + } + + + /** + * Creates a new RSyntaxTextArea. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + */ + public RSyntaxTextArea(int textMode) { + super(textMode); + } + + + /** + * Adds an "active line range" listener to this text area. + * + * @param l The listener to add. + * @see #removeActiveLineRangeListener(ActiveLineRangeListener) + */ + public void addActiveLineRangeListener(ActiveLineRangeListener l) { + listenerList.add(ActiveLineRangeListener.class, l); + } + + + /** + * Adds a hyperlink listener to this text area. + * + * @param l The listener to add. + * @see #removeHyperlinkListener(HyperlinkListener) + */ + public void addHyperlinkListener(HyperlinkListener l) { + listenerList.add(HyperlinkListener.class, l); + } + + + /** + * Updates the font metrics the first time we're displayed. + */ + @Override + public void addNotify() { + + super.addNotify(); + + // Some LookAndFeels (e.g. WebLaF) for some reason have a 0x0 parent + // window initially (perhaps something to do with them fading in?), + // which will cause an exception from getGraphics(), so we must be + // careful here. + if (metricsNeverRefreshed) { + Window parent = SwingUtilities.getWindowAncestor(this); + if (parent!=null && parent.getWidth()>0 && parent.getHeight()>0) { + refreshFontMetrics(getGraphics2D(getGraphics())); + metricsNeverRefreshed = false; + } + } + + // Re-start parsing if we were removed from one container and added + // to another + if (parserManager!=null) { + parserManager.restartParsing(); + } + + } + + + /** + * Adds the parser to "validate" the source code in this text area. This + * can be anything from a spell checker to a "compiler" that verifies + * source code. + * + * @param parser The new parser. A value of null will + * do nothing. + * @see #getParser(int) + * @see #getParserCount() + * @see #removeParser(Parser) + */ + public void addParser(Parser parser) { + if (parserManager==null) { + parserManager = new ParserManager(this); + } + parserManager.addParser(parser); + } + + + /** + * Appends a submenu with code folding options to this text component's + * popup menu. + * + * @param popup The popup menu to append to. + * @see #createPopupMenu() + */ + protected void appendFoldingMenu(JPopupMenu popup) { + popup.addSeparator(); + ResourceBundle bundle = ResourceBundle.getBundle(MSG); + foldingMenu = new JMenu(bundle.getString("ContextMenu.Folding")); + foldingMenu.add(createPopupMenuItem(toggleCurrentFoldAction)); + foldingMenu.add(createPopupMenuItem(collapseAllCommentFoldsAction)); + foldingMenu.add(createPopupMenuItem(collapseAllFoldsAction)); + foldingMenu.add(createPopupMenuItem(expandAllFoldsAction)); + popup.add(foldingMenu); + + } + + + /** + * Recalculates the height of a line in this text area and the + * maximum ascent of all fonts displayed. + */ + private void calculateLineHeight() { + + lineHeight = maxAscent = 0; + + // Each token style. + for (int i=0; ilineHeight) { + lineHeight = height; + } + int ascent = fm.getMaxAscent(); + if (ascent>maxAscent) { + maxAscent = ascent; + } + } + } + + // The text area's (default) font). + Font temp = getFont(); + FontMetrics fm = getFontMetrics(temp); + int height = fm.getHeight(); + if (height>lineHeight) { + lineHeight = height; + } + int ascent = fm.getMaxAscent(); + if (ascent>maxAscent) { + maxAscent = ascent; + } + + } + + + /** + * Removes all parsers from this text area. + * + * @see #removeParser(Parser) + */ + public void clearParsers() { + if (parserManager!=null) { + parserManager.clearParsers(); + } + } + + + /** + * Clones a token list. This is necessary as tokens are reused in + * {@link RSyntaxDocument}, so we can't simply use the ones we + * are handed from it. + * + * @param t The token list to clone. + * @return The clone of the token list. + */ + private TokenImpl cloneTokenList(Token t) { + + if (t==null) { + return null; + } + + TokenImpl clone = new TokenImpl(t); + TokenImpl cloneEnd = clone; + + while ((t=t.getNextToken())!=null) { + TokenImpl temp = new TokenImpl(t); + cloneEnd.setNextToken(temp); + cloneEnd = temp; + } + + return clone; + + } + + + /** + * Overridden to toggle the enabled state of various + * RSyntaxTextArea-specific menu items. + * + * If you set the popup menu via {@link #setPopupMenu(JPopupMenu)}, you + * will want to override this method, especially if you removed any of the + * menu items in the default popup menu. + * + * @param popupMenu The popup menu. This will never be null. + * @see #createPopupMenu() + * @see #setPopupMenu(JPopupMenu) + */ + @Override + protected void configurePopupMenu(JPopupMenu popupMenu) { + + super.configurePopupMenu(popupMenu); + + // They may have overridden createPopupMenu()... + if (popupMenu!=null && popupMenu.getComponentCount()>0 && + foldingMenu!=null) { + foldingMenu.setEnabled(foldManager. + isCodeFoldingSupportedAndEnabled()); + } + } + + + /** + * Copies the currently selected text to the system clipboard, with style + * information from the specified theme. Does nothing for {@code null} or + * empty selections. + * + * @param theme The theme to use for the color and font information. + * This may be {@code null}, in which case this text area's + * current styles are used. + * @see #copyAsStyledText() + */ + public void copyAsStyledText(Theme theme) { + + // It's more performant to call the no-arg overload + if (theme == null) { + copyAsStyledText(); + return; + } + + Theme origTheme = new Theme(this); + + theme.apply(this); + try { + copyAsStyledText(); + } finally { + origTheme.apply(this); + } + } + + /** + * Copies the currently selected text to the system clipboard, with + * any necessary style information (font, foreground color and background + * color). Does nothing for {@code null} or empty selections. + * + * @see #copyAsStyledText(Theme) + */ + public void copyAsStyledText() { + + int selStart = getSelectionStart(); + int selEnd = getSelectionEnd(); + if (selStart==selEnd) { + return; + } + + // Get the selection as HTML + String html = HtmlUtil.getTextAsHtml(this, selStart, selEnd); + + // Get the selection as RTF + byte[] rtfBytes = getTextAsRtf(selStart, selEnd); + + // Set the system clipboard contents to the RTF selection. + StyledTextTransferable contents = new StyledTextTransferable(html, rtfBytes); + + Clipboard cb = getToolkit().getSystemClipboard(); + try { + cb.setContents(contents, null); + } catch (IllegalStateException ise) { + UIManager.getLookAndFeel().provideErrorFeedback(null); + } + } + + + /** + * Returns the document to use for an RSyntaxTextArea. + * + * @return The document. + */ + @Override + protected Document createDefaultModel() { + return new RSyntaxDocument(SYNTAX_STYLE_NONE); + } + + + /** + * Returns the caret event/mouse listener for RTextAreas. + * + * @return The caret event/mouse listener. + */ + @Override + protected RTAMouseListener createMouseListener() { + return new RSyntaxTextAreaMutableCaretEvent(this); + } + + + /** + * Overridden to add menu items related to cold folding. + * + * @return The popup menu. + * @see #appendFoldingMenu(JPopupMenu) + */ + @Override + protected JPopupMenu createPopupMenu() { + JPopupMenu popup = super.createPopupMenu(); + appendFoldingMenu(popup); + return popup; + } + + + /** + * See createPopupMenuActions() in RTextArea. + * TODO: Remove these horrible hacks and move localizing of actions into + * the editor kits, where it should be! The context menu should contain + * actions from the editor kits. + */ + private static void createRstaPopupMenuActions() { + + ResourceBundle msg = ResourceBundle.getBundle(MSG); + + toggleCurrentFoldAction = new RSyntaxTextAreaEditorKit. + ToggleCurrentFoldAction(); + toggleCurrentFoldAction.setProperties(msg, "Action.ToggleCurrentFold"); + + collapseAllCommentFoldsAction = new RSyntaxTextAreaEditorKit. + CollapseAllCommentFoldsAction(); + collapseAllCommentFoldsAction.setProperties(msg, "Action.CollapseCommentFolds"); + + collapseAllFoldsAction = new RSyntaxTextAreaEditorKit.CollapseAllFoldsAction(true); + expandAllFoldsAction = new RSyntaxTextAreaEditorKit.ExpandAllFoldsAction(true); + + } + + + /** + * Returns the a real UI to install on this text area. + * + * @return The UI. + */ + @Override + protected RTextAreaUI createRTextAreaUI() { + return new RSyntaxTextAreaUI(this); + } + + + /** + * If the caret is on a bracket, this method finds the matching bracket, + * and if it exists, highlights it. + */ + protected final void doBracketMatching() { + + // We always need to repaint the "matched bracket" highlight if it + // exists. + if (match!=null) { + repaint(match); + if (dotRect!=null) { + repaint(dotRect); + } + } + + // If a matching bracket is found, get its bounds and paint it! + int lastCaretBracketPos = bracketInfo==null ? -1 : bracketInfo.x; + bracketInfo = RSyntaxUtilities.getMatchingBracketPosition(this, + bracketInfo); + if (bracketInfo.y>-1 && + (bracketInfo.y!=lastBracketMatchPos || + bracketInfo.x!=lastCaretBracketPos)) { + try { + match = modelToView(bracketInfo.y); + if (match!=null) { // Happens if we're not yet visible + if (getPaintMatchedBracketPair()) { + dotRect = modelToView(bracketInfo.x); + } + else { + dotRect = null; + } + if (getAnimateBracketMatching()) { + bracketRepaintTimer.restart(); + } + repaint(match); + if (dotRect!=null) { + repaint(dotRect); + } + + if (getShowMatchedBracketPopup()) { + Container parent = getParent(); + if (parent instanceof JViewport) { + Rectangle visibleRect = this.getVisibleRect(); + if (match.y + match.height < visibleRect.getY()) { + if (matchedBracketPopupTimer == null) { + matchedBracketPopupTimer = + new MatchedBracketPopupTimer(); + } + matchedBracketPopupTimer.restart(bracketInfo.y); + } + } + } + + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Shouldn't happen. + } + } + else if (bracketInfo.y==-1) { + // Set match to null so the old value isn't still repainted. + match = null; + dotRect = null; + bracketRepaintTimer.stop(); + } + lastBracketMatchPos = bracketInfo.y; + + } + + + /** + * Notifies all listeners that a caret change has occurred. + * + * @param e The caret event. + */ + @Override + protected void fireCaretUpdate(CaretEvent e) { + super.fireCaretUpdate(e); + if (isBracketMatchingEnabled()) { + doBracketMatching(); + } + } + + + /** + * Notifies all listeners that the active line range has changed. + * + * @param min The minimum "active" line, or -1. + * @param max The maximum "active" line, or -1. + */ + private void fireActiveLineRangeEvent(int min, int max) { + ActiveLineRangeEvent e = null; // Lazily created + // Guaranteed to return a non-null array + Object[] listeners = listenerList.getListenerList(); + // Process the listeners last to first, notifying + // those that are interested in this event + for (int i = listeners.length-2; i>=0; i-=2) { + if (listeners[i]==ActiveLineRangeListener.class) { + if (e==null) { + e = new ActiveLineRangeEvent(this, min, max); + } + ((ActiveLineRangeListener)listeners[i+1]).activeLineRangeChanged(e); + } + } + } + + + /** + * Notifies all listeners that have registered interest for notification + * on this event type. The listener list is processed last to first. + * + * @param e The event to fire. + */ + private void fireHyperlinkUpdate(HyperlinkEvent e) { + // Guaranteed to return a non-null array + Object[] listeners = listenerList.getListenerList(); + // Process the listeners last to first, notifying + // those that are interested in this event + for (int i = listeners.length-2; i>=0; i-=2) { + if (listeners[i]==HyperlinkListener.class) { + ((HyperlinkListener)listeners[i+1]).hyperlinkUpdate(e); + } + } + } + + + /** + * Notifies listeners that the marked occurrences for this text area + * have changed. + */ + void fireMarkedOccurrencesChanged() { + firePropertyChange(RSyntaxTextArea.MARKED_OCCURRENCES_CHANGED_PROPERTY, + null, null); + } + + + /** + * Fires a notification that the parser notices for this text area have + * changed. + */ + void fireParserNoticesChange() { + firePropertyChange(PARSER_NOTICES_PROPERTY, null, null); + } + + + /** + * Called whenever a fold is collapsed or expanded. This causes the + * text editor to revalidate. This method is here because of poor design + * and should be removed. + * + * @param fold The fold that was collapsed or expanded. + */ + public void foldToggled(Fold fold) { + match = null; // TODO: Update the bracket rect rather than hide it + dotRect = null; + if (getLineWrap()) { + // NOTE: Without doing this later, the caret position is out of + // sync with the Element structure when word wrap is enabled, and + // causes BadLocationExceptions when an entire folded region is + // deleted (see GitHub issue #22: + // https://github.com/bobbylight/RSyntaxTextArea/issues/22) + SwingUtilities.invokeLater(this::possiblyUpdateCurrentLineHighlightLocation); + } + else { + possiblyUpdateCurrentLineHighlightLocation(); + } + revalidate(); + repaint(); + } + + + /** + * Forces the given {@link Parser} to re-parse the content of this text + * area.

    + * + * This method can be useful when a Parser can be configured + * as to what notices it returns. For example, if a Java language parser + * can be configured to set whether no serialVersionUID is a warning, + * error, or ignored, this method can be called after changing the expected + * notice type to have the document re-parsed. + * + * @param parser The index of the Parser to re-run. + * @see #getParser(int) + */ + public void forceReparsing(int parser) { + parserManager.forceReparsing(parser); + } + + + /** + * Forces re-parsing with a specific parser. Note that if this parser is + * not installed on this text area, nothing will happen. + * + * @param parser The parser that should re-parse this text area's contents. + * This should be installed on this text area. + * @return Whether the parser was installed on this text area. + * @see #forceReparsing(int) + */ + public boolean forceReparsing(Parser parser) { + for (int i=0; inull then this token has no special background + * color. + * @see #getForegroundForToken(Token) + */ + public Color getBackgroundForToken(Token token) { + Color c = null; + if (getHighlightSecondaryLanguages()) { + // 1-indexed, since 0 == main language. + int languageIndex = token.getLanguageIndex() - 1; + if (languageIndex>=0 && + languageIndex</" is typed. Note that this property is only + * honored for markup languages, such as HTML, XML and PHP. + * + * @return Whether closing markup tags should be automatically completed. + * @see #setCloseMarkupTags(boolean) + */ + public boolean getCloseMarkupTags() { + return closeMarkupTags; + } + + + /** + * Returns the code template manager for all instances of + * RSyntaxTextArea. The manager is lazily created. + * + * @return The code template manager. + * @see #setTemplatesEnabled(boolean) + */ + public static synchronized CodeTemplateManager getCodeTemplateManager() { + if (codeTemplateManager==null) { + codeTemplateManager = new CodeTemplateManager(); + } + return codeTemplateManager; + } + + + /** + * Returns the default bracket-match background color. + * + * @return The color. + * @see #getDefaultBracketMatchBorderColor + */ + public static Color getDefaultBracketMatchBGColor() { + return DEFAULT_BRACKET_MATCH_BG_COLOR; + } + + + /** + * Returns the default bracket-match border color. + * + * @return The color. + * @see #getDefaultBracketMatchBGColor + */ + public static Color getDefaultBracketMatchBorderColor() { + return DEFAULT_BRACKET_MATCH_BORDER_COLOR; + } + + + /** + * Returns the default selection color for this text area. This + * color was chosen because it's light and RSyntaxTextArea + * does not change text color between selected/unselected text for + * contrast like regular JTextAreas do. + * + * @return The default selection color. + */ + public static Color getDefaultSelectionColor() { + return DEFAULT_SELECTION_COLOR; + } + + + /** + * Returns the "default" syntax highlighting color scheme. The colors + * used are somewhat standard among syntax highlighting text editors. + * + * @return The default syntax highlighting color scheme. + * @see #restoreDefaultSyntaxScheme() + * @see #getSyntaxScheme() + * @see #setSyntaxScheme(SyntaxScheme) + */ + public SyntaxScheme getDefaultSyntaxScheme() { + return new SyntaxScheme(getFont()); + } + + + /** + * Returns whether an EOL marker should be drawn at the end of each line. + * + * @return Whether EOL markers should be visible. + * @see #setEOLMarkersVisible(boolean) + * @see #isWhitespaceVisible() + */ + public boolean getEOLMarkersVisible() { + return eolMarkersVisible; + } + + + /** + * Returns the fold manager for this text area. + * + * @return The fold manager. + */ + public FoldManager getFoldManager() { + return foldManager; + } + + + /** + * Returns the font for tokens of the specified type. + * + * @param type The type of token. + * @return The font to use for that token type. + * @see #getFontMetricsForTokenType(int) + */ + public Font getFontForTokenType(int type) { + Font f = syntaxScheme.getStyle(type).font; + return f!=null ? f : getFont(); + } + + + /** + * Returns the font metrics for tokens of the specified type. + * + * @param type The type of token. + * @return The font metrics to use for that token type. + * @see #getFontForTokenType(int) + */ + public FontMetrics getFontMetricsForTokenType(int type) { + FontMetrics fm = syntaxScheme.getStyle(type).fontMetrics; + return fm!=null ? fm : defaultFontMetrics; + } + + + /** + * Returns the foreground color to use when painting a token. + * + * @param t The token. + * @return The foreground color to use for that token. This + * value is never null. + * @see #getBackgroundForToken(Token) + */ + public Color getForegroundForToken(Token t) { + if (getHyperlinksEnabled() && hoveredOverLinkOffset==t.getOffset() && + (t.isHyperlink() || linkGeneratorResult!=null)) { + return hyperlinkFG; + } + return getForegroundForTokenType(t.getType()); + } + + + /** + * Returns the foreground color to use when painting a token. This does + * not take into account whether the token is a hyperlink. + * + * @param type The token type. + * @return The foreground color to use for that token. This + * value is never null. + * @see #getForegroundForToken(Token) + */ + public Color getForegroundForTokenType(int type) { + Color fg = syntaxScheme.getStyle(type).foreground; + return fg!=null ? fg : getForeground(); + } + + + /** + * Returns whether fractional font metrics are enabled for this text area. + * + * @return Whether fractional font metrics are enabled. + * @see #setFractionalFontMetricsEnabled + * @see #getAntiAliasingEnabled() + */ + public boolean getFractionalFontMetricsEnabled() { + return fractionalFontMetricsEnabled; + } + + + /** + * Returns a Graphics2D version of the specified graphics + * that has been initialized with the proper rendering hints. + * + * @param g The graphics context for which to get a + * Graphics2D. + * @return The Graphics2D. + */ + private Graphics2D getGraphics2D(Graphics g) { + Graphics2D g2d = (Graphics2D)g; + if (aaHints!=null) { + g2d.addRenderingHints(aaHints); + } + if (fractionalFontMetricsEnabled) { + g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, + RenderingHints.VALUE_FRACTIONALMETRICS_ON); + } + return g2d; + } + + + /** + * Returns whether "secondary" languages should have their backgrounds + * colored differently to visually differentiate them. This feature + * imposes a fair performance penalty. + * + * @return Whether secondary languages have their backgrounds colored + * differently. + * @see #setHighlightSecondaryLanguages(boolean) + * @see #getSecondaryLanguageBackground(int) + * @see #getSecondaryLanguageCount() + * @see #setSecondaryLanguageBackground(int, Color) + */ + public boolean getHighlightSecondaryLanguages() { + return highlightSecondaryLanguages; + } + + + /** + * Returns the color to use when painting hyperlinks. + * + * @return The color to use when painting hyperlinks. + * @see #setHyperlinkForeground(Color) + * @see #getHyperlinksEnabled() + */ + public Color getHyperlinkForeground() { + return hyperlinkFG; + } + + + /** + * Returns whether hyperlinks are enabled for this text area. + * + * @return Whether hyperlinks are enabled for this text area. + * @see #setHyperlinksEnabled(boolean) + */ + public boolean getHyperlinksEnabled() { + return hyperlinksEnabled; + } + + + /** + * Returns the last visible offset in this text area. This may not be the + * length of the document if code folding is enabled. + * + * @return The last visible offset in this text area. + */ + public int getLastVisibleOffset() { + if (isCodeFoldingEnabled()) { + int lastVisibleLine = foldManager.getLastVisibleLine(); + if (lastVisibleLine getMarkAllHighlightRanges() { + return ((RSyntaxTextAreaHighlighter)getHighlighter()). + getMarkAllHighlightRanges(); + } + + + /** + * Returns a list of "marked occurrences" in the text area. If there are + * no marked occurrences, this will be an empty list. + * + * @return The list of marked occurrences. + */ + public List getMarkedOccurrences() { + return ((RSyntaxTextAreaHighlighter)getHighlighter()). + getMarkedOccurrences(); + } + + + /** + * Returns whether "Mark Occurrences" is enabled. + * + * @return Whether "Mark Occurrences" is enabled. + * @see #setMarkOccurrences(boolean) + */ + public boolean getMarkOccurrences() { + return markOccurrencesSupport!=null; + } + + + /** + * Returns the color used for "mark occurrences" highlights. + * + * @return The mark occurrences color. + * @see #setMarkOccurrencesColor(Color) + */ + public Color getMarkOccurrencesColor() { + return markOccurrencesColor; + } + + + /** + * Returns the delay between when the caret is moved and when "marked + * occurrences" are highlighted. + * + * @return The "mark occurrences" delay. + * @see #setMarkOccurrencesDelay(int) + */ + public int getMarkOccurrencesDelay() { + return markOccurrencesDelay; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + boolean getMarkOccurrencesOfTokenType(int type) { + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + return doc.getMarkOccurrencesOfTokenType(type); + } + + + /** + * Gets the color used as the background for a matched bracket. + * + * @return The color used. If this is null, no special + * background is painted behind a matched bracket. + * @see #setMatchedBracketBGColor + * @see #getMatchedBracketBorderColor + */ + public Color getMatchedBracketBGColor() { + return matchedBracketBGColor; + } + + + /** + * Gets the color used as the border for a matched bracket. + * + * @return The color used. + * @see #setMatchedBracketBorderColor + * @see #getMatchedBracketBGColor + */ + public Color getMatchedBracketBorderColor() { + return matchedBracketBorderColor; + } + + + /** + * Returns the caret's offset's rectangle, or null if there + * is currently no matched bracket, bracket matching is disabled, or "paint + * both matched brackets" is disabled. This should never be called by the + * programmer directly. + * + * @return The rectangle surrounding the matched bracket. + * @see #getMatchRectangle() + */ + Rectangle getDotRectangle() { + return dotRect; + } + + + /** + * Returns the matched bracket's rectangle, or null if there + * is currently no matched bracket. This should never be called by the + * programmer directly. + * + * @return The rectangle surrounding the matched bracket. + * @see #getDotRectangle() + */ + Rectangle getMatchRectangle() { + return match; + } + + + /** + * Overridden to return the max ascent for any font used in the editor. + * + * @return The max ascent value. + */ + @Override + public int getMaxAscent() { + return maxAscent; + } + + + /** + * Returns whether the bracket at the caret position is painted as a + * "match" when a matched bracket is found. Note that this property does + * nothing if {@link #isBracketMatchingEnabled()} returns + * false. + * + * @return Whether both brackets in a bracket pair are highlighted when + * bracket matching is enabled. + * @see #setPaintMatchedBracketPair(boolean) + * @see #isBracketMatchingEnabled() + * @see #setBracketMatchingEnabled(boolean) + */ + public boolean getPaintMatchedBracketPair() { + return paintMatchedBracketPair; + } + + + /** + * Returns whether tab lines are painted. + * + * @return Whether tab lines are painted. + * @see #setPaintTabLines(boolean) + * @see #getTabLineColor() + */ + public boolean getPaintTabLines() { + return paintTabLines; + } + + + /** + * Returns whether to paint the backgrounds of tokens on the specified + * line (assuming they are not obstructed by e.g. selection). + * + * @param line The line number. + * @param y The y-offset of the line. This is used when line wrap is + * enabled, since each logical line can be rendered as several + * physical lines. + * @return Whether to paint the token backgrounds on this line. + */ + boolean getPaintTokenBackgrounds(int line, float y) { + //System.out.println(y + ", " + getCurrentCaretY() + "-" + (getCurrentCaretY() + getLineHeight())); + int iy = (int)y; + int curCaretY = getCurrentCaretY(); + return iy=curCaretY+getLineHeight() || + !getHighlightCurrentLine(); + } + + + /** + * Returns the specified parser. + * + * @param index The {@link Parser} to retrieve. + * @return The Parser. + * @see #getParserCount() + * @see #addParser(Parser) + */ + public Parser getParser(int index) { + return parserManager.getParser(index); + } + + + /** + * Returns the number of parsers operating on this text area. + * + * @return The parser count. + * @see #addParser(Parser) + */ + public int getParserCount() { + return parserManager==null ? 0 : parserManager.getParserCount(); + } + + + /** + * Returns the currently set parser delay. This is the delay that must + * occur between edits for any registered {@link Parser}s to run. + * + * @return The currently set parser delay, in milliseconds. + * @see #setParserDelay(int) + */ + public int getParserDelay() { + return parserManager.getDelay(); + } + + + /** + * Returns a list of the current parser notices for this text area. + * This method (like most Swing methods) should only be called on the + * EDT. + * + * @return The list of notices. This will be an empty list if there are + * none. + */ + public List getParserNotices() { + if (parserManager==null) { + return Collections.emptyList(); + } + return parserManager.getParserNotices(); + } + + + /** + * Workaround for JTextComponents allowing the caret to be rendered + * entirely off-screen if the entire "previous" character fit entirely. + * + * @return The amount of space to add to the x-axis preferred span. + * @see #setRightHandSideCorrection(int) + */ + public int getRightHandSideCorrection() { + return rhsCorrection; + } + + + /** + * If auto-indent is enabled, this method returns whether a new line after + * this one should be indented (based on the standard indentation rules for + * the current programming language). For example, in Java, for a line + * containing: + * + *

    +	 * for (int i=0; i<10; i++) {
    +	 * 
    + * + * the following line should be indented. + * + * @param line The line to check. + * @return Whether a line inserted after this one should be auto-indented. + * If auto-indentation is disabled, this will always return + * false. + * @see #isAutoIndentEnabled() + */ + public boolean getShouldIndentNextLine(int line) { + if (isAutoIndentEnabled()) { + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + return doc.getShouldIndentNextLine(line); + } + return false; + } + + + /** + * Returns whether a small popup window should display the text on the + * line containing a matched bracket whenever a matched bracket is off- + * screen. + * + * @return Whether to show the popup. + * @see #setShowMatchedBracketPopup(boolean) + */ + public boolean getShowMatchedBracketPopup() { + return showMatchedBracketPopup; + } + + + /** + * Returns what type of syntax highlighting this editor is doing. + * + * @return The style being used, such as + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. + * @see #setSyntaxEditingStyle(String) + * @see SyntaxConstants + */ + public String getSyntaxEditingStyle() { + return syntaxStyleKey; + } + + + /** + * Returns all of the colors currently being used in syntax highlighting + * by this text component. + * + * @return An instance of SyntaxScheme that represents + * the colors currently being used for syntax highlighting. + * @see #setSyntaxScheme(SyntaxScheme) + */ + public SyntaxScheme getSyntaxScheme() { + return syntaxScheme; + } + + + /** + * Returns the color used to paint tab lines. + * + * @return The color used to paint tab lines. + * @see #setTabLineColor(Color) + * @see #getPaintTabLines() + * @see #setPaintTabLines(boolean) + */ + public Color getTabLineColor() { + return tabLineColor; + } + + + /** + * Returns whether a border is painted around marked occurrences. + * + * @return Whether a border is painted. + * @see #setPaintMarkOccurrencesBorder(boolean) + * @see #getMarkOccurrencesColor() + * @see #getMarkOccurrences() + */ + public boolean getPaintMarkOccurrencesBorder() { + return paintMarkOccurrencesBorder; + } + + + /** + * Returns the background color for the specified secondary language. + * + * @param index The language index. Note that these are 1-based, not + * 0-based, and should be in the range + * 1-getSecondaryLanguageCount(), inclusive. + * @return The color, or null if none. + * @see #getSecondaryLanguageCount() + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getHighlightSecondaryLanguages() + */ + public Color getSecondaryLanguageBackground(int index) { + return secondaryLanguageBackgrounds[index - 1]; + } + + + /** + * Returns the number of secondary language backgrounds. + * + * @return The number of secondary language backgrounds. + * @see #getSecondaryLanguageBackground(int) + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getHighlightSecondaryLanguages() + */ + public int getSecondaryLanguageCount() { + return secondaryLanguageBackgrounds.length; + } + + + /** + * Returns whether or not templates are enabled for all instances + * of RSyntaxTextArea.

    + * + * For more flexible boilerplate code insertion, consider using the + * + * TemplateCompletion class in the + * AutoComplete + * add-on library. + * + * @return Whether templates are enabled. + * @see #saveTemplates() + * @see #setTemplateDirectory(String) + * @see #setTemplatesEnabled(boolean) + */ + public static synchronized boolean getTemplatesEnabled() { + return templatesEnabled; + } + + private byte[] getTextAsRtf(int start, int end) { + + // Create the RTF selection. + RtfGenerator gen = new RtfGenerator(getBackground()); + Token tokenList = getTokenListFor(start, end); + for (Token t = tokenList; t != null; t = t.getNextToken()) { + if (t.isPaintable()) { + if (t.length() == 1 && t.charAt(0) == '\n') { + gen.appendNewline(); + } else { + Font font = getFontForTokenType(t.getType()); + Color bg = getBackgroundForToken(t); + boolean underline = getUnderlineForToken(t); + // Small optimization - don't print fg color if this + // is a whitespace color. Saves on RTF size. + if (t.isWhitespace()) { + gen.appendToDocNoFG(t.getLexeme(), font, bg, underline); + } else { + Color fg = getForegroundForToken(t); + gen.appendToDoc(t.getLexeme(), font, fg, bg, underline); + } + } + } + } + + // RTF text is 7-bit ASCII so this should cover us + return gen.getRtf().getBytes(StandardCharsets.UTF_8); + } + + + /** + * Returns a token list for the given range in the document. + * + * @param startOffs The starting offset in the document. + * @param endOffs The end offset in the document. + * @return The first token in the token list. + */ + public Token getTokenListFor(int startOffs, int endOffs) { + + TokenImpl tokenList = null; + TokenImpl lastToken = null; + + Element map = getDocument().getDefaultRootElement(); + int startLine = map.getElementIndex(startOffs); + int endLine = map.getElementIndex(endOffs); + + for (int line=startLine; line<=endLine; line++) { + TokenImpl t = (TokenImpl)getTokenListForLine(line); + t = cloneTokenList(t); + if (tokenList==null) { + tokenList = t; + lastToken = tokenList; + } + else { + lastToken.setNextToken(t); + } + while (lastToken.getNextToken()!=null && + lastToken.getNextToken().isPaintable()) { + lastToken = (TokenImpl)lastToken.getNextToken(); + } + if (line startOffs?). + if (startOffs>=tokenList.getOffset()) { + while (!tokenList.containsPosition(startOffs)) { + tokenList = (TokenImpl)tokenList.getNextToken(); + } + tokenList.makeStartAt(startOffs); + } + + TokenImpl temp = tokenList; + // Be careful to check temp for null here. It is possible that no + // token contains endOffs, if endOffs is at the end of a line. + while (temp!=null && !temp.containsPosition(endOffs)) { + temp = (TokenImpl)temp.getNextToken(); + } + if (temp!=null) { + temp.textCount = endOffs - temp.getOffset(); + temp.setNextToken(null); + } + + return tokenList; + + } + + + /** + * Returns a list of tokens representing the given line. + * + * @param line The line number to get tokens for. + * @return A linked list of tokens representing the line's text. + */ + public Token getTokenListForLine(int line) { + return ((RSyntaxDocument)getDocument()).getTokenListForLine(line); + } + + + /** + * Returns the painter to use for rendering tokens. + * + * @return The painter to use for rendering tokens. + */ + TokenPainter getTokenPainter() { + return tokenPainter; + } + + + /** + * Returns the tool tip to display for a mouse event at the given + * location. This method is overridden to give a registered parser a + * chance to display a tool tip (such as an error description when the + * mouse is over an error highlight). + * + * @param e The mouse event. + */ + @Override + public String getToolTipText(MouseEvent e) { + + // Apple JVMS (Java 6 and prior) have their ToolTipManager events + // repeat for some reason, so this method gets called every 1 second + // or so. We short-circuit that since some ToolTipManagers may do + // expensive calculations (e.g. language supports). + if (RSyntaxUtilities.getOS()==RSyntaxUtilities.OS_MAC_OSX) { + Point newLoc = e.getPoint(); + if (newLoc!=null && newLoc.equals(cachedTipLoc)) { + return cachedTip; + } + cachedTipLoc = newLoc; + } + + return cachedTip = getToolTipTextImpl(e); + + } + + + /** + * Does the dirty work of getting the tool tip text. + * + * @param e The mouse event. + * @return The tool tip text. + */ + protected String getToolTipTextImpl(MouseEvent e) { + + // Check parsers for tool tips first. + String text = null; + URL imageBase = null; + if (parserManager!=null) { + ToolTipInfo info = parserManager.getToolTipText(e); + if (info!=null) { // Should always be true + text = info.getToolTipText(); // May be null + imageBase = info.getImageBase(); // May be null + } + } + if (text==null) { + text = super.getToolTipText(e); + } + + // Do we want to use "focusable" tips? + if (getUseFocusableTips()) { + if (text!=null) { + if (focusableTip==null) { + focusableTip = new FocusableTip(this, parserManager); + } + focusableTip.setImageBase(imageBase); + focusableTip.toolTipRequested(e, text); + } + // No tool tip text at new location - hide tip window if one is + // currently visible + else if (focusableTip!=null) { + focusableTip.possiblyDisposeOfTipWindow(); + } + return null; + } + + return text; // Standard tool tips + + } + + + /** + * Returns whether the specified token should be underlined. + * A token is underlined if its syntax style includes underlining, + * or if it is a hyperlink and hyperlinks are enabled. + * + * @param t The token. + * @return Whether the specified token should be underlined. + */ + public boolean getUnderlineForToken(Token t) { + return (getHyperlinksEnabled() && + (t.isHyperlink() || + (linkGeneratorResult!=null && + linkGeneratorResult.getSourceOffset()==t.getOffset()))) || + syntaxScheme.getStyle(t.getType()).underline; + } + + + /** + * Returns whether "focusable" tool tips are used instead of standard + * ones. Focusable tool tips are tool tips that the user can click on, + * resize, copy from, and click links in. + * + * @return Whether to use focusable tool tips. + * @see #setUseFocusableTips(boolean) + * @see FocusableTip + */ + public boolean getUseFocusableTips() { + return useFocusableTips; + } + + + /** + * Returns whether selected text should use the "selected text color" + * property set via {@link #setSelectedTextColor(Color)}. This is the + * typical behavior of text components. By default, RSyntaxTextArea does + * not do this, so that token styles are visible even in selected regions + * of text. + * + * @return Whether the "selected text" color is used when painting text + * in selected regions. + * @see #setUseSelectedTextColor(boolean) + */ + public boolean getUseSelectedTextColor() { + return useSelectedTextColor; + } + + + /** + * Called by constructors to initialize common properties of the text + * editor. + */ + @Override + protected void init() { + + super.init(); + metricsNeverRefreshed = true; + + tokenPainter = new DefaultTokenPainter(); + + // NOTE: Our actions are created here instead of in a static block + // so they are only created when the first RTextArea is instantiated, + // not before. There have been reports of users calling static getters + // (e.g. RSyntaxTextArea.getDefaultBracketMatchBGColor()) which would + // cause these actions to be created and (possibly) incorrectly + // localized, if they were in a static block. + if (toggleCurrentFoldAction==null) { + createRstaPopupMenuActions(); + } + + // Set some RSyntaxTextArea default values. + syntaxStyleKey = SYNTAX_STYLE_NONE; + setMatchedBracketBGColor(getDefaultBracketMatchBGColor()); + setMatchedBracketBorderColor(getDefaultBracketMatchBorderColor()); + setBracketMatchingEnabled(true); + setAnimateBracketMatching(true); + lastBracketMatchPos = -1; + setSelectionColor(getDefaultSelectionColor()); + setTabLineColor(null); + setMarkOccurrencesColor(MarkOccurrencesSupport.DEFAULT_COLOR); + setMarkOccurrencesDelay(MarkOccurrencesSupport.DEFAULT_DELAY_MS); + + foldManager = new DefaultFoldManager(this); + + // Set auto-indent related stuff. + setAutoIndentEnabled(true); + setCloseCurlyBraces(true); + setCloseMarkupTags(true); + setClearWhitespaceLinesEnabled(true); + + setHyperlinksEnabled(true); + setLinkScanningMask(InputEvent.CTRL_DOWN_MASK); + setHyperlinkForeground(Color.BLUE); + isScanningForLinks = false; + setUseFocusableTips(true); + + //setAntiAliasingEnabled(true); + setDefaultAntiAliasingState(); + restoreDefaultSyntaxScheme(); + + setHighlightSecondaryLanguages(true); + secondaryLanguageBackgrounds = new Color[3]; + secondaryLanguageBackgrounds[0] = new Color(0xfff0cc); + secondaryLanguageBackgrounds[1] = new Color(0xdafeda); + secondaryLanguageBackgrounds[2] = new Color(0xffe0f0); + + setRightHandSideCorrection(0); + setShowMatchedBracketPopup(true); + + } + + + /** + * Returns whether or not auto-indent is enabled. + * + * @return Whether or not auto-indent is enabled. + * @see #setAutoIndentEnabled(boolean) + */ + public boolean isAutoIndentEnabled() { + return autoIndentEnabled; + } + + + /** + * Returns whether or not bracket matching is enabled. + * + * @return true iff bracket matching is enabled. + * @see #setBracketMatchingEnabled + */ + public final boolean isBracketMatchingEnabled() { + return bracketMatchingEnabled; + } + + + /** + * Returns whether or not lines containing nothing but whitespace are made + * into blank lines when Enter is pressed in them. + * + * @return Whether or not whitespace-only lines are cleared when + * the user presses Enter on them. + * @see #setClearWhitespaceLinesEnabled(boolean) + */ + public boolean isClearWhitespaceLinesEnabled() { + return clearWhitespaceLines; + } + + + /** + * Returns whether code folding is enabled. Note that only certain + * languages support code folding; those that do not will ignore this + * property. + * + * @return Whether code folding is enabled. + * @see #setCodeFoldingEnabled(boolean) + */ + public boolean isCodeFoldingEnabled() { + return foldManager.isCodeFoldingEnabled(); + } + + + /** + * Returns whether whitespace (spaces and tabs) is visible. + * + * @return Whether whitespace is visible. + * @see #setWhitespaceVisible(boolean) + * @see #getEOLMarkersVisible() + */ + public boolean isWhitespaceVisible() { + return whitespaceVisible; + } + + + /** + * Returns the token at the specified position in the model. + * + * @param offs The position in the model. + * @return The token, or null if no token is at that + * position. + * @see #viewToToken(Point) + */ + public Token modelToToken(int offs) { + if (offs>=0) { + try { + int line = getLineOfOffset(offs); + Token t = getTokenListForLine(line); + return RSyntaxUtilities.getTokenAtOffset(t, offs); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + return null; + } + + + /** + * The paintComponent method is overridden so we + * apply any necessary rendering hints to the Graphics object. + */ + @Override + protected void paintComponent(Graphics g) { + + // A call to refreshFontMetrics() used to be in addNotify(), but + // unfortunately we cannot always get the graphics context there. If + // the parent frame/dialog is LAF-decorated, there is a chance that the + // window's width and/or height is still == 0 at addNotify() (e.g. + // WebLaF). So unfortunately it's safest to do this here, with a flag + // to only allow it to happen once. + if (metricsNeverRefreshed) { + refreshFontMetrics(getGraphics2D(getGraphics())); + metricsNeverRefreshed = false; + } + + super.paintComponent(getGraphics2D(g)); + } + + + private void refreshFontMetrics(Graphics2D g2d) { + // It is assumed that any rendering hints are already applied to g2d. + defaultFontMetrics = g2d.getFontMetrics(getFont()); + syntaxScheme.refreshFontMetrics(g2d); + if (!getLineWrap()) { + // HORRIBLE HACK! The un-wrapped view needs to refresh its cached + // longest line information. + SyntaxView sv = (SyntaxView)getUI().getRootView(this).getView(0); + sv.calculateLongestLine(); + } + } + + + /** + * {@inheritDoc} + */ + @Override + public void redoLastAction() { + super.redoLastAction(); + // Occasionally marked occurrences' Positions are in invalid states + // due to how javax.swing.text.AbstractDocument tracks the start and + // end offsets. This is usually not needed, but can be when the last + // token in the Document is a marked occurrence, and an undo or redo + // occurs which clears most of the document text. In that case it is + // possible for the end Position to be reset to something small, but + // the start offset to be its prior valid (start > end). + ((RSyntaxTextAreaHighlighter)getHighlighter()). + clearMarkOccurrencesHighlights(); + } + + + /** + * Removes an "active line range" listener from this text area. + * + * @param l The listener to remove. + * @see #removeActiveLineRangeListener(ActiveLineRangeListener) + */ + public void removeActiveLineRangeListener(ActiveLineRangeListener l) { + listenerList.remove(ActiveLineRangeListener.class, l); + } + + + /** + * Removes a hyperlink listener from this text area. + * + * @param l The listener to remove. + * @see #addHyperlinkListener(HyperlinkListener) + */ + public void removeHyperlinkListener(HyperlinkListener l) { + listenerList.remove(HyperlinkListener.class, l); + } + + + /** + * Overridden so we stop this text area's parsers, if any. + */ + @Override + public void removeNotify() { + if (parserManager!=null) { + parserManager.stopParsing(); + } + super.removeNotify(); + } + + + /** + * Removes a parser from this text area. + * + * @param parser The {@link Parser} to remove. + * @return Whether the parser was found and removed. + * @see #clearParsers() + * @see #addParser(Parser) + * @see #getParser(int) + */ + public boolean removeParser(Parser parser) { + boolean removed = false; + if (parserManager!=null) { + removed = parserManager.removeParser(parser); + } + return removed; + } + + + /** + * Sets the colors used for syntax highlighting to their defaults. + * + * @see #setSyntaxScheme(SyntaxScheme) + * @see #getSyntaxScheme() + * @see #getDefaultSyntaxScheme() + */ + public void restoreDefaultSyntaxScheme() { + setSyntaxScheme(getDefaultSyntaxScheme()); + } + + + /** + * Attempts to save all currently-known templates to the current template + * directory, as set by setTemplateDirectory. Templates + * will be saved as XML files with names equal to their abbreviations; for + * example, a template that expands on the word "forb" will be saved as + * forb.xml. + * + * @return Whether or not the save was successful. The save will + * be unsuccessful if the template directory does not exist or + * if it has not been set (i.e., you have not yet called + * setTemplateDirectory). + * @see #getTemplatesEnabled + * @see #setTemplateDirectory + * @see #setTemplatesEnabled + */ + public static synchronized boolean saveTemplates() { + if (!getTemplatesEnabled()) { + return false; + } + return getCodeTemplateManager().saveTemplates(); + } + + + /** + * Sets the "active line range." Note that this + * RSyntaxTextArea itself does nothing with this information, + * but if it is contained inside an {@link org.fife.ui.rtextarea.RTextScrollPane}, + * the active line range may be displayed in the icon area of the + * {@link org.fife.ui.rtextarea.Gutter}.

    + * + * Note that basic users of RSyntaxTextArea will not call this + * method directly; rather, it is usually called by instances of + * LanguageSupport in the RSTALangaugeSupport + * library. See http://fifesoft.com + * for more information about this library. + * + * @param min The "minimum" line in the active line range, or + * -1 if the range is being cleared. + * @param max The "maximum" line in the active line range, or + * -1 if the range is being cleared. + * @see #addActiveLineRangeListener(ActiveLineRangeListener) + */ + public void setActiveLineRange(int min, int max) { + if (min==-1) { + max = -1; // Force max to be -1 if min is. + } + fireActiveLineRangeEvent(min, max); + } + + + /** + * Sets whether bracket matching should be animated. This fires a property + * change event of type {@link #ANIMATE_BRACKET_MATCHING_PROPERTY}. + * + * @param animate Whether to animate bracket matching. + * @see #getAnimateBracketMatching() + */ + public void setAnimateBracketMatching(boolean animate) { + if (animate!=animateBracketMatching) { + animateBracketMatching = animate; + if (animate && bracketRepaintTimer==null) { + bracketRepaintTimer = new BracketMatchingTimer(); + } + firePropertyChange(ANIMATE_BRACKET_MATCHING_PROPERTY, + !animate, animate); + } + } + + + /** + * Sets whether anti-aliasing is enabled in this editor. This method + * fires a property change event of type {@link #ANTIALIAS_PROPERTY}. + * + * @param enabled Whether anti-aliasing is enabled. + * @see #getAntiAliasingEnabled() + */ + public void setAntiAliasingEnabled(boolean enabled) { + + boolean currentlyEnabled = aaHints!=null; + + if (enabled!=currentlyEnabled) { + + if (enabled) { + aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); + // If the desktop query method comes up empty, use the standard + // Java2D greyscale method. Note this will likely NOT be as + // nice as what would be used if the getDesktopAntiAliasHints() + // call worked. + if (aaHints==null) { + Map temp = + new HashMap<>(); + temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + aaHints = temp; + } + } + else { + aaHints = null; + } + + // We must be connected to a screen resource for our graphics + // to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + firePropertyChange(ANTIALIAS_PROPERTY, !enabled, enabled); + repaint(); + + } + + } + + + /** + * Sets whether or not auto-indent is enabled. This fires a property + * change event of type {@link #AUTO_INDENT_PROPERTY}. + * + * @param enabled Whether or not auto-indent is enabled. + * @see #isAutoIndentEnabled() + */ + public void setAutoIndentEnabled(boolean enabled) { + if (autoIndentEnabled!=enabled) { + autoIndentEnabled = enabled; + firePropertyChange(AUTO_INDENT_PROPERTY, !enabled, enabled); + } + } + + + /** + * Sets whether bracket matching is enabled. This fires a property change + * event of type {@link #BRACKET_MATCHING_PROPERTY}. + * + * @param enabled Whether or not bracket matching should be enabled. + * @see #isBracketMatchingEnabled() + */ + public void setBracketMatchingEnabled(boolean enabled) { + if (enabled!=bracketMatchingEnabled) { + bracketMatchingEnabled = enabled; + repaint(); + firePropertyChange(BRACKET_MATCHING_PROPERTY, !enabled, enabled); + } + } + + + /** + * Sets whether or not lines containing nothing but whitespace are made + * into blank lines when Enter is pressed in them. This method fires + * a property change event of type {@link #CLEAR_WHITESPACE_LINES_PROPERTY}. + * + * @param enabled Whether or not whitespace-only lines are cleared when + * the user presses Enter on them. + * @see #isClearWhitespaceLinesEnabled() + */ + public void setClearWhitespaceLinesEnabled(boolean enabled) { + if (enabled!=clearWhitespaceLines) { + clearWhitespaceLines = enabled; + firePropertyChange(CLEAR_WHITESPACE_LINES_PROPERTY, + !enabled, enabled); + } + } + + + /** + * Toggles whether curly braces should be automatically closed when a + * newline is entered after an opening curly brace. Note that this + * property is only honored for languages that use curly braces to denote + * code blocks.

    + * + * This method fires a property change event of type + * {@link #CLOSE_CURLY_BRACES_PROPERTY}. + * + * @param close Whether curly braces should be automatically closed. + * @see #getCloseCurlyBraces() + */ + public void setCloseCurlyBraces(boolean close) { + if (close!=closeCurlyBraces) { + closeCurlyBraces = close; + firePropertyChange(CLOSE_CURLY_BRACES_PROPERTY, !close, close); + } + } + + + /** + * Sets whether closing markup tags should be automatically completed + * when "</" is typed. Note that this property is only + * honored for markup languages, such as HTML, XML and PHP.

    + * + * This method fires a property change event of type + * {@link #CLOSE_MARKUP_TAGS_PROPERTY}. + * + * @param close Whether closing markup tags should be automatically + * completed. + * @see #getCloseMarkupTags() + */ + public void setCloseMarkupTags(boolean close) { + if (close!=closeMarkupTags) { + closeMarkupTags = close; + firePropertyChange(CLOSE_MARKUP_TAGS_PROPERTY, !close, close); + } + } + + + /** + * Sets whether code folding is enabled. Note that only certain + * languages will support code folding out of the box. Those languages + * which do not support folding will ignore this property.

    + * This method fires a property change event of type + * {@link #CODE_FOLDING_PROPERTY}. + * + * @param enabled Whether code folding should be enabled. + * @see #isCodeFoldingEnabled() + */ + public void setCodeFoldingEnabled(boolean enabled) { + if (enabled!=foldManager.isCodeFoldingEnabled()) { + foldManager.setCodeFoldingEnabled(enabled); + firePropertyChange(CODE_FOLDING_PROPERTY, !enabled, enabled); + } + } + + + /** + * Sets anti-aliasing to whatever the user's desktop value is. + * + * @see #getAntiAliasingEnabled() + */ + private void setDefaultAntiAliasingState() { + + // Most accurate technique, but not available on all OSes. + aaHints = RSyntaxUtilities.getDesktopAntiAliasHints(); + if (aaHints==null) { + + Map temp = + new HashMap<>(); + + // In Java 6+, you can figure out what text AA hint Swing uses for + // JComponents... + JLabel label = new JLabel(); + FontMetrics fm = label.getFontMetrics(label.getFont()); + Object hint = null; + //FontRenderContext frc = fm.getFontRenderContext(); + //hint = fm.getAntiAliasingHint(); + try { + Method m = FontMetrics.class.getMethod("getFontRenderContext"); + FontRenderContext frc = (FontRenderContext)m.invoke(fm); + m = FontRenderContext.class.getMethod("getAntiAliasingHint"); + hint = m.invoke(frc); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + // Swallow, either Java 1.5, or running in an applet + } + + // If not running Java 6+, default to AA enabled on Windows where + // the software AA is pretty fast, and default (e.g. disabled) on + // non-Windows. Note that OS X always uses AA no matter what + // rendering hints you give it, so this is a moot point there. + //System.out.println("Rendering hint: " + hint); + if (hint==null) { + String os = System.getProperty("os.name").toLowerCase(); + if (os.contains("windows")) { + hint = RenderingHints.VALUE_TEXT_ANTIALIAS_ON; + } + else { + hint = RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT; + } + } + temp.put(RenderingHints.KEY_TEXT_ANTIALIASING, hint); + + aaHints = temp; + + } + + // We must be connected to a screen resource for our graphics + // to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + repaint(); + + } + + + /** + * Sets the document used by this text area. This is overridden so that + * only instances of {@link RSyntaxDocument} are accepted; for all + * others, an exception will be thrown. + * + * @param document The new document for this text area. + * @throws IllegalArgumentException If the document is not an + * RSyntaxDocument. + */ + @Override + public void setDocument(Document document) { + if (!(document instanceof RSyntaxDocument)) { + throw new IllegalArgumentException("Documents for " + + "RSyntaxTextArea must be instances of " + + "RSyntaxDocument!"); + } + if (markOccurrencesSupport != null) { + markOccurrencesSupport.clear(); + } + super.setDocument(document); + setSyntaxEditingStyle(((RSyntaxDocument)document).getSyntaxStyle()); + if (markOccurrencesSupport != null) { + markOccurrencesSupport.doMarkOccurrences(); + } + } + + + /** + * Sets whether EOL markers are visible at the end of each line. This + * method fires a property change of type {@link #EOL_VISIBLE_PROPERTY}. + * + * @param visible Whether EOL markers are visible. + * @see #getEOLMarkersVisible() + * @see #setWhitespaceVisible(boolean) + */ + public void setEOLMarkersVisible(boolean visible) { + if (visible!=eolMarkersVisible) { + eolMarkersVisible = visible; + repaint(); + firePropertyChange(EOL_VISIBLE_PROPERTY, !visible, visible); + } + } + + + /** + * Sets the font used by this text area. Note that if some token styles + * are using a different font, they will not be changed by calling this + * method. To set different fonts on individual token types, use the + * text area's SyntaxScheme. + * + * @param font The font. + * @see SyntaxScheme#getStyle(int) + */ + @Override + public void setFont(Font font) { + + Font old = super.getFont(); + super.setFont(font); // Do this first. + + // Usually programmers keep a single font for all token types, but + // may use bold or italic for styling some. + SyntaxScheme scheme = getSyntaxScheme(); + if (scheme!=null && old!=null) { + scheme.changeBaseFont(old, font); + calculateLineHeight(); + } + + // We must be connected to a screen resource for our + // graphics to be non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + // Updates the margin line. + updateMarginLineX(); + // Force the current line highlight to be repainted, even + // though the caret's location hasn't changed. + forceCurrentLineHighlightRepaint(); + // Get line number border in text area to repaint again + // since line heights have updated. + firePropertyChange("font", old, font); + // So parent JScrollPane will have its scrollbars updated. + revalidate(); + } + + } + + + /** + * Sets whether fractional font metrics are enabled. This method fires + * a property change event of type {@link #FRACTIONAL_FONTMETRICS_PROPERTY}. + * + * @param enabled Whether fractional font metrics are enabled. + * @see #getFractionalFontMetricsEnabled() + */ + public void setFractionalFontMetricsEnabled(boolean enabled) { + if (fractionalFontMetricsEnabled!=enabled) { + fractionalFontMetricsEnabled = enabled; + // We must be connected to a screen resource for our graphics to be + // non-null. + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + firePropertyChange(FRACTIONAL_FONTMETRICS_PROPERTY, + !enabled, enabled); + } + } + + + /** + * Sets the highlighter used by this text area. + * + * @param h The highlighter. + * @throws IllegalArgumentException If h is not an instance + * of {@link RSyntaxTextAreaHighlighter}. + */ + @Override + public void setHighlighter(Highlighter h) { + + // Ugh, many RSTA methods assume a non-null highlighter. This is kind + // of icky, but most applications never *don't* want a highlighter. + // See #189 - BasicTextUI clears highlighter by setting it to null there + if (h == null) { + h = new RSyntaxTextAreaHighlighter(); + } + + if (!(h instanceof RSyntaxTextAreaHighlighter)) { + throw new IllegalArgumentException("RSyntaxTextArea requires " + + "an RSyntaxTextAreaHighlighter for its Highlighter"); + } + super.setHighlighter(h); + } + + + /** + * Sets whether "secondary" languages should have their backgrounds + * colored differently to visually differentiate them. This feature + * imposes a fair performance penalty. This method fires a property change + * event of type {@link #HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY}. + * + * @see #getHighlightSecondaryLanguages() + * @see #setSecondaryLanguageBackground(int, Color) + * @see #getSecondaryLanguageCount() + */ + public void setHighlightSecondaryLanguages(boolean highlight) { + if (this.highlightSecondaryLanguages!=highlight) { + highlightSecondaryLanguages = highlight; + repaint(); + firePropertyChange(HIGHLIGHT_SECONDARY_LANGUAGES_PROPERTY, + !highlight, highlight); + } + } + + + /** + * Sets the color to use when painting hyperlinks. + * + * @param fg The color to use when painting hyperlinks. + * @throws NullPointerException If fg is null. + * @see #getHyperlinkForeground() + * @see #setHyperlinksEnabled(boolean) + */ + public void setHyperlinkForeground(Color fg) { + if (fg==null) { + throw new NullPointerException("fg cannot be null"); + } + hyperlinkFG = fg; + } + + + /** + * Sets whether hyperlinks are enabled for this text area. This method + * fires a property change event of type + * {@link #HYPERLINKS_ENABLED_PROPERTY}. + * + * @param enabled Whether hyperlinks are enabled. + * @see #getHyperlinksEnabled() + * @see #setLinkScanningMask(int) + */ + public void setHyperlinksEnabled(boolean enabled) { + if (this.hyperlinksEnabled!=enabled) { + this.hyperlinksEnabled = enabled; + repaint(); + firePropertyChange(HYPERLINKS_ENABLED_PROPERTY, !enabled, enabled); + } + } + + + public void setLinkGenerator(LinkGenerator generator) { + this.linkGenerator = generator; + } + + + /** + * Sets the mask for the key used to toggle whether we are scanning for + * hyperlinks with mouse hovering. The default value is + * {@code CTRL_DOWN_MASK}.

    + * + * Note that this value will be ignored if + * {@link #setHyperlinksEnabled(boolean)} is called and set to + * {@code false}. If you wish to disable hyperlinks, use that + * method rather than changing this mask value. + * + * @param mask The mask to use. This should be some bitwise combination of + * {@link InputEvent#CTRL_DOWN_MASK}, + * {@link InputEvent#ALT_DOWN_MASK}, + * {@link InputEvent#SHIFT_DOWN_MASK} or + * {@link InputEvent#META_DOWN_MASK}. + * For invalid values, behavior is undefined. + * @see InputEvent + */ + public void setLinkScanningMask(int mask) { + mask &= (InputEvent.CTRL_DOWN_MASK|InputEvent.META_DOWN_MASK| + InputEvent.ALT_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK); + if (mask==0) { + throw new IllegalArgumentException("mask argument should be " + + "some combination of InputEvent.*_DOWN_MASK fields"); + } + linkScanningMask = mask; + } + + + /** + * Toggles whether "mark occurrences" is enabled. This method fires a + * property change event of type {@link #MARK_OCCURRENCES_PROPERTY}. + * + * @param markOccurrences Whether "Mark Occurrences" should be enabled. + * @see #getMarkOccurrences() + * @see #setMarkOccurrencesColor(Color) + */ + public void setMarkOccurrences(boolean markOccurrences) { + if (markOccurrences) { + if (markOccurrencesSupport==null) { + markOccurrencesSupport = new MarkOccurrencesSupport(); + markOccurrencesSupport.install(this); + firePropertyChange(MARK_OCCURRENCES_PROPERTY, false, true); + } + } + else { + if (markOccurrencesSupport!=null) { + markOccurrencesSupport.uninstall(); + markOccurrencesSupport = null; + firePropertyChange(MARK_OCCURRENCES_PROPERTY, true, false); + } + } + } + + + /** + * Sets the "mark occurrences" color. + * + * @param color The new color. This cannot be null. + * @see #getMarkOccurrencesColor() + * @see #setMarkOccurrences(boolean) + */ + public void setMarkOccurrencesColor(Color color) { + markOccurrencesColor = color; + if (markOccurrencesSupport!=null) { + markOccurrencesSupport.setColor(color); + } + } + + + /** + * Sets the delay between when the caret is moved and when "marked + * occurrences" are highlighted. + * + * @param delay The new delay. This must be greater than {@code 0}. + * @see #getMarkOccurrencesDelay() + * @see #getMarkOccurrences() + */ + public void setMarkOccurrencesDelay(int delay) { + if (delay <= 0) { + throw new IllegalArgumentException("Delay must be > 0"); + } + if (delay != this.markOccurrencesDelay) { + this.markOccurrencesDelay = delay; + if (markOccurrencesSupport != null) { + markOccurrencesSupport.setDelay(delay); + } + } + } + + + /** + * Sets the color used as the background for a matched bracket. + * + * @param color The color to use. If this is null, then no + * special background is painted behind a matched bracket. + * @see #getMatchedBracketBGColor + * @see #setMatchedBracketBorderColor + * @see #setPaintMarkOccurrencesBorder(boolean) + */ + public void setMatchedBracketBGColor(Color color) { + matchedBracketBGColor = color; + if (match!=null) { + repaint(); + } + } + + + /** + * Sets the color used as the border for a matched bracket. + * + * @param color The color to use. + * @see #getMatchedBracketBorderColor + * @see #setMatchedBracketBGColor + */ + public void setMatchedBracketBorderColor(Color color) { + matchedBracketBorderColor = color; + if (match!=null) { + repaint(); + } + } + + + /** + * Toggles whether a border should be painted around marked occurrences. + * + * @param paintBorder Whether to paint a border. + * @see #getPaintMarkOccurrencesBorder() + * @see #setMarkOccurrencesColor(Color) + * @see #setMarkOccurrences(boolean) + */ + public void setPaintMarkOccurrencesBorder(boolean paintBorder) { + paintMarkOccurrencesBorder = paintBorder; + if (markOccurrencesSupport!=null) { + markOccurrencesSupport.setPaintBorder(paintBorder); + } + } + + + /** + * Sets whether the bracket at the caret position is painted as a "match" + * when a matched bracket is found. Note that this property does nothing + * if {@link #isBracketMatchingEnabled()} returns false.

    + * + * This method fires a property change event of type + * {@link #PAINT_MATCHED_BRACKET_PAIR_PROPERTY}. + * + * @param paintPair Whether both brackets in a bracket pair should be + * highlighted when bracket matching is enabled. + * @see #getPaintMatchedBracketPair() + * @see #isBracketMatchingEnabled() + * @see #setBracketMatchingEnabled(boolean) + */ + public void setPaintMatchedBracketPair(boolean paintPair) { + if (paintPair!=paintMatchedBracketPair) { + paintMatchedBracketPair = paintPair; + doBracketMatching(); + repaint(); + firePropertyChange(PAINT_MATCHED_BRACKET_PAIR_PROPERTY, + !paintMatchedBracketPair, paintMatchedBracketPair); + } + } + + + /** + * Toggles whether tab lines are painted. This method fires a property + * change event of type {@link #TAB_LINES_PROPERTY}. + * + * @param paint Whether tab lines are painted. + * @see #getPaintTabLines() + * @see #setTabLineColor(Color) + */ + public void setPaintTabLines(boolean paint) { + if (paint!=paintTabLines) { + paintTabLines = paint; + repaint(); + firePropertyChange(TAB_LINES_PROPERTY, !paint, paint); + } + } + + + /** + * Sets the parser delay. This is the delay that must occur between edits + * for any registered {@link Parser}s to run. + * + * @param millis The new parser delay, in milliseconds. This must be + * greater than zero. + * @see #getParserDelay() + */ + public void setParserDelay(int millis) { + if (parserManager==null) { + parserManager = new ParserManager(this); + } + parserManager.setDelay(millis); + } + + + /** + * Applications typically have no need to modify this value.

    + * + * Workaround for JTextComponents allowing the caret to be rendered + * entirely off-screen if the entire "previous" character fit entirely. + * + * @param rhsCorrection The amount of space to add to the x-axis preferred + * span. This should be non-negative. + * @see #getRightHandSideCorrection() + */ + public void setRightHandSideCorrection(int rhsCorrection) { + if (rhsCorrection<0) { + throw new IllegalArgumentException("correction should be > 0"); + } + if (rhsCorrection!=this.rhsCorrection) { + this.rhsCorrection = rhsCorrection; + revalidate(); + repaint(); + } + } + + + /** + * Sets the background color to use for a secondary language. + * + * @param index The language index. Note that these are 1-based, not + * 0-based, and should be in the range + * 1-getSecondaryLanguageCount(), inclusive. + * @param color The new color, or null for none. + * @see #getSecondaryLanguageBackground(int) + * @see #getSecondaryLanguageCount() + */ + public void setSecondaryLanguageBackground(int index, Color color) { + index--; + Color old = secondaryLanguageBackgrounds[index]; + if ((color==null && old!=null) || (color!=null && !color.equals(old))) { + secondaryLanguageBackgrounds[index] = color; + if (getHighlightSecondaryLanguages()) { + repaint(); + } + } + } + + + /** + * Sets whether a small popup window should display the text on the + * line containing a matched bracket whenever a matched bracket is off- + * screen. + * + * @param show Whether to show the popup. + * @see #getShowMatchedBracketPopup() + */ + public void setShowMatchedBracketPopup(boolean show) { + showMatchedBracketPopup = show; + } + + + /** + * Sets what type of syntax highlighting this editor is doing. This method + * fires a property change of type {@link #SYNTAX_STYLE_PROPERTY}. + * + * @param styleKey The syntax editing style to use, for example, + * {@link SyntaxConstants#SYNTAX_STYLE_NONE} or + * {@link SyntaxConstants#SYNTAX_STYLE_JAVA}. + * @see #getSyntaxEditingStyle() + * @see SyntaxConstants + */ + public void setSyntaxEditingStyle(String styleKey) { + if (styleKey==null) { + styleKey = SYNTAX_STYLE_NONE; + } + if (!styleKey.equals(syntaxStyleKey)) { + String oldStyle = syntaxStyleKey; + syntaxStyleKey = styleKey; + ((RSyntaxDocument)getDocument()).setSyntaxStyle(styleKey); + firePropertyChange(SYNTAX_STYLE_PROPERTY, oldStyle, styleKey); + setActiveLineRange(-1, -1); + } + + } + + + /** + * Sets all of the colors used in syntax highlighting to the colors + * specified. This uses a shallow copy of the color scheme so that + * multiple text areas can share the same color scheme and have their + * properties changed simultaneously.

    + * + * This method fires a property change event of type + * {@link #SYNTAX_SCHEME_PROPERTY}. + * + * @param scheme The instance of SyntaxScheme to use. + * @see #getSyntaxScheme() + */ + public void setSyntaxScheme(SyntaxScheme scheme) { + + // NOTE: We don't check whether colorScheme is the same as the + // current scheme because DecreaseFontSizeAction and + // IncreaseFontSizeAction need it this way. + // FIXME: Find a way around this. + + SyntaxScheme old = this.syntaxScheme; + this.syntaxScheme = scheme; + + // Recalculate the line height. We do this here instead of in + // refreshFontMetrics() as this method is called less often and we + // don't need the rendering hints to get the font's height. + calculateLineHeight(); + + if (isDisplayable()) { + refreshFontMetrics(getGraphics2D(getGraphics())); + } + + // Updates the margin line and "matched bracket" highlight + updateMarginLineX(); + lastBracketMatchPos = -1; + doBracketMatching(); + + // Force the current line highlight to be repainted, even though + // the caret's location hasn't changed. + forceCurrentLineHighlightRepaint(); + + // So encompassing JScrollPane will have its scrollbars updated. + revalidate(); + + firePropertyChange(SYNTAX_SCHEME_PROPERTY, old, this.syntaxScheme); + + } + + + /** + * If templates are enabled, all currently-known templates are forgotten + * and all templates are loaded from all files in the specified directory + * ending in "*.xml". If templates aren't enabled, nothing happens. + * + * @param dir The directory containing files ending in extension + * .xml that contain templates to load. + * @return true if the load was successful; + * false if either templates aren't currently + * enabled or the load failed somehow (most likely, the + * directory doesn't exist). + * @see #getTemplatesEnabled + * @see #setTemplatesEnabled + * @see #saveTemplates + */ + public static synchronized boolean setTemplateDirectory(String dir) { + if (getTemplatesEnabled() && dir!=null) { + File directory = new File(dir); + if (directory.isDirectory()) { + return getCodeTemplateManager(). + setTemplateDirectory(directory)>-1; + } + boolean created = directory.mkdir(); + if (created) { + return getCodeTemplateManager(). + setTemplateDirectory(directory)>-1; + } + } + return false; + } + + + /** + * Enables or disables templates.

    + * + * Templates are a set of "shorthand identifiers" that you can configure + * so that you only have to type a short identifier (such as "forb") to + * insert a larger amount of code into the document (such as:

    + * + *

    +	 *   for (<caret>) {
    +	 *
    +	 *   }
    +	 * 
    + * + * Templates are a shared resource among all instances of + * RSyntaxTextArea; that is, templates can only be + * enabled/disabled for all text areas globally, not individually, and + * all text areas have access of the same templates. This should not + * be an issue; rather, it should be beneficial as it promotes + * uniformity among all text areas in an application.

    + * + * For more flexible boilerplate code insertion, consider using the + * TemplateCompletion + * class in the + * AutoComplete + * add-on library. + * + * @param enabled Whether or not templates should be enabled. + * @see #getTemplatesEnabled() + */ + public static synchronized void setTemplatesEnabled(boolean enabled) { + templatesEnabled = enabled; + } + + + /** + * Sets the color use to paint tab lines. This method fires a property + * change event of type {@link #TAB_LINE_COLOR_PROPERTY}. + * + * @param c The color. If this value is null, the default + * (gray) is used. + * @see #getTabLineColor() + * @see #setPaintTabLines(boolean) + * @see #getPaintTabLines() + */ + public void setTabLineColor(Color c) { + + if (c==null) { + c = Color.gray; + } + + if (!c.equals(tabLineColor)) { + Color old = tabLineColor; + tabLineColor = c; + if (getPaintTabLines()) { + repaint(); + } + firePropertyChange(TAB_LINE_COLOR_PROPERTY, old, tabLineColor); + } + + } + + + /** + * Sets whether "focusable" tool tips are used instead of standard ones. + * Focusable tool tips are tool tips that the user can click on, + * resize, copy from, and clink links in. This method fires a property + * change event of type {@link #FOCUSABLE_TIPS_PROPERTY}. + * + * @param use Whether to use focusable tool tips. + * @see #getUseFocusableTips() + * @see FocusableTip + */ + public void setUseFocusableTips(boolean use) { + if (use!=useFocusableTips) { + useFocusableTips = use; + firePropertyChange(FOCUSABLE_TIPS_PROPERTY, !use, use); + } + } + + + /** + * Sets whether selected text should use the "selected text color" property + * (set via {@link #setSelectedTextColor(Color)}). This is the typical + * behavior of text components. By default, RSyntaxTextArea does not do + * this, so that token styles are visible even in selected regions of text. + * This method fires a property change event of type + * {@link #USE_SELECTED_TEXT_COLOR_PROPERTY}. + * + * @param use Whether to use the "selected text" color when painting text + * in selected regions. + * @see #getUseSelectedTextColor() + */ + public void setUseSelectedTextColor(boolean use) { + if (use!=useSelectedTextColor) { + useSelectedTextColor = use; + firePropertyChange(USE_SELECTED_TEXT_COLOR_PROPERTY, !use, use); + } + } + + + /** + * Sets whether whitespace is visible. This method fires a property change + * of type {@link #VISIBLE_WHITESPACE_PROPERTY}. + * + * @param visible Whether whitespace should be visible. + * @see #isWhitespaceVisible() + */ + public void setWhitespaceVisible(boolean visible) { + if (whitespaceVisible!=visible) { + this.whitespaceVisible = visible; + tokenPainter = visible ? new VisibleWhitespaceTokenPainter() : + new DefaultTokenPainter(); + repaint(); + firePropertyChange(VISIBLE_WHITESPACE_PROPERTY, !visible, visible); + } + } + + + /** + * Resets the editor state after the user clicks on a hyperlink or releases + * the hyperlink modifier. + */ + private void stopScanningForLinks() { + if (isScanningForLinks) { + Cursor c = getCursor(); + isScanningForLinks = false; + linkGeneratorResult = null; + hoveredOverLinkOffset = -1; + if (c!=null && c.getType()==Cursor.HAND_CURSOR) { + setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); + repaint(); // TODO: Repaint just the affected line. + } + } + } + + + /** + * {@inheritDoc} + */ + @Override + public void undoLastAction() { + super.undoLastAction(); + // Occasionally marked occurrences' Positions are in invalid states + // due to how javax.swing.text.AbstractDocument tracks the start and + // end offsets. This is usually not needed, but can be when the last + // token in the Document is a marked occurrence, and an undo or redo + // occurs which clears most of the document text. In that case it is + // possible for the end Position to be reset to something small, but + // the start offset to be its prior valid (start > end). + ((RSyntaxTextAreaHighlighter)getHighlighter()). + clearMarkOccurrencesHighlights(); + } + + + /** + * Returns the token at the specified position in the view. + * + * @param p The position in the view. + * @return The token, or null if no token is at that + * position. + * @see #modelToToken(int) + */ + /* + * TODO: This is a little inefficient. This should convert view + * coordinates to the underlying token (if any). The way things currently + * are, we're calling getTokenListForLine() twice (once in viewToModel() + * and once here). + */ + public Token viewToToken(Point p) { + return modelToToken(viewToModel(p)); + } + + /** + * Renders the text on the line containing the "matched bracket" after a + * delay. + */ + private final class MatchedBracketPopupTimer extends Timer + implements ActionListener, CaretListener { + + private MatchedBracketPopup popup; + private int origDot; + private int matchedBracketOffs; + + private MatchedBracketPopupTimer() { + super(350, null); + addActionListener(this); + setRepeats(false); + } + + @Override + public void actionPerformed(ActionEvent e) { + + if (popup != null) { + popup.dispose(); + } + + Window window = SwingUtilities.getWindowAncestor(RSyntaxTextArea.this); + popup = new MatchedBracketPopup(window, RSyntaxTextArea.this, matchedBracketOffs); + popup.pack(); + popup.setVisible(true); + + } + + @Override + public void caretUpdate(CaretEvent e) { + int dot = e.getDot(); + if (dot != origDot) { + stop(); + removeCaretListener(this); + if (popup != null) { + popup.dispose(); + } + } + } + + /** + * Restarts this timer, and stores a new offset to paint. + * + * @param matchedBracketOffs The offset of the new matched bracket. + */ + public void restart(int matchedBracketOffs) { + this.origDot = getCaretPosition(); + this.matchedBracketOffs = matchedBracketOffs; + this.restart(); + } + + @Override + public void start() { + super.start(); + addCaretListener(this); + } + + } + + + /** + * A timer that animates the "bracket matching" animation. + */ + private class BracketMatchingTimer extends Timer implements ActionListener { + + private int pulseCount; + + BracketMatchingTimer() { + super(20, null); + addActionListener(this); + setCoalesce(false); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isBracketMatchingEnabled()) { + if (match!=null) { + updateAndInvalidate(match); + } + if (dotRect!=null && getPaintMatchedBracketPair()) { + updateAndInvalidate(dotRect); + } + if (++pulseCount==8) { + pulseCount = 0; + stop(); + } + } + } + + private void init(Rectangle r) { + r.x += 3; + r.y += 3; + r.width -= 6; + r.height -= 6; // So animation can "grow" match + } + + @Override + public void start() { + init(match); + if (dotRect!=null && getPaintMatchedBracketPair()) { + init(dotRect); + } + pulseCount = 0; + super.start(); + } + + private void updateAndInvalidate(Rectangle r) { + if (pulseCount<5) { + r.x--; + r.y--; + r.width += 2; + r.height += 2; + repaint(r.x,r.y, r.width,r.height); + } + else if (pulseCount<7) { + r.x++; + r.y++; + r.width -= 2; + r.height -= 2; + repaint(r.x-2,r.y-2, r.width+5,r.height+5); + } + } + + } + + + /** + * Handles hyperlinks. + */ + private class RSyntaxTextAreaMutableCaretEvent + extends RTextAreaMutableCaretEvent { + + private Insets insets; + + protected RSyntaxTextAreaMutableCaretEvent(RTextArea textArea) { + super(textArea); + insets = new Insets(0, 0, 0, 0); + } + + private HyperlinkEvent createHyperlinkEvent() { + HyperlinkEvent he = null; + if (linkGeneratorResult!=null) { + he = linkGeneratorResult.execute(); + linkGeneratorResult = null; + } + else { + Token t = modelToToken(hoveredOverLinkOffset); + URL url = null; + String desc = null; + try { + String temp = t.getLexeme(); + // URI's need "http://" prefix for web URL's to work. + if (temp.startsWith("www.")) { + temp = "http://" + temp; + } + url = new URL(temp); + } catch (MalformedURLException mue) { + desc = mue.getMessage(); + } + he = new HyperlinkEvent(RSyntaxTextArea.this, + HyperlinkEvent.EventType.ACTIVATED, + url, desc); + } + return he; + } + + private boolean equal(LinkGeneratorResult e1, + LinkGeneratorResult e2) { + return e1.getSourceOffset()==e2.getSourceOffset(); + } + + @Override + public void mouseClicked(MouseEvent e) { + if (getHyperlinksEnabled() && isScanningForLinks && + hoveredOverLinkOffset>-1) { + HyperlinkEvent he = createHyperlinkEvent(); + if (he!=null) { + fireHyperlinkUpdate(he); + } + stopScanningForLinks(); + } + } + + @Override + public void mouseMoved(MouseEvent e) { + + super.mouseMoved(e); + + if (!getHyperlinksEnabled()) { + return; + } + + // If our link scanning mask is pressed... + if ((e.getModifiersEx()&linkScanningMask)==linkScanningMask) { + + // GitHub issue #25 - links identified at "edges" of editor + // should not be activated if mouse is in margin insets. + insets = getInsets(insets); + if (insets!=null) { + int x = e.getX(); + int y = e.getY(); + if (x<=insets.left || yRSyntaxTextArea. Currently, the new key bindings include: + * The default input map for an RSyntaxTextArea. + * Currently, the new key bindings include: *

      - *
    • Shift+Tab indents the current line or currently selected lines to the left. + *
    • Shift+Tab indents the current line or currently selected lines + * to the left. *
    - * + * * @author Robert Futrell * @version 1.0 */ +@SuppressWarnings({ "checkstyle:linelength" }) public class RSyntaxTextAreaDefaultInputMap extends RTADefaultInputMap { - /** - * Constructs the default input map for an RSyntaxTextArea. - */ - public RSyntaxTextAreaDefaultInputMap() { + /** + * Constructs the default input map for an RSyntaxTextArea. + */ + public RSyntaxTextAreaDefaultInputMap() { + + int defaultMod = getDefaultModifier(); + int shift = InputEvent.SHIFT_DOWN_MASK; + int defaultShift = defaultMod|shift; + + put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, shift), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction); + put(KeyStroke.getKeyStroke('}'), RSyntaxTextAreaEditorKit.rstaCloseCurlyBraceAction); + + put(KeyStroke.getKeyStroke('/'), RSyntaxTextAreaEditorKit.rstaCloseMarkupTagAction); + int os = RSyntaxUtilities.getOS(); + if (os==RSyntaxUtilities.OS_WINDOWS || os==RSyntaxUtilities.OS_MAC_OSX) { + // *nix causes trouble with CloseMarkupTagAction and ToggleCommentAction. + // It triggers both KEY_PRESSED ctrl+'/' and KEY_TYPED '/' events when the + // user presses ctrl+'/', but Windows and OS X do not. If we try to "move" + // the KEY_TYPED event for '/' to KEY_PRESSED, it'll work for Linux boxes + // with QWERTY keyboard layouts, but non-QUERTY users won't be able to type + // a '/' character at all then (!). Rather than try to hack together a + // solution by trying to detect the IM locale and do different things for + // different OSes & keyboard layouts, we do the simplest thing and + // (unfortunately) don't have a ToggleCommentAction for *nix out-of-the-box. + // Applications can add one easily enough if they want one. + put(KeyStroke.getKeyStroke(KeyEvent.VK_SLASH, defaultMod), RSyntaxTextAreaEditorKit.rstaToggleCommentAction); + } - int defaultMod = getDefaultModifier(); - // int ctrl = InputEvent.CTRL_MASK; - int shift = InputEvent.SHIFT_MASK; - // int alt = InputEvent.ALT_MASK; + put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultMod), RSyntaxTextAreaEditorKit.rstaGoToMatchingBracketAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseFoldAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_ADD, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandFoldAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_DIVIDE, defaultMod), RSyntaxTextAreaEditorKit.rstaCollapseAllFoldsAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_MULTIPLY, defaultMod), RSyntaxTextAreaEditorKit.rstaExpandAllFoldsAction); - put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, shift), RSyntaxTextAreaEditorKit.rstaDecreaseIndentAction); - put(KeyStroke.getKeyStroke('}'), RSyntaxTextAreaEditorKit.rstaCloseCurlyBraceAction); - put(KeyStroke.getKeyStroke('/'), RSyntaxTextAreaEditorKit.rstaCloseMarkupTagAction); - put(KeyStroke.getKeyStroke(KeyEvent.VK_SLASH, defaultMod), RSyntaxTextAreaEditorKit.rstaToggleCommentAction); - put(KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, defaultMod), - RSyntaxTextAreaEditorKit.rstaGoToMatchingBracketAction); + // NOTE: no modifiers => mapped to keyTyped. If we had "0" as a second + // second parameter, we'd get the template action (keyPressed) AND the + // default space action (keyTyped). + //put(KeyStroke.getKeyStroke(' '), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); + put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, defaultShift), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); - // FIXME: The keystroke associated with this action should be dynamic and - // configurable and synchronized with the "trigger" defined in RSyntaxTextArea's - // CodeTemplateManager. - // NOTE: no modifiers => mapped to keyTyped. If we had "0" as a second - // second parameter, we'd get the template action (keyPressed) AND the - // default space action (keyTyped). - // put(KeyStroke.getKeyStroke(' '), RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); - put(CodeTemplateManager.TEMPLATE_KEYSTROKE, RSyntaxTextAreaEditorKit.rstaPossiblyInsertTemplateAction); + } - } -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java old mode 100644 new mode 100755 index 79f53b26c..d690369ae --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaEditorKit.java @@ -2,1448 +2,2118 @@ * 08/29/2004 * * RSyntaxTextAreaEditorKit.java - The editor kit used by RSyntaxTextArea. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.awt.*; -import java.awt.event.*; +import java.awt.Component; +import java.awt.Font; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.text.CharacterIterator; +import java.util.ResourceBundle; import java.util.Stack; -import java.util.stream.IntStream; -import javax.swing.*; -import javax.swing.text.*; +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JScrollPane; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.Caret; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.Segment; +import javax.swing.text.TextAction; + +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldCollapser; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rsyntaxtextarea.templates.CodeTemplate; -import org.fife.ui.rtextarea.RecordableTextAction; +import org.fife.ui.rtextarea.IconRowHeader; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextAreaEditorKit; +import org.fife.ui.rtextarea.RecordableTextAction; + /** - * An extension of RTextAreaEditorKit that adds functionality for programming-specific stuff. There are - * currently subclasses to handle: - * + * An extension of RTextAreaEditorKit that adds functionality for + * programming-specific stuff. There are currently subclasses to handle: + * *
      - *
    • Aligning "closing" curly braces with their matches, if the current programming language uses curly braces to - * identify code blocks.
    • - *
    • Copying the current selection as RTF.
    • - *
    • Block indentation (increasing the indent of one or multiple lines)
    • - *
    • Block un-indentation (decreasing the indent of one or multiple lines)
    • - *
    • Inserting a "code template" when a configurable key (e.g. a space) is pressed
    • - *
    • Decreasing the point size of all fonts in the text area
    • - *
    • Increasing the point size of all fonts in the text area
    • - *
    • Moving the caret to the "matching bracket" of the one at the current caret position
    • - *
    • Toggling whether the currently selected lines are commented out.
    • - *
    • Better selection of "words" on mouse double-clicks for programming languages.
    • - *
    • Better keyboard navigation via Ctrl+arrow keys for programming languages.
    • + *
    • Toggling code folds.
    • + *
    • Aligning "closing" curly braces with their matches, if the current + * programming language uses curly braces to identify code blocks.
    • + *
    • Copying the current selection as RTF.
    • + *
    • Block indentation (increasing the indent of one or multiple lines)
    • + *
    • Block un-indentation (decreasing the indent of one or multiple lines) + *
    • + *
    • Inserting a "code template" when a configurable key (e.g. a space) is + * pressed
    • + *
    • Decreasing the point size of all fonts in the text area
    • + *
    • Increasing the point size of all fonts in the text area
    • + *
    • Moving the caret to the "matching bracket" of the one at the current + * caret position
    • + *
    • Toggling whether the currently selected lines are commented out.
    • + *
    • Better selection of "words" on mouse double-clicks for programming + * languages.
    • + *
    • Better keyboard navigation via Ctrl+arrow keys for programming + * languages.
    • *
    - * + * * @author Robert Futrell * @version 0.5 */ +@SuppressWarnings({ "checkstyle:constantname" }) public class RSyntaxTextAreaEditorKit extends RTextAreaEditorKit { - private static final long serialVersionUID = 1L; - - public static final String rstaCloseCurlyBraceAction = "RSTA.CloseCurlyBraceAction"; - public static final String rstaCloseMarkupTagAction = "RSTA.CloseMarkupTagAction"; - public static final String rstaCopyAsRtfAction = "RSTA.CopyAsRtfAction"; - public static final String rstaDecreaseIndentAction = "RSTA.DecreaseIndentAction"; - public static final String rstaGoToMatchingBracketAction = "RSTA.GoToMatchingBracketAction"; - public static final String rstaPossiblyInsertTemplateAction = "RSTA.TemplateAction"; - public static final String rstaToggleCommentAction = "RSTA.ToggleCommentAction"; - - /** - * The actions that RSyntaxTextAreaEditorKit adds to those of RTextAreaEditorKit. - */ - private static final Action[] defaultActions = { - new CloseCurlyBraceAction(), - new CloseMarkupTagAction(), - new BeginWordAction(beginWordAction, false), - new BeginWordAction(selectionBeginWordAction, true), - new CopyAsRtfAction(), - // new DecreaseFontSizeAction(), - new DecreaseIndentAction(), - new EndWordAction(endWordAction, false), - new EndWordAction(endWordAction, true), - new GoToMatchingBracketAction(), - new InsertBreakAction(), - // new IncreaseFontSizeAction(), - new InsertTabAction(), - new NextWordAction(nextWordAction, false), - new NextWordAction(selectionNextWordAction, true), - new PossiblyInsertTemplateAction(), - new PreviousWordAction(previousWordAction, false), - new PreviousWordAction(selectionPreviousWordAction, true), - new SelectWordAction(), - new ToggleCommentAction(), - }; - - /** - * Constructor. - */ - public RSyntaxTextAreaEditorKit() { - } - - /** - * Returns the default document used by RSyntaxTextAreas. - * - * @return The document. - */ - public Document createDefaultDocument() { - return new RSyntaxDocument(SyntaxConstants.SYNTAX_STYLE_NONE); - } - - /** - * Fetches the set of commands that can be used on a text component that is using a model and view produced by this - * kit. - * - * @return the command list - */ - public Action[] getActions() { - return TextAction.augmentList(super.getActions(), - RSyntaxTextAreaEditorKit.defaultActions); - } - - /** - * Positions the caret at the beginning of the word. This class is here to better handle finding the - * "beginning of the word" for programming languages. - */ - protected static class BeginWordAction - extends RTextAreaEditorKit.BeginWordAction { - - private Segment seg; - - protected BeginWordAction(String name, boolean select) { - super(name, select); - seg = new Segment(); - } - - protected int getWordStart(RTextArea textArea, int offs) - throws BadLocationException { - - if (offs == 0) { - return offs; - } - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - int line = textArea.getLineOfOffset(offs); - int start = textArea.getLineStartOffset(line); - if (offs == start) { - return start; - } - int end = textArea.getLineEndOffset(line); - if (line != textArea.getLineCount() - 1) { - end--; - } - doc.getText(start, end - start, seg); - - // Determine the "type" of char at offs - lower case, upper case, - // whitespace or other. We take special care here as we're starting - // in the middle of the Segment to check whether we're already at - // the "beginning" of a word. - int firstIndex = seg.getBeginIndex() + (offs - start) - 1; - seg.setIndex(firstIndex); - char ch = seg.current(); - char nextCh = offs == end ? 0 : seg.array[seg.getIndex() + 1]; - - // The "word" is a group of letters and/or digits - if (Character.isLetterOrDigit(ch)) { - if (offs != end && !Character.isLetterOrDigit(nextCh)) { - return offs; - } - do { - ch = seg.previous(); - } while (Character.isLetterOrDigit(ch)); - } - - // The "word" is whitespace - else if (Character.isWhitespace(ch)) { - if (offs != end && !Character.isWhitespace(nextCh)) { - return offs; - } - do { - ch = seg.previous(); - } while (Character.isWhitespace(ch)); - } - - // Otherwise, the "word" a single "something else" char (operator, - // etc.). - - offs -= firstIndex - seg.getIndex() + 1;// seg.getEndIndex() - seg.getIndex(); - if (ch != Segment.DONE && nextCh != '\n') { - offs++; - } - - return offs; - - } - - } - - /** - * Action that (optionally) aligns a closing curly brace with the line containing its matching opening curly brace. - */ - public static class CloseCurlyBraceAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - private Segment seg; - - public CloseCurlyBraceAction() { - super(rstaCloseCurlyBraceAction); - seg = new Segment(); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - RSyntaxDocument doc = (RSyntaxDocument) rsta.getDocument(); - boolean alignCurlyBraces = rsta.isAutoIndentEnabled() && - doc.getCurlyBracesDenoteCodeBlocks(); - - if (alignCurlyBraces) { - textArea.beginAtomicEdit(); - } - - try { - - textArea.replaceSelection("}"); - - // If the user wants to align curly braces... - if (alignCurlyBraces) { - - Element root = doc.getDefaultRootElement(); - int dot = rsta.getCaretPosition() - 1; // Start before '{' - int line = root.getElementIndex(dot); - Element elem = root.getElement(line); - int start = elem.getStartOffset(); - - // Get the current line's text up to the '}' entered. - try { - doc.getText(start, dot - start, seg); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - return; - } - - // Only attempt to align if there's only whitespace up to - // the '}' entered. - for (int i = 0; i < seg.count; i++) { - char ch = seg.array[seg.offset + i]; - if (!Character.isWhitespace(ch)) { - return; - } - } - - // Locate the matching '{' bracket, and replace the leading - // whitespace for the '}' to match that of the '{' char's line. - int match = RSyntaxUtilities.getMatchingBracketPosition(rsta); - if (match > -1) { - elem = root.getElement(root.getElementIndex(match)); - int start2 = elem.getStartOffset(); - int end = elem.getEndOffset() - 1; - String text = null; - try { - text = doc.getText(start2, end - start2); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - return; - } - String ws = RSyntaxUtilities.getLeadingWhitespace(text); - rsta.replaceRange(ws, start, dot); - } - - } - - } finally { - if (alignCurlyBraces) { - textArea.endAtomicEdit(); - } - } - - } - - public final String getMacroID() { - return rstaCloseCurlyBraceAction; - } - - } - - /** - * (Optionally) completes a closing markup tag. - */ - public static class CloseMarkupTagAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - public CloseMarkupTagAction() { - super(rstaCloseMarkupTagAction); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - RSyntaxDocument doc = (RSyntaxDocument) rsta.getDocument(); - - Caret c = rsta.getCaret(); - boolean selection = c.getDot() != c.getMark(); - rsta.replaceSelection("/"); - - // Don't automatically complete a tag if there was a selection - int dot = c.getDot(); - - if (doc.getLanguageIsMarkup() && - doc.getCompleteMarkupCloseTags() && - !selection && rsta.getCloseMarkupTags() && dot > 1) { - - try { - - // Check actual char before token type, since it's quicker - char ch = doc.charAt(dot - 2); - if (ch == '<' || ch == '[') { - - Token t = doc.getTokenListForLine( - rsta.getCaretLineNumber()); - t = RSyntaxUtilities.getTokenAtOffset(t, dot - 1); - if (t != null && t.type == Token.MARKUP_TAG_DELIMITER) { - // System.out.println("Huzzah - closing tag!"); - String tagName = discoverTagName(doc, dot); - if (tagName != null) { - rsta.replaceSelection(tagName + (char) (ch + 2)); - } - } - - } - - } catch (BadLocationException ble) { // Never happens - UIManager.getLookAndFeel().provideErrorFeedback(rsta); - ble.printStackTrace(); - } - - } - - } - - /** - * Discovers the name of the tag being closed. Assumes standard SGML-style markup tags. - * - * @param doc - * The document to parse. - * @param dot - * The location of the caret. This should be right after the start of a closing tag token (e.g. " - * </" or "[" in the case of BBCode). - * @return The name of the tag to close, or null if it could not be determined. - */ - private String discoverTagName(RSyntaxDocument doc, int dot) { - - Stack stack = new Stack(); - - Element root = doc.getDefaultRootElement(); - int curLine = root.getElementIndex(dot); - - for (int i = 0; i <= curLine; i++) { - - Token t = doc.getTokenListForLine(i); - while (t != null && t.isPaintable()) { - - if (t.type == Token.MARKUP_TAG_DELIMITER) { - if (t.isSingleChar('<') || t.isSingleChar('[')) { - t = t.getNextToken(); - while (t != null && t.isPaintable()) { - if (t.type == Token.MARKUP_TAG_NAME || - // Being lenient here and also checking - // for attributes, in case they - // (incorrectly) have whitespace between - // the '<' char and the element name. - t.type == Token.MARKUP_TAG_ATTRIBUTE) { - stack.push(t.getLexeme()); - break; - } - t = t.getNextToken(); - } - } - else if (t.textCount == 2 && t.text[t.textOffset] == '/' && - (t.text[t.textOffset + 1] == '>' || - t.text[t.textOffset + 1] == ']')) { - if (!stack.isEmpty()) { // Always true for valid XML - stack.pop(); - } - } - else if (t.textCount == 2 && - (t.text[t.textOffset] == '<' || t.text[t.textOffset] == '[') && - t.text[t.textOffset + 1] == '/') { - String tagName = null; - if (!stack.isEmpty()) { // Always true for valid XML - tagName = (String) stack.pop(); - } - if (t.offset + t.textCount >= dot) { - return tagName; - } - } - } - - t = t.getNextToken(); - - } - - } - - return null; // Should never happen - - } - - public String getMacroID() { - return getName(); - } - - } - - /** - * Action for copying text as RTF. - */ - public static class CopyAsRtfAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - public CopyAsRtfAction() { - super(rstaCopyAsRtfAction); - } - - public CopyAsRtfAction(String name, Icon icon, String desc, - Integer mnemonic, KeyStroke accelerator) { - super(name, icon, desc, mnemonic, accelerator); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - ((RSyntaxTextArea) textArea).copyAsRtf(); - textArea.requestFocusInWindow(); - } - - public final String getMacroID() { - return getName(); - } - - } - - /** - * Action for decreasing the font size of all fonts in the text area. - */ - public static class DecreaseFontSizeAction - extends RTextAreaEditorKit.DecreaseFontSizeAction { - - private static final long serialVersionUID = 1L; - - public DecreaseFontSizeAction() { - super(); - } - - public DecreaseFontSizeAction(String name, Icon icon, String desc, - Integer mnemonic, KeyStroke accelerator) { - super(name, icon, desc, mnemonic, accelerator); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - SyntaxScheme scheme = rsta.getSyntaxScheme(); - - // All we need to do is update all of the fonts in syntax - // schemes, then call setSyntaxHighlightingColorScheme with the - // same scheme already being used. This relies on the fact that - // that method does not check whether the new scheme is different - // from the old scheme before updating. - - boolean changed = false; - int count = scheme.styles.length; - for (int i = 0; i < count; i++) { - Style ss = scheme.styles[i]; - if (ss != null) { - Font font = ss.font; - if (font != null) { - float oldSize = font.getSize2D(); - float newSize = oldSize - decreaseAmount; - if (newSize >= MINIMUM_SIZE) { - // Shrink by decreaseAmount. - ss.font = font.deriveFont(newSize); - changed = true; - } - else if (oldSize > MINIMUM_SIZE) { - // Can't shrink by full decreaseAmount, but - // can shrink a little bit. - ss.font = font.deriveFont(MINIMUM_SIZE); - changed = true; - } - } - } - } - - // Do the text area's font also. - Font font = rsta.getFont(); - float oldSize = font.getSize2D(); - float newSize = oldSize - decreaseAmount; - if (newSize >= MINIMUM_SIZE) { - // Shrink by decreaseAmount. - rsta.setFont(font.deriveFont(newSize)); - changed = true; - } - else if (oldSize > MINIMUM_SIZE) { - // Can't shrink by full decreaseAmount, but - // can shrink a little bit. - rsta.setFont(font.deriveFont(MINIMUM_SIZE)); - changed = true; - } - - // If we updated at least one font, update the screen. If - // all of the fonts were already the minimum size, beep. - if (changed) { - rsta.setSyntaxScheme(scheme); - // NOTE: This is a hack to get an encompassing - // RTextScrollPane to repaint its line numbers to account - // for a change in line height due to a font change. I'm - // not sure why we need to do this here but not when we - // change the syntax highlighting color scheme via the - // Options dialog... setSyntaxHighlightingColorScheme() - // calls revalidate() which won't repaint the scroll pane - // if scrollbars don't change, which is why we need this. - Component parent = rsta.getParent(); - if (parent instanceof javax.swing.JViewport) { - parent = parent.getParent(); - if (parent instanceof JScrollPane) { - parent.repaint(); - } - } - } - else - UIManager.getLookAndFeel().provideErrorFeedback(rsta); - - } - - } - - /** - * Action for when un-indenting lines (either the current line if there is selection, or all selected lines if there - * is one). - */ - public static class DecreaseIndentAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - private Segment s; - - public DecreaseIndentAction() { - this(rstaDecreaseIndentAction); - } - - public DecreaseIndentAction(String name) { - super(name); - s = new Segment(); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - Document document = textArea.getDocument(); - Element map = document.getDefaultRootElement(); - Caret c = textArea.getCaret(); - int dot = c.getDot(); - int mark = c.getMark(); - int line1 = map.getElementIndex(dot); - int tabSize = textArea.getTabSize(); - - // If there is a selection, indent all lines in the selection. - // Otherwise, indent the line the caret is on. - if (dot != mark) { - // Note that we cheaply reuse variables here, so don't - // take their names to mean what they are. - int line2 = map.getElementIndex(mark); - dot = Math.min(line1, line2); - mark = Math.max(line1, line2); - Element elem; - try { - for (line1 = dot; line1 < mark; line1++) { - elem = map.getElement(line1); - handleDecreaseIndent(elem, document, tabSize); - } - // Don't do the last line if the caret is at its - // beginning. We must call getDot() again and not just - // use 'dot' as the caret's position may have changed - // due to the insertion of the tabs above. - elem = map.getElement(mark); - int start = elem.getStartOffset(); - if (Math.max(c.getDot(), c.getMark()) != start) { - handleDecreaseIndent(elem, document, tabSize); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); - UIManager.getLookAndFeel(). - provideErrorFeedback(textArea); - } - } - else { - Element elem = map.getElement(line1); - try { - handleDecreaseIndent(elem, document, tabSize); - } catch (BadLocationException ble) { - ble.printStackTrace(); - UIManager.getLookAndFeel(). - provideErrorFeedback(textArea); - } - } - - } - - public final String getMacroID() { - return rstaDecreaseIndentAction; - } - - /** - * Actually does the "de-indentation." This method finds where the given element's leading whitespace ends, - * then, if there is indeed leading whitespace, removes either the last char in it (if it is a tab), or removes - * up to the number of spaces equal to a tab in the specified document (i.e., if the tab size was 5 and there - * were 3 spaces at the end of the leading whitespace, the three will be removed; if there were 8 spaces, only - * the first 5 would be removed). - * - * @param elem - * The element to "de-indent." - * @param doc - * The document containing the specified element. - * @param tabSize - * The size of a tab, in spaces. - */ - private final void handleDecreaseIndent(Element elem, Document doc, - int tabSize) - throws BadLocationException { - int start = elem.getStartOffset(); - int end = elem.getEndOffset() - 1; // Why always true?? - doc.getText(start, end - start, s); - int i = s.offset; - end = i + s.count; - if (end > i) { - // If the first character is a tab, remove it. - if (s.array[i] == '\t') { - doc.remove(start, 1); - } - // Otherwise, see if the first character is a space. If it - // is, remove all contiguous whitespaces at the beginning of - // this line, up to the tab size. - else if (s.array[i] == ' ') { - i++; - int toRemove = 1; - while (i < end && s.array[i] == ' ' && toRemove < tabSize) { - i++; - toRemove++; - } - doc.remove(start, toRemove); - } - } - } - - } - - /** - * Positions the caret at the end of the word. This class is here to better handle finding the "end of the word" in - * programming languages. - */ - protected static class EndWordAction - extends RTextAreaEditorKit.EndWordAction { - - private Segment seg; - - protected EndWordAction(String name, boolean select) { - super(name, select); - seg = new Segment(); - } - - protected int getWordEnd(RTextArea textArea, int offs) - throws BadLocationException { - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - if (offs == doc.getLength()) { - return offs; - } - - int line = textArea.getLineOfOffset(offs); - int end = textArea.getLineEndOffset(line); - if (line != textArea.getLineCount() - 1) { - end--; // Hide newline - } - if (offs == end) { - return end; - } - doc.getText(offs, end - offs, seg); - - // Determine the "type" of char at offs - letter/digit, - // whitespace or other - char ch = seg.first(); - - // The "word" is a group of letters and/or digits - if (Character.isLetterOrDigit(ch)) { - do { - ch = seg.next(); - } while (Character.isLetterOrDigit(ch)); - } - - // The "word" is whitespace. - else if (Character.isWhitespace(ch)) { - - do { - ch = seg.next(); - } while (Character.isWhitespace(ch)); - } - - // Otherwise, the "word" is a single character of some other type - // (operator, etc.). - - offs += seg.getIndex() - seg.getBeginIndex(); - return offs; - - } - - } - - /** - * Action for moving the caret to the "matching bracket" of the bracket at the caret position (either before or - * after). - */ - public static class GoToMatchingBracketAction - extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - public GoToMatchingBracketAction() { - super(rstaGoToMatchingBracketAction); - } - - public GoToMatchingBracketAction(String name, Icon icon, String desc, - Integer mnemonic, KeyStroke accelerator) { - super(name, icon, desc, mnemonic, accelerator); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - int pos = RSyntaxUtilities.getMatchingBracketPosition(rsta); - if (pos > -1) { - // Go to the position AFTER the bracket so the previous - // bracket (which we were just on) is highlighted. - rsta.setCaretPosition(pos + 1); - } - else { - UIManager.getLookAndFeel().provideErrorFeedback(rsta); - } - } - - public final String getMacroID() { - return rstaGoToMatchingBracketAction; - } - - } - - /** - * Action for increasing the font size of all fonts in the text area. - */ - public static class IncreaseFontSizeAction - extends RTextAreaEditorKit.IncreaseFontSizeAction { - - private static final long serialVersionUID = 1L; - - public IncreaseFontSizeAction() { - super(); - } - - public IncreaseFontSizeAction(String name, Icon icon, String desc, - Integer mnemonic, KeyStroke accelerator) { - super(name, icon, desc, mnemonic, accelerator); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - SyntaxScheme scheme = rsta.getSyntaxScheme(); - - // All we need to do is update all of the fonts in syntax - // schemes, then call setSyntaxHighlightingColorScheme with the - // same scheme already being used. This relies on the fact that - // that method does not check whether the new scheme is different - // from the old scheme before updating. - - boolean changed = false; - int count = scheme.styles.length; - for (int i = 0; i < count; i++) { - Style ss = scheme.styles[i]; - if (ss != null) { - Font font = ss.font; - if (font != null) { - float oldSize = font.getSize2D(); - float newSize = oldSize + increaseAmount; - if (newSize <= MAXIMUM_SIZE) { - // Grow by increaseAmount. - ss.font = font.deriveFont(newSize); - changed = true; - } - else if (oldSize < MAXIMUM_SIZE) { - // Can't grow by full increaseAmount, but - // can grow a little bit. - ss.font = font.deriveFont(MAXIMUM_SIZE); - changed = true; - } - } - } - } - - // Do the text area's font also. - Font font = rsta.getFont(); - float oldSize = font.getSize2D(); - float newSize = oldSize + increaseAmount; - if (newSize <= MAXIMUM_SIZE) { - // Grow by increaseAmount. - rsta.setFont(font.deriveFont(newSize)); - changed = true; - } - else if (oldSize < MAXIMUM_SIZE) { - // Can't grow by full increaseAmount, but - // can grow a little bit. - rsta.setFont(font.deriveFont(MAXIMUM_SIZE)); - changed = true; - } - - // If we updated at least one font, update the screen. If - // all of the fonts were already the minimum size, beep. - if (changed) { - rsta.setSyntaxScheme(scheme); - // NOTE: This is a hack to get an encompassing - // RTextScrollPane to repaint its line numbers to account - // for a change in line height due to a font change. I'm - // not sure why we need to do this here but not when we - // change the syntax highlighting color scheme via the - // Options dialog... setSyntaxHighlightingColorScheme() - // calls revalidate() which won't repaint the scroll pane - // if scrollbars don't change, which is why we need this. - Component parent = rsta.getParent(); - if (parent instanceof javax.swing.JViewport) { - parent = parent.getParent(); - if (parent instanceof JScrollPane) { - parent.repaint(); - } - } - } - else - UIManager.getLookAndFeel().provideErrorFeedback(rsta); - - } - - } - - /** - * Action for when the user presses the Enter key. This is here so we can be smart and "auto-indent" for programming - * languages. - */ - public static class InsertBreakAction - extends RTextAreaEditorKit.InsertBreakAction { - - private static final long serialVersionUID = 1L; - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - RSyntaxTextArea sta = (RSyntaxTextArea) textArea; - boolean noSelection = sta.getSelectionStart() == sta.getSelectionEnd(); - - // First, see if this language wants to handle inserting newlines - // itself. - boolean handled = false; - if (noSelection) { - RSyntaxDocument doc = (RSyntaxDocument) sta.getDocument(); - handled = doc.insertBreakSpecialHandling(e); - } - - // If not... - if (!handled) { - handleInsertBreak(sta, noSelection); - } - - } - - /** - * @return The first location in the string past pos that is NOT a whitespace char, or - * -1 if only whitespace chars follow pos (or it is the end position in the - * string). - */ - private static final int atEndOfLine(int pos, String s, int sLen) { - return IntStream.range(pos, sLen).filter(i -> !RSyntaxUtilities.isWhitespace(s.charAt(i))).findFirst().orElse(-1); - } - - private static final int getOpenBraceCount(RSyntaxDocument doc) { - int openCount = 0; - Element root = doc.getDefaultRootElement(); - int lineCount = root.getElementCount(); - for (int i = 0; i < lineCount; i++) { - Token t = doc.getTokenListForLine(i); - while (t != null && t.isPaintable()) { - if (t.type == Token.SEPARATOR && t.textCount == 1) { - char ch = t.text[t.textOffset]; - if (ch == '{') { - openCount++; - } - else if (ch == '}') { - openCount--; - } - } - t = t.getNextToken(); - } - } - return openCount; - } - - /** - * Actually inserts the newline into the document, and auto-indents if appropriate. This method can be called by - * token makers who implement a custom action for inserting newlines. - * - * @param textArea - * @param noSelection - * Whether there is no selection. - */ - protected void handleInsertBreak(RSyntaxTextArea textArea, - boolean noSelection) { - // If we're auto-indenting... - if (noSelection && textArea.isAutoIndentEnabled()) { - insertNewlineWithAutoIndent(textArea); - } - else { - textArea.replaceSelection("\n"); - if (noSelection) { - possiblyCloseCurlyBrace(textArea, null); - } - } - } - - private void insertNewlineWithAutoIndent(RSyntaxTextArea sta) { - - try { - - int caretPos = sta.getCaretPosition(); - Document doc = sta.getDocument(); - Element map = doc.getDefaultRootElement(); - int lineNum = map.getElementIndex(caretPos); - Element line = map.getElement(lineNum); - int start = line.getStartOffset(); - int end = line.getEndOffset() - 1; // Why always "-1"? - int len = end - start; - String s = doc.getText(start, len); - - // endWS is the end of the leading whitespace of the - // current line. - String leadingWS = RSyntaxUtilities.getLeadingWhitespace(s); - StringBuffer sb = new StringBuffer("\n"); - sb.append(leadingWS); - - // If there is only whitespace between the caret and - // the EOL, pressing Enter auto-indents the new line to - // the same place as the previous line. - int nonWhitespacePos = atEndOfLine(caretPos - start, s, len); - if (nonWhitespacePos == -1) { - if (leadingWS.length() == len && - sta.isClearWhitespaceLinesEnabled()) { - // If the line was nothing but whitespace, select it - // so its contents get removed. - sta.setSelectionStart(start); - sta.setSelectionEnd(end); - } - sta.replaceSelection(sb.toString()); - } - - // If there is non-whitespace between the caret and the - // EOL, pressing Enter takes that text to the next line - // and auto-indents it to the same place as the last - // line. - else { - sb.append(s.substring(nonWhitespacePos)); - sta.replaceRange(sb.toString(), caretPos, end); - sta.setCaretPosition(caretPos + leadingWS.length() + 1); - } - - // Must do it after everything else, as the "smart indent" - // calculation depends on the previous line's state - // AFTER the Enter press (stuff may have been moved down). - if (sta.getShouldIndentNextLine(lineNum)) { - sta.replaceSelection("\t"); - } - - possiblyCloseCurlyBrace(sta, leadingWS); - - } catch (BadLocationException ble) { // Never happens - sta.replaceSelection("\n"); - ble.printStackTrace(); - } - - } - - private void possiblyCloseCurlyBrace(RSyntaxTextArea textArea, - String leadingWS) { - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - - if (textArea.getCloseCurlyBraces() && - doc.getCurlyBracesDenoteCodeBlocks()) { - - int line = textArea.getCaretLineNumber(); - Token t = doc.getTokenListForLine(line - 1); - t = t.getLastNonCommentNonWhitespaceToken(); - - if (t != null && t.isLeftCurly()) { - - if (getOpenBraceCount(doc) > 0) { - StringBuffer sb = new StringBuffer(); - if (line == textArea.getLineCount() - 1) { - sb.append('\n'); - } - if (leadingWS != null) { - sb.append(leadingWS); - } - sb.append("}\n"); - int dot = textArea.getCaretPosition(); - int end = textArea.getLineEndOffsetOfCurrentLine(); - // Insert at end of line, not at dot: they may have - // pressed Enter in the middle of the line and brought - // some text (though it must be whitespace and/or - // comments) down onto the new line. - textArea.insert(sb.toString(), end); - textArea.setCaretPosition(dot); // Caret may have moved - } - - } - - } - - } - - } - - /** - * Action for inserting tabs. This is extended to "block indent" a group of contiguous lines if they are selected. - */ - public static class InsertTabAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - public InsertTabAction() { - super(insertTabAction); - } - - public InsertTabAction(String name) { - super(name); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - Document document = textArea.getDocument(); - Element map = document.getDefaultRootElement(); - Caret c = textArea.getCaret(); - int dot = c.getDot(); - int mark = c.getMark(); - int dotLine = map.getElementIndex(dot); - int markLine = map.getElementIndex(mark); - - // If there is a multiline selection, indent all lines in - // the selection. - if (dotLine != markLine) { - int first = Math.min(dotLine, markLine); - int last = Math.max(dotLine, markLine); - Element elem; - int start; - try { - for (int i = first; i < last; i++) { - elem = map.getElement(i); - start = elem.getStartOffset(); - document.insertString(start, "\t", null); - } - // Don't do the last line if the caret is at its - // beginning. We must call getDot() again and not just - // use 'dot' as the caret's position may have changed - // due to the insertion of the tabs above. - elem = map.getElement(last); - start = elem.getStartOffset(); - if (Math.max(c.getDot(), c.getMark()) != start) { - document.insertString(start, "\t", null); - } - } catch (BadLocationException ble) { // Never happens. - ble.printStackTrace(); - UIManager.getLookAndFeel(). - provideErrorFeedback(textArea); - } - } - else { - textArea.replaceSelection("\t"); - } - - } - - public final String getMacroID() { - return insertTabAction; - } - - } - - /** - * Action to move the selection and/or caret. Constructor indicates direction to use. This class overrides the - * behavior defined in {@link RTextAreaEditorKit} to better skip "words" in source code. - */ - public static class NextWordAction - extends RTextAreaEditorKit.NextWordAction { - - private Segment seg; - - public NextWordAction(String nm, boolean select) { - super(nm, select); - seg = new Segment(); - } - - /** - * Overridden to do better with skipping "words" in code. - */ - protected int getNextWord(RTextArea textArea, int offs) - throws BadLocationException { - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - if (offs == doc.getLength()) { - return offs; - } - - int line = textArea.getLineOfOffset(offs); - int end = textArea.getLineEndOffset(line); - if (offs == end) { - return offs + 1; // Start of next line. - } - doc.getText(offs, end - offs, seg); - - // Determine the "type" of char at offs - letter/digit, - // whitespace or other - char ch = seg.first(); - - // Skip the group of letters and/or digits - if (Character.isLetterOrDigit(ch)) { - do { - ch = seg.next(); - } while (Character.isLetterOrDigit(ch)); - } - - // Skip groups of "anything else" (operators, etc.). - else if (!Character.isWhitespace(ch)) { - do { - ch = seg.next(); - } while (ch != Segment.DONE && - !(Character.isLetterOrDigit(ch) || - Character.isWhitespace(ch))); - } - - // Skip any trailing whitespace - while (Character.isWhitespace(ch)) { - ch = seg.next(); - } - - offs += seg.getIndex() - seg.getBeginIndex(); - return offs; - - } - - } - - /** - * Action for when the user tries to insert a template (that is, they've typed a template ID and pressed the trigger - * character (a space) in an attempt to do the substitution). - */ - public static class PossiblyInsertTemplateAction extends RecordableTextAction { - - private static final long serialVersionUID = 1L; - - public PossiblyInsertTemplateAction() { - super(rstaPossiblyInsertTemplateAction); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) - return; - - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - - if (RSyntaxTextArea.getTemplatesEnabled()) { - - Document doc = textArea.getDocument(); - if (doc != null) { - - try { - - CodeTemplateManager manager = RSyntaxTextArea. - getCodeTemplateManager(); - CodeTemplate template = manager == null ? null : - manager.getTemplate(rsta); - - // A non-null template means modify the text to insert! - if (template != null) { - template.invoke(rsta); - } - - // No template - insert default text. This is - // exactly what DefaultKeyTypedAction does. - else { - doDefaultInsert(rsta); - } - - } catch (BadLocationException ble) { - UIManager.getLookAndFeel(). - provideErrorFeedback(textArea); - } - - } // End of if (doc!=null). - - } // End of if (textArea.getTemplatesEnabled()). - - // If templates aren't enabled, just insert the text as usual. - else { - doDefaultInsert(rsta); - } - - } - - private final void doDefaultInsert(RTextArea textArea) { - // FIXME: We need a way to get the "trigger string" (i.e., - // the text that was just typed); however, the text area's - // template manager might be null (if templates are disabled). - // Also, the manager's trigger string doesn't yet match up with - // that defined in RSyntaxTextAreaEditorKit.java (which is - // hardcoded as a space)... - // String str = manager.getInsertTriggerString(); - // int mod = manager.getInsertTrigger().getModifiers(); - // if (str!=null && str.length()>0 && - // ((mod&ActionEvent.ALT_MASK)==(mod&ActionEvent.CTRL_MASK))) { - // char ch = str.charAt(0); - // if (ch>=0x20 && ch!=0x7F) - // textArea.replaceSelection(str); - // } - textArea.replaceSelection(" "); - } - - public final String getMacroID() { - return rstaPossiblyInsertTemplateAction; - } - - } - - /** - * Action to move the selection and/or caret. Constructor indicates direction to use. This class overrides the - * behavior defined in {@link RTextAreaEditorKit} to better skip "words" in source code. - */ - public static class PreviousWordAction - extends RTextAreaEditorKit.PreviousWordAction { - - private Segment seg; - - public PreviousWordAction(String nm, boolean select) { - super(nm, select); - seg = new Segment(); - } - - /** - * Overridden to do better with skipping "words" in code. - */ - protected int getPreviousWord(RTextArea textArea, int offs) - throws BadLocationException { - - if (offs == 0) { - return offs; - } - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - int line = textArea.getLineOfOffset(offs); - int start = textArea.getLineStartOffset(line); - if (offs == start) { - return start - 1; // End of previous line. - } - doc.getText(start, offs - start, seg); - - // Determine the "type" of char at offs - lower case, upper case, - // whitespace or other - char ch = seg.last(); - - // Skip any "leading" whitespace - while (Character.isWhitespace(ch)) { - ch = seg.previous(); - } - - // Skip the group of letters and/or digits - if (Character.isLetterOrDigit(ch)) { - do { - ch = seg.previous(); - } while (Character.isLetterOrDigit(ch)); - } - - // Skip groups of "anything else" (operators, etc.). - else if (!Character.isWhitespace(ch)) { - do { - ch = seg.previous(); - } while (ch != Segment.DONE && - !(Character.isLetterOrDigit(ch) || - Character.isWhitespace(ch))); - } - - offs -= seg.getEndIndex() - seg.getIndex(); - if (ch != Segment.DONE) { - offs++; - } - - return offs; - - } - - } - - /** - * Selects the word around the caret. This class is here to better handle selecting "words" in programming - * languages. - */ - public static class SelectWordAction - extends RTextAreaEditorKit.SelectWordAction { - - protected void createActions() { - start = new BeginWordAction("pigdog", false); - end = new EndWordAction("pigdog", true); - } - - } - - /** - * Action that toggles whether the currently selected lines are commented. - */ - public static class ToggleCommentAction extends RecordableTextAction { - - public ToggleCommentAction() { - super(rstaToggleCommentAction); - } - - public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { - - if (!textArea.isEditable() || !textArea.isEnabled()) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - String[] startEnd = doc.getLineCommentStartAndEnd(); - - if (startEnd == null) { - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - return; - } - - Element map = doc.getDefaultRootElement(); - Caret c = textArea.getCaret(); - int dot = c.getDot(); - int mark = c.getMark(); - int line1 = map.getElementIndex(dot); - int line2 = map.getElementIndex(mark); - int start = Math.min(line1, line2); - int end = Math.max(line1, line2); - - // Don't toggle comment on last line if there is no - // text selected on it. - if (start != end) { - Element elem = map.getElement(end); - if (Math.max(dot, mark) == elem.getStartOffset()) { - end--; - } - } - - textArea.beginAtomicEdit(); - try { - boolean add = getDoAdd(doc, map, start, end, startEnd); - for (line1 = start; line1 <= end; line1++) { - Element elem = map.getElement(line1); - handleToggleComment(elem, doc, startEnd, add); - } - } catch (BadLocationException ble) { - ble.printStackTrace(); - UIManager.getLookAndFeel().provideErrorFeedback(textArea); - } finally { - textArea.endAtomicEdit(); - } - - } - - private boolean getDoAdd(Document doc, Element map, int startLine, - int endLine, String[] startEnd) - throws BadLocationException { - boolean doAdd = false; - for (int i = startLine; i <= endLine; i++) { - Element elem = map.getElement(i); - int start = elem.getStartOffset(); - String t = doc.getText(start, elem.getEndOffset() - start - 1); - if (!t.startsWith(startEnd[0]) || - (startEnd[1] != null && !t.endsWith(startEnd[1]))) { - doAdd = true; - break; - } - } - return doAdd; - } - - private void handleToggleComment(Element elem, Document doc, - String[] startEnd, boolean add) throws BadLocationException { - int start = elem.getStartOffset(); - int end = elem.getEndOffset() - 1; - if (add) { - doc.insertString(start, startEnd[0], null); - if (startEnd[1] != null) { - doc.insertString(end + startEnd[0].length(), startEnd[1], - null); - } - } - else { - doc.remove(start, startEnd[0].length()); - if (startEnd[1] != null) { - int temp = startEnd[1].length(); - doc.remove(end - startEnd[0].length() - temp, temp); - } - } - } - - public final String getMacroID() { - return rstaToggleCommentAction; - } - - } - -} \ No newline at end of file + private static final long serialVersionUID = 1L; + + public static final String rstaCloseCurlyBraceAction = "RSTA.CloseCurlyBraceAction"; + public static final String rstaCloseMarkupTagAction = "RSTA.CloseMarkupTagAction"; + public static final String rstaCollapseAllFoldsAction = "RSTA.CollapseAllFoldsAction"; + public static final String rstaCollapseAllCommentFoldsAction = "RSTA.CollapseAllCommentFoldsAction"; + public static final String rstaCollapseFoldAction = "RSTA.CollapseFoldAction"; + public static final String rstaCopyAsStyledTextAction = "RSTA.CopyAsStyledTextAction"; + public static final String rstaDecreaseIndentAction = "RSTA.DecreaseIndentAction"; + public static final String rstaExpandAllFoldsAction = "RSTA.ExpandAllFoldsAction"; + public static final String rstaExpandFoldAction = "RSTA.ExpandFoldAction"; + public static final String rstaGoToMatchingBracketAction = "RSTA.GoToMatchingBracketAction"; + public static final String rstaPossiblyInsertTemplateAction = "RSTA.TemplateAction"; + public static final String rstaToggleCommentAction = "RSTA.ToggleCommentAction"; + public static final String rstaToggleCurrentFoldAction = "RSTA.ToggleCurrentFoldAction"; + + private static final String MSG = "org.fife.ui.rsyntaxtextarea.RSyntaxTextArea"; + private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); + + + /** + * The actions that RSyntaxTextAreaEditorKit adds to those of + * RTextAreaEditorKit. + */ + private static final Action[] defaultActions = { + new CloseCurlyBraceAction(), + new CloseMarkupTagAction(), + new BeginWordAction(beginWordAction, false), + new BeginWordAction(selectionBeginWordAction, true), + new ChangeFoldStateAction(rstaCollapseFoldAction, true), + new ChangeFoldStateAction(rstaExpandFoldAction, false), + new CollapseAllFoldsAction(), + new CopyAsStyledTextAction(), + //new DecreaseFontSizeAction(), + new DecreaseIndentAction(), + new DeletePrevWordAction(), + new DumbCompleteWordAction(), + new EndAction(endAction, false), + new EndAction(selectionEndAction, true), + new EndWordAction(endWordAction, false), + new EndWordAction(endWordAction, true), + new ExpandAllFoldsAction(), + new GoToMatchingBracketAction(), + new InsertBreakAction(), + //new IncreaseFontSizeAction(), + new InsertTabAction(), + new NextWordAction(nextWordAction, false), + new NextWordAction(selectionNextWordAction, true), + new PossiblyInsertTemplateAction(), + new PreviousWordAction(previousWordAction, false), + new PreviousWordAction(selectionPreviousWordAction, true), + new SelectWordAction(), + new ToggleCommentAction(), + }; + + + /** + * Constructor. + */ + public RSyntaxTextAreaEditorKit() { + } + + + /** + * Returns the default document used by RSyntaxTextAreas. + * + * @return The document. + */ + @Override + public Document createDefaultDocument() { + return new RSyntaxDocument(SyntaxConstants.SYNTAX_STYLE_NONE); + } + + + /** + * Overridden to return a row header that is aware of folding. + * + * @param textArea The text area. + * @return The icon row header. + */ + @Override + public IconRowHeader createIconRowHeader(RTextArea textArea) { + return new FoldingAwareIconRowHeader((RSyntaxTextArea)textArea); + } + + + /** + * Fetches the set of commands that can be used + * on a text component that is using a model and + * view produced by this kit. + * + * @return the command list + */ + @Override + public Action[] getActions() { + return TextAction.augmentList(super.getActions(), + RSyntaxTextAreaEditorKit.defaultActions); + } + + + /** + * Returns localized text for an action. There's definitely a better place + * for this functionality. + * + * @param key The key into the action resource bundle. + * @return The localized text. + */ + public static String getString(String key) { + return msg.getString(key); + } + + + /** + * Positions the caret at the beginning of the word. This class is here + * to better handle finding the "beginning of the word" for programming + * languages. + */ + protected static class BeginWordAction + extends RTextAreaEditorKit.BeginWordAction { + + private Segment seg; + + protected BeginWordAction(String name, boolean select) { + super(name, select); + seg = new Segment(); + } + + @Override + protected int getWordStart(RTextArea textArea, int offs) + throws BadLocationException { + + if (offs==0) { + return offs; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + int line = textArea.getLineOfOffset(offs); + int start = textArea.getLineStartOffset(line); + if (offs==start) { + return start; + } + int end = textArea.getLineEndOffset(line); + if (line!=textArea.getLineCount()-1) { + end--; + } + doc.getText(start, end-start, seg); + + // Determine the "type" of char at offs - lower case, upper case, + // whitespace or other. We take special care here as we're starting + // in the middle of the Segment to check whether we're already at + // the "beginning" of a word. + int firstIndex = seg.getBeginIndex() + (offs-start) - 1; + seg.setIndex(firstIndex); + char ch = seg.current(); + char nextCh = offs==end ? 0 : seg.array[seg.getIndex() + 1]; + + // The "word" is a group of letters and/or digits + int languageIndex = 0; // TODO + if (doc.isIdentifierChar(languageIndex, ch)) { + if (offs!=end && !doc.isIdentifierChar(languageIndex, nextCh)) { + return offs; + } + do { + ch = seg.previous(); + } while (doc.isIdentifierChar(languageIndex, ch) && ch != CharacterIterator.DONE); + } + + // The "word" is whitespace + else if (Character.isWhitespace(ch)) { + if (offs!=end && !Character.isWhitespace(nextCh)) { + return offs; + } + do { + ch = seg.previous(); + } while (Character.isWhitespace(ch)); + } + + // Otherwise, the "word" a single "something else" char (operator, + // etc.). + + offs -= firstIndex - seg.getIndex() + 1;//seg.getEndIndex() - seg.getIndex(); + if (ch!=Segment.DONE && nextCh!='\n') { + offs++; + } + + return offs; + + } + + } + + + /** + * Expands or collapses the nearest fold. + */ + public static class ChangeFoldStateAction extends FoldRelatedAction { + + private boolean collapse; + + public ChangeFoldStateAction(String name, boolean collapse) { + super(name); + this.collapse = collapse; + } + + public ChangeFoldStateAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + Fold fold = getClosestFold(rsta); + if (fold!=null) { + fold.setCollapsed(collapse); + } + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return getName(); + } + + } + + + /** + * Action that (optionally) aligns a closing curly brace with the line + * containing its matching opening curly brace. + */ + public static class CloseCurlyBraceAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + private Point bracketInfo; + private Segment seg; + + public CloseCurlyBraceAction() { + super(rstaCloseCurlyBraceAction); + seg = new Segment(); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); + + int languageIndex = 0; + int dot = textArea.getCaretPosition(); + if (dot>0) { + Token t = RSyntaxUtilities.getTokenAtOffset(rsta, dot-1); + languageIndex = t==null ? 0 : t.getLanguageIndex(); + } + boolean alignCurlyBraces = rsta.isAutoIndentEnabled() && + doc.getCurlyBracesDenoteCodeBlocks(languageIndex); + + if (alignCurlyBraces) { + textArea.beginAtomicEdit(); + } + + try { + + textArea.replaceSelection("}"); + + // If the user wants to align curly braces... + if (alignCurlyBraces) { + + Element root = doc.getDefaultRootElement(); + dot = rsta.getCaretPosition() - 1; // Start before '}' + int line = root.getElementIndex(dot); + Element elem = root.getElement(line); + int start = elem.getStartOffset(); + + // Get the current line's text up to the '}' entered. + try { + doc.getText(start, dot-start, seg); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + return; + } + + // Only attempt to align if there's only whitespace up to + // the '}' entered. + for (int i=0; i-1) { + try { + String ws = RSyntaxUtilities.getLeadingWhitespace( + doc, bracketInfo.y); + rsta.replaceRange(ws, start, dot); + } catch (BadLocationException ble) { + ble.printStackTrace(); + return; + } + } + + } + + } finally { + if (alignCurlyBraces) { + textArea.endAtomicEdit(); + } + } + + } + + @Override + public final String getMacroID() { + return rstaCloseCurlyBraceAction; + } + + } + + + /** + * (Optionally) completes a closing markup tag. + */ + public static class CloseMarkupTagAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + public CloseMarkupTagAction() { + super(rstaCloseMarkupTagAction); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + RSyntaxDocument doc = (RSyntaxDocument)rsta.getDocument(); + + Caret c = rsta.getCaret(); + boolean selection = c.getDot()!=c.getMark(); + rsta.replaceSelection("/"); + + // Don't automatically complete a tag if there was a selection + int dot = c.getDot(); + + if (doc.getLanguageIsMarkup() && + doc.getCompleteMarkupCloseTags() && + !selection && rsta.getCloseMarkupTags() && dot>1) { + + try { + + // Check actual char before token type, since it's quicker + char ch = doc.charAt(dot-2); + if (ch=='<' || ch=='[') { + + Token t = doc.getTokenListForLine( + rsta.getCaretLineNumber()); + t = RSyntaxUtilities.getTokenAtOffset(t, dot-1); + if (t!=null && t.getType()==Token.MARKUP_TAG_DELIMITER) { + //System.out.println("Huzzah - closing tag!"); + String tagName = discoverTagName(doc, dot); + if (tagName!=null) { + rsta.replaceSelection(tagName + (char)(ch+2)); + } + } + + } + + } catch (BadLocationException ble) { // Never happens + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + ble.printStackTrace(); + } + + } + + } + + /** + * Discovers the name of the tag being closed. Assumes standard + * SGML-style markup tags. + * + * @param doc The document to parse. + * @param dot The location of the caret. This should be right after + * the start of a closing tag token (e.g. "</" + * or "[" in the case of BBCode). + * @return The name of the tag to close, or null if it + * could not be determined. + */ + private String discoverTagName(RSyntaxDocument doc, int dot) { + + Stack stack = new Stack<>(); + + Element root = doc.getDefaultRootElement(); + int curLine = root.getElementIndex(dot); + + for (int i=0; i<=curLine; i++) { + + Token t = doc.getTokenListForLine(i); + while (t!=null && t.isPaintable()) { + + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('<') || t.isSingleChar('[')) { + t = t.getNextToken(); + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_NAME || + // Being lenient here and also checking + // for attributes, in case they + // (incorrectly) have whitespace between + // the '<' char and the element name. + t.getType()==Token.MARKUP_TAG_ATTRIBUTE) { + stack.push(t.getLexeme()); + break; + } + t = t.getNextToken(); + } + } + else if (t.length()==2 && t.charAt(0)=='/' && + (t.charAt(1)=='>' || + t.charAt(1)==']')) { + if (!stack.isEmpty()) { // Always true for valid XML + stack.pop(); + } + } + else if (t.length()==2 && + (t.charAt(0)=='<' || t.charAt(0)=='[') && + t.charAt(1)=='/') { + String tagName = null; + if (!stack.isEmpty()) { // Always true for valid XML + tagName = stack.pop(); + } + if (t.getEndOffset()>=dot) { + return tagName; + } + } + } + + t = t==null ? null : t.getNextToken(); + + } + + } + + return null; // Should never happen + + } + + @Override + public String getMacroID() { + return getName(); + } + + } + + + /** + * Collapses all comment folds. + */ + public static class CollapseAllCommentFoldsAction extends FoldRelatedAction{ + + private static final long serialVersionUID = 1L; + + public CollapseAllCommentFoldsAction() { + super(rstaCollapseAllCommentFoldsAction); + setProperties(msg, "Action.CollapseCommentFolds"); + } + + public CollapseAllCommentFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldCollapser collapser = new FoldCollapser(); + collapser.collapseFolds(rsta.getFoldManager()); + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaCollapseAllCommentFoldsAction; + } + + } + + + /** + * Collapses all folds. + */ + public static class CollapseAllFoldsAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public CollapseAllFoldsAction() { + this(false); + } + + public CollapseAllFoldsAction(boolean localizedName) { + super(rstaCollapseAllFoldsAction); + if (localizedName) { + setProperties(msg, "Action.CollapseAllFolds"); + } + } + + public CollapseAllFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldCollapser collapser = new FoldCollapser() { + @Override + public boolean getShouldCollapse(Fold fold) { + return true; + } + }; + collapser.collapseFolds(rsta.getFoldManager()); + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaCollapseAllFoldsAction; + } + + } + + + /** + * Action for copying text as styled text. + */ + public static class CopyAsStyledTextAction extends RecordableTextAction { + + private Theme theme; + + private static final long serialVersionUID = 1L; + + public CopyAsStyledTextAction() { + super(rstaCopyAsStyledTextAction); + } + + public CopyAsStyledTextAction(String themeName, Theme theme) { + super(rstaCopyAsStyledTextAction + "_" + themeName); + this.theme = theme; + } + + public CopyAsStyledTextAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + ((RSyntaxTextArea)textArea).copyAsStyledText(theme); + textArea.requestFocusInWindow(); + } + + @Override + public final String getMacroID() { + return getName(); + } + + } + + + /** + * Action for decreasing the font size of all fonts in the text area. + */ + public static class DecreaseFontSizeAction + extends RTextAreaEditorKit.DecreaseFontSizeAction { + + private static final long serialVersionUID = 1L; + + public DecreaseFontSizeAction() { + super(); + } + + public DecreaseFontSizeAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + SyntaxScheme scheme = rsta.getSyntaxScheme(); + + // All we need to do is update all of the fonts in syntax + // schemes, then call setSyntaxHighlightingColorScheme with the + // same scheme already being used. This relies on the fact that + // that method does not check whether the new scheme is different + // from the old scheme before updating. + + boolean changed = false; + int count = scheme.getStyleCount(); + for (int i=0; i=MINIMUM_SIZE) { + // Shrink by decreaseAmount. + ss.font = font.deriveFont(newSize); + changed = true; + } + else if (oldSize>MINIMUM_SIZE) { + // Can't shrink by full decreaseAmount, but + // can shrink a little bit. + ss.font = font.deriveFont(MINIMUM_SIZE); + changed = true; + } + } + } + } + + // Do the text area's font also. + Font font = rsta.getFont(); + float oldSize = font.getSize2D(); + float newSize = oldSize - decreaseAmount; + if (newSize>=MINIMUM_SIZE) { + // Shrink by decreaseAmount. + rsta.setFont(font.deriveFont(newSize)); + changed = true; + } + else if (oldSize>MINIMUM_SIZE) { + // Can't shrink by full decreaseAmount, but + // can shrink a little bit. + rsta.setFont(font.deriveFont(MINIMUM_SIZE)); + changed = true; + } + + // If we updated at least one font, update the screen. If + // all of the fonts were already the minimum size, beep. + if (changed) { + rsta.setSyntaxScheme(scheme); + // NOTE: This is a hack to get an encompassing + // RTextScrollPane to repaint its line numbers to account + // for a change in line height due to a font change. I'm + // not sure why we need to do this here but not when we + // change the syntax highlighting color scheme via the + // Options dialog... setSyntaxHighlightingColorScheme() + // calls revalidate() which won't repaint the scroll pane + // if scrollbars don't change, which is why we need this. + Component parent = rsta.getParent(); + if (parent instanceof javax.swing.JViewport) { + parent = parent.getParent(); + if (parent instanceof JScrollPane) { + parent.repaint(); + } + } + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + + } + + } + + + /** + * Action for when un-indenting lines (either the current line if there is + * selection, or all selected lines if there is one). + */ + public static class DecreaseIndentAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + private Segment s; + + public DecreaseIndentAction() { + this(rstaDecreaseIndentAction); + } + + public DecreaseIndentAction(String name) { + super(name); + s = new Segment(); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + Document document = textArea.getDocument(); + Element map = document.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int line1 = map.getElementIndex(dot); + int tabSize = textArea.getTabSize(); + + // If there is a selection, indent all lines in the selection. + // Otherwise, indent the line the caret is on. + if (dot!=mark) { + // Note that we cheaply reuse variables here, so don't + // take their names to mean what they are. + int line2 = map.getElementIndex(mark); + dot = Math.min(line1, line2); + mark = Math.max(line1, line2); + Element elem; + textArea.beginAtomicEdit(); + try { + for (line1=dot; line1i) { + // If the first character is a tab, remove it. + if (s.array[i]=='\t') { + doc.remove(start, 1); + } + // Otherwise, see if the first character is a space. If it + // is, remove all contiguous whitespaces at the beginning of + // this line, up to the tab size. + else if (s.array[i]==' ') { + i++; + int toRemove = 1; + while (i start) { + char ch = doc.charAt(offs); + if (isIdentifierChar(ch)) { + offs--; + } + } + else { // offs == start => previous word is on previous line + if (line == 0) { + return -1; + } + elem = root.getElement(--line); + offs = elem.getEndOffset() - 1; + } + + int prevWordStart = getPreviousWordStartInLine(doc, elem, offs); + while (prevWordStart == -1 && line > 0) { + line--; + elem = root.getElement(line); + prevWordStart = getPreviousWordStartInLine(doc, elem, + elem.getEndOffset()); + } + + return prevWordStart; + + } + + private int getPreviousWordStartInLine(RSyntaxDocument doc, + Element elem, int offs) throws BadLocationException { + + int start = elem.getStartOffset(); + int cur = offs; + + // Skip any whitespace or non-word chars + while (cur >= start) { + char ch = doc.charAt(cur); + if (isIdentifierChar(ch)) { + break; + } + cur--; + } + if (cur < start) { + // Empty line or nothing but whitespace/non-word chars + return -1; + } + + return getWordStartImpl(doc, elem, cur); + + } + + @Override + protected int getWordEnd(RTextArea textArea, int offs) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + int end = elem.getEndOffset() - 1; + + int wordEnd = offs; + while (wordEnd <= end) { + if (!isIdentifierChar(doc.charAt(wordEnd))) { + break; + } + wordEnd++; + } + + return wordEnd; + + } + + @Override + protected int getWordStart(RTextArea textArea, int offs) + throws BadLocationException { + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + return getWordStartImpl(doc, elem, offs); + } + + private static int getWordStartImpl(RSyntaxDocument doc, + Element elem, int offs) throws BadLocationException { + + int start = elem.getStartOffset(); + + int wordStart = offs; + while (wordStart >= start) { + char ch = doc.charAt(wordStart); + // Ignore newlines so we work when caret is at end of line + if (!isIdentifierChar(ch) && ch != '\n') { + break; + } + wordStart--; + } + + return wordStart==offs ? offs : wordStart + 1; + + } + + /** + * Overridden to not suggest word completions if the text right before + * the caret contains non-word characters, such as '/' or '%'. + * + * @param prefix The prefix characters before the caret. + * @return Whether the prefix could be part of a "word" in the context + * of the text area's current content. + */ + @Override + protected boolean isAcceptablePrefix(String prefix) { + return prefix.length() > 0 && + isIdentifierChar(prefix.charAt(prefix.length()-1)); + } + + /** + * Returns whether the specified character should be considered part + * of an identifier. + * + * @param ch The character. + * @return Whether the character is part of an identifier. + */ + private static boolean isIdentifierChar(char ch) { + //return doc.isIdentifierChar(languageIndex, ch); + return Character.isLetterOrDigit(ch) || ch == '_' || ch == '$'; + } + + } + + + /** + * Positions the caret at the end of the word. This class is here to + * better handle finding the "end of the word" in programming languages. + */ + protected static class EndWordAction + extends RTextAreaEditorKit.EndWordAction { + + private Segment seg; + + protected EndWordAction(String name, boolean select) { + super(name, select); + seg = new Segment(); + } + + @Override + protected int getWordEnd(RTextArea textArea, int offs) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + if (offs==doc.getLength()) { + return offs; + } + + int line = textArea.getLineOfOffset(offs); + int end = textArea.getLineEndOffset(line); + if (line!=textArea.getLineCount()-1) { + end--; // Hide newline + } + if (offs==end) { + return end; + } + doc.getText(offs, end-offs, seg); + + // Determine the "type" of char at offs - letter/digit, + // whitespace or other + char ch = seg.first(); + + // The "word" is a group of letters and/or digits + int languageIndex = 0; // TODO + if (doc.isIdentifierChar(languageIndex, ch)) { + do { + ch = seg.next(); + } while (doc.isIdentifierChar(languageIndex, ch) && + ch != CharacterIterator.DONE); + } + + // The "word" is whitespace. + else if (Character.isWhitespace(ch)) { + + do { + ch = seg.next(); + } while (Character.isWhitespace(ch)); + } + + // Otherwise, the "word" is a single character of some other type + // (operator, etc.). + + offs += seg.getIndex() - seg.getBeginIndex(); + return offs; + + } + + } + + + /** + * Expands all folds. + */ + public static class ExpandAllFoldsAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public ExpandAllFoldsAction() { + this(false); + } + + public ExpandAllFoldsAction(boolean localizedName) { + super(rstaExpandAllFoldsAction); + if (localizedName) { + setProperties(msg, "Action.ExpandAllFolds"); + } + } + + public ExpandAllFoldsAction(String name, Icon icon, + String desc, Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + FoldManager fm = rsta.getFoldManager(); + for (int i=0; i-1) { + // Go to the position AFTER the bracket so the previous + // bracket (which we were just on) is highlighted. + rsta.setCaretPosition(bracketInfo.y+1); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaGoToMatchingBracketAction; + } + + } + + + /** + * Action for increasing the font size of all fonts in the text area. + */ + public static class IncreaseFontSizeAction + extends RTextAreaEditorKit.IncreaseFontSizeAction { + + private static final long serialVersionUID = 1L; + + public IncreaseFontSizeAction() { + super(); + } + + public IncreaseFontSizeAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + SyntaxScheme scheme = rsta.getSyntaxScheme(); + + // All we need to do is update all of the fonts in syntax + // schemes, then call setSyntaxHighlightingColorScheme with the + // same scheme already being used. This relies on the fact that + // that method does not check whether the new scheme is different + // from the old scheme before updating. + + boolean changed = false; + int count = scheme.getStyleCount(); + for (int i=0; ipos that + * is NOT a whitespace char, or -1 if only + * whitespace chars follow pos (or it is the end + * position in the string). + */ + private static int atEndOfLine(int pos, String s, int sLen) { + for (int i=pos; i0) { + StringBuilder sb = new StringBuilder(); + if (line==textArea.getLineCount()-1) { + sb.append('\n'); + } + if (leadingWS!=null) { + sb.append(leadingWS); + } + sb.append("}\n"); + int dot = textArea.getCaretPosition(); + int end = textArea.getLineEndOffsetOfCurrentLine(); + // Insert at end of line, not at dot: they may have + // pressed Enter in the middle of the line and brought + // some text (though it must be whitespace and/or + // comments) down onto the new line. + textArea.insert(sb.toString(), end); + textArea.setCaretPosition(dot); // Caret may have moved + } + + } + + } + + } + + } + + + /** + * Action for inserting tabs. This is extended to "block indent" a + * group of contiguous lines if they are selected. + */ + public static class InsertTabAction extends RecordableTextAction { + + private static final long serialVersionUID = 1L; + + public InsertTabAction() { + super(insertTabAction); + } + + public InsertTabAction(String name) { + super(name); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + Document document = textArea.getDocument(); + Element map = document.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int dotLine = map.getElementIndex(dot); + int markLine = map.getElementIndex(mark); + + // If there is a multi-line selection, indent all lines in + // the selection. + if (dotLine!=markLine) { + int first = Math.min(dotLine, markLine); + int last = Math.max(dotLine, markLine); + Element elem; int start; + + // Since we're using Document.insertString(), we must mimic the + // soft tab behavior provided by RTextArea.replaceSelection(). + String replacement = "\t"; + if (textArea.getTabsEmulated()) { + StringBuilder sb = new StringBuilder(); + int temp = textArea.getTabSize(); + for (int i=0; i0 && + // ((mod&ActionEvent.ALT_MASK)==(mod&ActionEvent.CTRL_MASK))) { + // char ch = str.charAt(0); + // if (ch>=0x20 && ch!=0x7F) + // textArea.replaceSelection(str); + //} + textArea.replaceSelection(" "); + } + + @Override + public final String getMacroID() { + return rstaPossiblyInsertTemplateAction; + } + + } + + + /** + * Action to move the selection and/or caret. Constructor indicates + * direction to use. This class overrides the behavior defined in + * {@link RTextAreaEditorKit} to better skip "words" in source code. + */ + public static class PreviousWordAction + extends RTextAreaEditorKit.PreviousWordAction { + + private Segment seg; + + public PreviousWordAction(String nm, boolean select) { + super(nm, select); + seg = new Segment(); + } + + /** + * Overridden to do better with skipping "words" in code. + */ + @Override + protected int getPreviousWord(RTextArea textArea, int offs) + throws BadLocationException { + + if (offs==0) { + return offs; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + int start = root.getElement(line).getStartOffset(); + if (offs==start) {// If we're already at the start of the line... + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { // End of next visible line + FoldManager fm = rsta.getFoldManager(); + while (--line>=0 && fm.isLineHidden(line)); + if (line>=0) { // Found an earlier visible line + offs = root.getElement(line).getEndOffset() - 1; + } + // No earlier visible line - we must be at offs==0... + return offs; + } + else { + return start-1; // End of previous line. + } + } + doc.getText(start, offs-start, seg); + + // Determine the "type" of char at offs - lower case, upper case, + // whitespace or other + char ch = seg.last(); + + // Skip any "leading" whitespace + while (Character.isWhitespace(ch)) { + ch = seg.previous(); + } + + // Skip the group of letters and/or digits + int languageIndex = 0; + if (doc.isIdentifierChar(languageIndex, ch)) { + do { + ch = seg.previous(); + } while (doc.isIdentifierChar(languageIndex, ch) && + ch != CharacterIterator.DONE); + } + + // Skip groups of "anything else" (operators, etc.). + else if (!Character.isWhitespace(ch)) { + do { + ch = seg.previous(); + } while (ch!=Segment.DONE && + !(doc.isIdentifierChar(languageIndex, ch) || + Character.isWhitespace(ch))); + } + + offs -= seg.getEndIndex() - seg.getIndex(); + if (ch!=Segment.DONE) { + offs++; + } + + return offs; + + } + + } + + + /** + * Selects the word around the caret. This class is here to better + * handle selecting "words" in programming languages. + */ + public static class SelectWordAction + extends RTextAreaEditorKit.SelectWordAction { + + @Override + protected void createActions() { + start = new BeginWordAction("pigdog", false); + end = new EndWordAction("pigdog", true); + } + + } + + + /** + * Action that toggles whether the currently selected lines are + * commented. + */ + public static class ToggleCommentAction extends RecordableTextAction { + + public ToggleCommentAction() { + super(rstaToggleCommentAction); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + + if (!textArea.isEditable() || !textArea.isEnabled()) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + Element map = doc.getDefaultRootElement(); + Caret c = textArea.getCaret(); + int dot = c.getDot(); + int mark = c.getMark(); + int line1 = map.getElementIndex(dot); + int line2 = map.getElementIndex(mark); + int start = Math.min(line1, line2); + int end = Math.max(line1, line2); + + Token t = doc.getTokenListForLine(start); + int languageIndex = t!=null ? t.getLanguageIndex() : 0; + String[] startEnd = doc.getLineCommentStartAndEnd(languageIndex); + + if (startEnd==null) { + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + return; + } + + // Don't toggle comment on last line if there is no + // text selected on it. + if (start!=end) { + Element elem = map.getElement(end); + if (Math.max(dot, mark)==elem.getStartOffset()) { + end--; + } + } + + textArea.beginAtomicEdit(); + try { + boolean add = getDoAdd(doc,map, start,end, startEnd); + for (line1=start; line1<=end; line1++) { + Element elem = map.getElement(line1); + handleToggleComment(elem, doc, startEnd, add); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); + UIManager.getLookAndFeel().provideErrorFeedback(textArea); + } finally { + textArea.endAtomicEdit(); + } + + } + + private boolean getDoAdd(Document doc, Element map, int startLine, + int endLine, String[] startEnd) + throws BadLocationException { + boolean doAdd = false; + for (int i=startLine; i<=endLine; i++) { + Element elem = map.getElement(i); + int start = elem.getStartOffset(); + String t = doc.getText(start, elem.getEndOffset()-start-1); + if (!t.startsWith(startEnd[0]) || + (startEnd[1]!=null && !t.endsWith(startEnd[1]))) { + doAdd = true; + break; + } + } + return doAdd; + } + + private void handleToggleComment(Element elem, Document doc, + String[] startEnd, boolean add) throws BadLocationException { + int start = elem.getStartOffset(); + int end = elem.getEndOffset() - 1; + if (add) { + if (startEnd[1]!=null) { + doc.insertString(end, startEnd[1], null); + } + doc.insertString(start, startEnd[0], null); + } + else { + if (startEnd[1]!=null) { + int temp = startEnd[1].length(); + doc.remove(end-temp, temp); + } + doc.remove(start, startEnd[0].length()); + } + } + + @Override + public final String getMacroID() { + return rstaToggleCommentAction; + } + + } + + + /** + * Toggles the fold at the current caret position or line. + */ + public static class ToggleCurrentFoldAction extends FoldRelatedAction { + + private static final long serialVersionUID = 1L; + + public ToggleCurrentFoldAction() { + super(rstaToggleCurrentFoldAction); + setProperties(msg, "Action.ToggleCurrentFold"); + } + + public ToggleCurrentFoldAction(String name, Icon icon, String desc, + Integer mnemonic, KeyStroke accelerator) { + super(name, icon, desc, mnemonic, accelerator); + } + + @Override + public void actionPerformedImpl(ActionEvent e, RTextArea textArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isCodeFoldingEnabled()) { + Fold fold = getClosestFold(rsta); + if (fold!=null) { + fold.toggleCollapsedState(); + } + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + else { + UIManager.getLookAndFeel().provideErrorFeedback(rsta); + } + } + + @Override + public final String getMacroID() { + return rstaToggleCurrentFoldAction; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java old mode 100644 new mode 100755 index aed972939..4f288332f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaHighlighter.java @@ -1,480 +1,291 @@ /* * 04/23/2009 * - * RSyntaxTextAreaHighlighter.java - Highlighter for RTextAreas. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea + * RSyntaxTextAreaHighlighter.java - Highlighter for RSyntaxTextAreas. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Graphics; -import java.awt.Insets; -import java.awt.Rectangle; import java.awt.Shape; import java.util.ArrayList; import java.util.Iterator; import java.util.List; + import javax.swing.plaf.TextUI; -import javax.swing.plaf.basic.BasicTextUI.BasicHighlighter; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.Element; -import javax.swing.text.Highlighter; import javax.swing.text.JTextComponent; -import javax.swing.text.LayeredHighlighter; -import javax.swing.text.Position; import javax.swing.text.View; import org.fife.ui.rsyntaxtextarea.parser.Parser; import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; -import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextAreaHighlighter; +import org.fife.ui.rtextarea.SmartHighlightPainter; + /** - * The highlighter implementation used by {@link RSyntaxTextArea}s. It knows to always paint "marked occurrences" - * highlights below selection highlights, and squiggle underline highlights above all other highlights. - *

    - * - * Most of this code is copied from javax.swing.text.DefaultHighlighter; unfortunately, we cannot re-use much of it - * since it is package private. - * + * The highlighter implementation used by {@link RSyntaxTextArea}s. It knows to + * always paint "marked occurrences" highlights below selection highlights, + * and squiggle underline highlights above all other highlights.

    + * + * Most of this code is copied from javax.swing.text.DefaultHighlighter; + * unfortunately, we cannot re-use much of it since it is package private. + * * @author Robert Futrell * @version 1.0 */ -public class RSyntaxTextAreaHighlighter extends BasicHighlighter { - - /** - * The text component we are the highlighter for. - */ - private RTextArea textArea; - - /** - * Marked occurrences in the document (to be painted separately from other highlights). - */ - private List markedOccurrences; - - /** - * Highlights from document parsers. These should be painted "on top of" all other highlights to ensure they are - * always above the selection. - */ - private List parserHighlights; - - /** - * The default color used for parser notices when none is specified. - */ - private static final Color DEFAULT_PARSER_NOTICE_COLOR = Color.RED; - - /** - * Constructor. - */ - public RSyntaxTextAreaHighlighter() { - markedOccurrences = new ArrayList(); - parserHighlights = new ArrayList(0); // Often unused - } - - /** - * Adds a special "marked occurrence" highlight. - * - * @param start - * @param end - * @param p - * @return - * @throws BadLocationException - * @see {@link #removeMarkOccurrencesHighlight(Object)} - */ - Object addMarkedOccurrenceHighlight(int start, int end, - MarkOccurrencesHighlightPainter p) throws BadLocationException { - Document doc = textArea.getDocument(); - TextUI mapper = textArea.getUI(); - // Always layered highlights for marked occurrences. - HighlightInfo i = new LayeredHighlightInfo(); - i.painter = p; - i.p0 = doc.createPosition(start); - // HACK: Use "end-1" to prevent chars the user types at the "end" of - // the highlight to be absorbed into the highlight (default Highlight - // behavior). - i.p1 = doc.createPosition(end - 1); - markedOccurrences.add(i); - mapper.damageRange(textArea, start, end); - return i; - } - - /** - * Adds a special "marked occurrence" highlight. - * - * @param notice - * The notice from a {@link Parser}. - * @return A tag with which to reference the highlight. - * @throws BadLocationException - * @see {@link #clearParserHighlights()} - */ - Object addParserHighlight(ParserNotice notice, HighlightPainter p) - throws BadLocationException { - - Document doc = textArea.getDocument(); - TextUI mapper = textArea.getUI(); - - int start = notice.getOffset(); - int end = 0; - if (start == -1) { // Could just define an invalid line number - int line = notice.getLine(); - Element root = doc.getDefaultRootElement(); - if (line >= 0 && line < root.getElementCount()) { - Element elem = root.getElement(line); - start = elem.getStartOffset(); - end = elem.getEndOffset(); - } - } - else { - end = start + notice.getLength(); - } - - // Always layered highlights for parser highlights. - HighlightInfo i = new LayeredHighlightInfo(); - i.painter = p; - i.p0 = doc.createPosition(start); - i.p1 = doc.createPosition(end); - i.notice = notice;// i.color = notice.getColor(); - - parserHighlights.add(i); - mapper.damageRange(textArea, start, end); - return i; - - } - - /** - * Removes all parser highlights. - * - * @see #addParserHighlight(int, int, Color, javax.swing.text.Highlighter.HighlightPainter) - */ - void clearParserHighlights() { - - for (Object tag : parserHighlights) { - - if (tag instanceof LayeredHighlightInfo) { - LayeredHighlightInfo lhi = (LayeredHighlightInfo) tag; - if (lhi.width > 0 && lhi.height > 0) { - textArea.repaint(lhi.x, lhi.y, lhi.width, lhi.height); - } - } else { - HighlightInfo info = (HighlightInfo) tag; - TextUI ui = textArea.getUI(); - ui.damageRange(textArea, info.getStartOffset(), info.getEndOffset()); - // safeDamageRange(info.p0, info.p1); - } - - } - - parserHighlights.clear(); - - } - - /** - * Removes all of the highlights for a specific parser. - * - * @param parser - * The parser. - */ - public void clearParserHighlights(Parser parser) { - - for (Iterator i = parserHighlights.iterator(); i.hasNext();) { - - HighlightInfo info = (HighlightInfo) i.next(); - - if (info.notice.getParser() == parser) { - if (info instanceof LayeredHighlightInfo) { - LayeredHighlightInfo lhi = (LayeredHighlightInfo) info; - if (lhi.width > 0 && lhi.height > 0) { - textArea.repaint(lhi.x, lhi.y, lhi.width, lhi.height); - } - } - else { - TextUI ui = textArea.getUI(); - ui.damageRange(textArea, info.getStartOffset(), info.getEndOffset()); - // safeDamageRange(info.p0, info.p1); - } - i.remove(); - } - - } - - } - - /** - * {@inheritDoc} - */ - public void deinstall(JTextComponent c) { - this.textArea = null; - markedOccurrences.clear(); - parserHighlights.clear(); - } - - /** - * Returns a list of "marked occurrences" in the text area. If there are no marked occurrences, this will be an - * empty list. - * - * @return The list of marked occurrences. - */ - public List getMarkedOccurrences() { - List list = new ArrayList(markedOccurrences.size()); - for (Object markedOccurrence : markedOccurrences) { - HighlightInfo info = (HighlightInfo) markedOccurrence; - int start = info.getStartOffset(); - int end = info.getEndOffset() + 1; // HACK - DocumentRange range = new DocumentRangeImpl(start, end); - list.add(range); - } - return list; - } - - /** - * {@inheritDoc} - */ - public void install(JTextComponent c) { - super.install(c); - this.textArea = (RTextArea) c; - } - - /** - * Renders the highlights. - * - * @param g - * the graphics context - */ - public void paint(Graphics g) { - paintList(g, markedOccurrences); - super.paint(g); - paintList(g, parserHighlights); - } - - private void paintList(Graphics g, List highlights) { - - int len = highlights.size(); - - for (int i = 0; i < len; i++) { - HighlightInfo info = (HighlightInfo) highlights.get(i); - if (!(info instanceof LayeredHighlightInfo)) { - // Avoid allocating unless we need it. - Rectangle a = textArea.getBounds(); - Insets insets = textArea.getInsets(); - a.x = insets.left; - a.y = insets.top; - a.width -= insets.left + insets.right; - a.height -= insets.top + insets.bottom; - for (; i < len; i++) { - info = (HighlightInfo) markedOccurrences.get(i); - if (!(info instanceof LayeredHighlightInfo)) { - Color c = info.getColor(); - Highlighter.HighlightPainter p = info.getPainter(); - if (c != null && p instanceof ChangeableColorHighlightPainter) { - ((ChangeableColorHighlightPainter) p).setColor(c); - } - p.paint(g, info.getStartOffset(), info.getEndOffset(), - a, textArea); - } - } - } - } - - } - - /** - * When leaf Views (such as LabelView) are rendering they should call into this method. If a highlight is in the - * given region it will be drawn immediately. - * - * @param g - * Graphics used to draw - * @param p0 - * starting offset of view - * @param p1 - * ending offset of view - * @param viewBounds - * Bounds of View - * @param editor - * JTextComponent - * @param view - * View instance being rendered - */ - public void paintLayeredHighlights(Graphics g, int p0, int p1, - Shape viewBounds, JTextComponent editor, View view) { - paintListLayered(g, p0, p1, viewBounds, editor, view, markedOccurrences); - super.paintLayeredHighlights(g, p0, p1, viewBounds, editor, view); - paintListLayered(g, p0, p1, viewBounds, editor, view, parserHighlights); - } - - private void paintListLayered(Graphics g, int p0, int p1, Shape viewBounds, - JTextComponent editor, View view, List highlights) { - for (int i = highlights.size() - 1; i >= 0; i--) { - Object tag = highlights.get(i); - if (tag instanceof LayeredHighlightInfo) { - LayeredHighlightInfo lhi = (LayeredHighlightInfo) tag; - int start = lhi.getStartOffset(); - int end = lhi.getEndOffset(); - if ((p0 < start && p1 > start) || - (p0 >= start && p0 < end)) { - lhi.paintLayeredHighlights(g, p0, p1, viewBounds, - editor, view); - } - } - } - } - - private void removeListHighlight(List list, Object tag) { - if (tag instanceof LayeredHighlightInfo) { - LayeredHighlightInfo lhi = (LayeredHighlightInfo) tag; - if (lhi.width > 0 && lhi.height > 0) { - textArea.repaint(lhi.x, lhi.y, lhi.width, lhi.height); - } - } - else { - HighlightInfo info = (HighlightInfo) tag; - TextUI ui = textArea.getUI(); - ui.damageRange(textArea, info.getStartOffset(), info.getEndOffset()); - // safeDamageRange(info.p0, info.p1); - } - list.remove(tag); - } - - /** - * Removes a "marked occurrences" highlight from the view. - * - * @param tag - * The reference to the highlight - * @see #addMarkedOccurrenceHighlight(int, int, javax.swing.text.Highlighter.HighlightPainter) - */ - void removeMarkOccurrencesHighlight(Object tag) { - removeListHighlight(markedOccurrences, tag); - } - - /** - * Removes a parser highlight from this view. - * - * @param tag - * The reference to the highlight. - * @see #addParserHighlight(int, int, Color, javax.swing.text.Highlighter.HighlightPainter) - */ - void removeParserHighlight(Object tag) { - removeListHighlight(parserHighlights, tag); - } - - private static class DocumentRangeImpl implements DocumentRange { - - private int startOffs; - private int endOffs; - - public DocumentRangeImpl(int startOffs, int endOffs) { - this.startOffs = startOffs; - this.endOffs = endOffs; - } - - public int getEndOffset() { - return endOffs; - } - - public int getStartOffset() { - return startOffs; - } - - } - - private static class HighlightInfo implements Highlighter.Highlight { - - private Position p0; - private Position p1; - protected Highlighter.HighlightPainter painter; - private ParserNotice notice;// Color color; // Used only by Parser highlights. - - public Color getColor() { - // return color; - Color color = null; - if (notice != null) { - color = notice.getColor(); - if (color == null) { - color = DEFAULT_PARSER_NOTICE_COLOR; - } - } - return color; - } - - public int getStartOffset() { - return p0.getOffset(); - } - - public int getEndOffset() { - return p1.getOffset(); - } - - public Highlighter.HighlightPainter getPainter() { - return painter; - } - - } - - private static class LayeredHighlightInfo extends HighlightInfo { - - private int x; - private int y; - private int width; - private int height; - - void union(Shape bounds) { - if (bounds == null) { - return; - } - Rectangle alloc = (bounds instanceof Rectangle) ? - (Rectangle) bounds : bounds.getBounds(); - if (width == 0 || height == 0) { - x = alloc.x; - y = alloc.y; - width = alloc.width; - height = alloc.height; - } - else { - width = Math.max(x + width, alloc.x + alloc.width); - height = Math.max(y + height, alloc.y + alloc.height); - x = Math.min(x, alloc.x); - width -= x; - y = Math.min(y, alloc.y); - height -= y; - } - } - - /** - * Restricts the region based on the receivers offsets and messages the painter to paint the region. - */ - void paintLayeredHighlights(Graphics g, int p0, int p1, - Shape viewBounds, JTextComponent editor, - View view) { - int start = getStartOffset(); - int end = getEndOffset(); - // Restrict the region to what we represent - p0 = Math.max(start, p0); - p1 = Math.min(end, p1); - if (getColor() != null && - (painter instanceof ChangeableColorHighlightPainter)) { - ((ChangeableColorHighlightPainter) painter).setColor(getColor()); - } - // Paint the appropriate region using the painter and union - // the effected region with our bounds. - union(((LayeredHighlighter.LayerPainter) painter).paintLayer - (g, p0, p1, viewBounds, editor, view)); - } - - } - -} \ No newline at end of file +public class RSyntaxTextAreaHighlighter extends RTextAreaHighlighter { + + /** + * Marked occurrences in the document (to be painted separately from + * other highlights). + */ + private List markedOccurrences; + + /** + * Highlights from document parsers. These should be painted "on top of" + * all other highlights to ensure they are always above the selection. + */ + private List parserHighlights; + + /** + * The default color used for parser notices when none is specified. + */ + private static final Color DEFAULT_PARSER_NOTICE_COLOR = Color.RED; + + + /** + * Constructor. + */ + public RSyntaxTextAreaHighlighter() { + markedOccurrences = new ArrayList<>(); + parserHighlights = new ArrayList<>(0); // Often unused + } + + + /** + * Adds a special "marked occurrence" highlight. + * + * @param start + * @param end + * @param p + * @return A tag to reference the highlight later. + * @throws BadLocationException + * @see #clearMarkOccurrencesHighlights() + */ + Object addMarkedOccurrenceHighlight(int start, int end, + SmartHighlightPainter p) throws BadLocationException { + Document doc = textArea.getDocument(); + TextUI mapper = textArea.getUI(); + // Always layered highlights for marked occurrences. + SyntaxLayeredHighlightInfoImpl i = new SyntaxLayeredHighlightInfoImpl(); + i.setPainter(p); + i.setStartOffset(doc.createPosition(start)); + // HACK: Use "end-1" to prevent chars the user types at the "end" of + // the highlight to be absorbed into the highlight (default Highlight + // behavior). + i.setEndOffset(doc.createPosition(end-1)); + markedOccurrences.add(i); + mapper.damageRange(textArea, start, end); + return i; + } + + + /** + * Adds a highlight from a parser. + * + * @param notice The notice from a {@link Parser}. + * @return A tag with which to reference the highlight. + * @throws BadLocationException + * @see #clearParserHighlights() + * @see #clearParserHighlights(Parser) + */ + HighlightInfo addParserHighlight(ParserNotice notice, HighlightPainter p) + throws BadLocationException { + + Document doc = textArea.getDocument(); + TextUI mapper = textArea.getUI(); + + int start = notice.getOffset(); + int end = 0; + if (start==-1) { // Could just define an invalid line number + int line = notice.getLine(); + Element root = doc.getDefaultRootElement(); + if (line>=0 && line i = parserHighlights.iterator(); + while (i.hasNext()) { + + SyntaxLayeredHighlightInfoImpl info = i.next(); + + if (info.notice.getParser()==parser) { + if (info.width > 0 && info.height > 0) { + textArea.repaint(info.x, info.y, info.width, info.height); + } + i.remove(); + } + + } + + } + + + /** + * {@inheritDoc} + */ + @Override + public void deinstall(JTextComponent c) { + super.deinstall(c); + markedOccurrences.clear(); + parserHighlights.clear(); + } + + + /** + * Returns a list of "marked occurrences" in the text area. If there are + * no marked occurrences, this will be an empty list. + * + * @return The list of marked occurrences, or an empty list if none. The + * contents of this list will be of type {@link DocumentRange}. + */ + public List getMarkedOccurrences() { + List list = new ArrayList<>(markedOccurrences.size()); + for (HighlightInfo info : markedOccurrences) { + int start = info.getStartOffset(); + int end = info.getEndOffset() + 1; // HACK + if (start <= end) { + // Occasionally a Marked Occurrence can have a lost end offset + // but not start offset (replacing entire text content with + // new content, and a marked occurrence is on the last token + // in the document). + DocumentRange range = new DocumentRange(start, end); + list.add(range); + } + } + return list; + } + + + @Override + public void paintLayeredHighlights(Graphics g, int lineStart, int lineEnd, + Shape viewBounds, JTextComponent editor, View view) { + paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, markedOccurrences); + super.paintLayeredHighlights(g, lineStart, lineEnd, viewBounds, editor, view); + paintListLayered(g, lineStart,lineEnd, viewBounds, editor, view, parserHighlights); + } + + + /** + * Removes a parser highlight from this view. + * + * @param tag The reference to the highlight. + * @see #addParserHighlight(ParserNotice, javax.swing.text.Highlighter.HighlightPainter) + */ + void removeParserHighlight(HighlightInfo tag) { + repaintListHighlight(tag); + parserHighlights.remove(tag); + } + + + /** + * Highlight info implementation used for parser notices and marked + * occurrences. + */ + private static class SyntaxLayeredHighlightInfoImpl extends + LayeredHighlightInfoImpl { + + private ParserNotice notice;//Color color; // Used only by Parser highlights. + + @Override + public Color getColor() { + //return color; + Color color = null; + if (notice!=null) { + color = notice.getColor(); + if (color==null) { + color = DEFAULT_PARSER_NOTICE_COLOR; + } + } + return color; + } + + @Override + public String toString() { + return "[SyntaxLayeredHighlightInfoImpl: " + + "startOffs=" + getStartOffset() + + ", endOffs=" + getEndOffset() + + ", color=" + getColor() + + "]"; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java old mode 100644 new mode 100755 index c692f42ea..673d18b33 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxTextAreaUI.java @@ -2,228 +2,268 @@ * 02/24/2004 * * RSyntaxTextAreaUI.java - UI for an RSyntaxTextArea. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; +import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; import java.beans.PropertyChangeEvent; + import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.InputMapUIResource; -import javax.swing.text.*; +import javax.swing.text.BadLocationException; +import javax.swing.text.EditorKit; +import javax.swing.text.Element; +import javax.swing.text.Highlighter; +import javax.swing.text.JTextComponent; +import javax.swing.text.View; import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextAreaUI; + /** - * UI used by RSyntaxTextArea. This allows us to implement syntax highlighting. - * + * UI used by RSyntaxTextArea. This allows us to implement + * syntax highlighting. + * * @author Robert Futrell * @version 0.1 */ public class RSyntaxTextAreaUI extends RTextAreaUI { - private static final String SHARED_ACTION_MAP_NAME = "RSyntaxTextAreaUI.actionMap"; - private static final String SHARED_INPUT_MAP_NAME = "RSyntaxTextAreaUI.inputMap"; - private static final EditorKit defaultKit = new RSyntaxTextAreaEditorKit(); + private static final String SHARED_ACTION_MAP_NAME = "RSyntaxTextAreaUI.actionMap"; + private static final String SHARED_INPUT_MAP_NAME = "RSyntaxTextAreaUI.inputMap"; + private static final EditorKit DEFAULT_KIT = new RSyntaxTextAreaEditorKit(); - public static ComponentUI createUI(JComponent ta) { - return new RSyntaxTextAreaUI(ta); - } - /** - * Constructor. - */ - public RSyntaxTextAreaUI(JComponent rSyntaxTextArea) { - super(rSyntaxTextArea); - } + public static ComponentUI createUI(JComponent ta) { + return new RSyntaxTextAreaUI(ta); + } + + + /** + * Constructor. + */ + public RSyntaxTextAreaUI(JComponent rSyntaxTextArea) { + super(rSyntaxTextArea); + } + /** * Creates the view for an element. - * - * @param elem - * The element. + * + * @param elem The element. * @return The view. */ - public View create(Element elem) { - RTextArea c = getRTextArea(); - if (c instanceof RSyntaxTextArea) { - RSyntaxTextArea area = (RSyntaxTextArea) c; - View v; - if (area.getLineWrap()) - v = new WrappedSyntaxView(elem); - else - v = new SyntaxView(elem); - return v; - } - return null; - } + @Override + public View create(Element elem) { + RTextArea c = getRTextArea(); + if (c instanceof RSyntaxTextArea) { + RSyntaxTextArea area = (RSyntaxTextArea) c; + View v; + if (area.getLineWrap()) { + v = new WrappedSyntaxView(elem); + } + else { + v = new SyntaxView(elem); + } + return v; + } + return null; + } - /** - * Creates the highlighter to use for syntax text areas. - * - * @return The highlighter. - */ - protected Highlighter createHighlighter() { - return new RSyntaxTextAreaHighlighter(); - } - /** - * Returns the name to use to cache/fetch the shared action map. This should be overridden by subclasses if the - * subclass has its own custom editor kit to install, so its actions get picked up. - * - * @return The name of the cached action map. - */ - protected String getActionMapName() { - return SHARED_ACTION_MAP_NAME; - } + /** + * Creates the highlighter to use for syntax text areas. + * + * @return The highlighter. + */ + @Override + protected Highlighter createHighlighter() { + return new RSyntaxTextAreaHighlighter(); + } - /** - * Fetches the EditorKit for the UI. - * - * @param tc - * The text component for which this UI is installed. - * @return The editor capabilities. - * @see javax.swing.plaf.TextUI#getEditorKit - */ - public EditorKit getEditorKit(JTextComponent tc) { - return defaultKit; - } - /** - * Get the InputMap to use for the UI. - *

    - * - * This method is not named getInputMap() because there is a package-private method in - * BasicTextAreaUI with that name. Thus, creating a new method with that name causes certain compilers - * to issue warnings that you are not actually overriding the original method (since it is package-private). - */ - protected InputMap getRTextAreaInputMap() { - InputMap map = new InputMapUIResource(); - InputMap shared = (InputMap) UIManager.get(SHARED_INPUT_MAP_NAME); - if (shared == null) { - shared = new RSyntaxTextAreaDefaultInputMap(); - UIManager.put(SHARED_INPUT_MAP_NAME, shared); - } - // KeyStroke[] keys = shared.allKeys(); - // for (int i=0; i " + shared.get(keys[i])); - map.setParent(shared); - return map; - } + /** + * Returns the name to use to cache/fetch the shared action map. This + * should be overridden by subclasses if the subclass has its own custom + * editor kit to install, so its actions get picked up. + * + * @return The name of the cached action map. + */ + @Override + protected String getActionMapName() { + return SHARED_ACTION_MAP_NAME; + } - /** - * Paints the text area's background. - * - * @param g - * The graphics component on which to paint. - */ - protected void paintBackground(Graphics g) { - super.paintBackground(g); - paintMatchedBracket(g); - } - /** - * Paints the "matched bracket", if any. - * - * @param g - * The graphics context. - */ - protected void paintMatchedBracket(Graphics g) { - // We must add "-1" to the height because otherwise we'll paint below - // the region that gets invalidated. - RSyntaxTextArea rsta = (RSyntaxTextArea) textArea; - if (rsta.isBracketMatchingEnabled()) { - Rectangle match = rsta.match; - if (match != null) { - if (rsta.getAnimateBracketMatching()) { - g.setColor(rsta.getMatchedBracketBGColor()); - g.fillRoundRect(match.x, match.y, match.width, match.height - 1, 5, 5); - g.setColor(rsta.getMatchedBracketBorderColor()); - g.drawRoundRect(match.x, match.y, match.width, match.height - 1, 5, 5); - } - else { - g.setColor(rsta.getMatchedBracketBGColor()); - g.fillRect(match.x, match.y, match.width, match.height - 1); - g.setColor(rsta.getMatchedBracketBorderColor()); - g.drawRect(match.x, match.y, match.width, match.height - 1); - } - } - } - } + /** + * Fetches the EditorKit for the UI. + * + * @param tc The text component for which this UI is installed. + * @return The editor capabilities. + * @see javax.swing.plaf.TextUI#getEditorKit + */ + @Override + public EditorKit getEditorKit(JTextComponent tc) { + return DEFAULT_KIT; + } - /** - * Gets called whenever a bound property is changed on this UI's RSyntaxTextArea. - * - * @param e - * The property change event. - */ - protected void propertyChange(PropertyChangeEvent e) { - String name = e.getPropertyName(); + /** + * Get the InputMap to use for the UI.

    + * + * This method is not named getInputMap() because there is + * a package-private method in BasicTextAreaUI with that name. + * Thus, creating a new method with that name causes certain compilers to + * issue warnings that you are not actually overriding the original method + * (since it is package-private). + */ + @Override + protected InputMap getRTextAreaInputMap() { + InputMap map = new InputMapUIResource(); + InputMap shared = (InputMap)UIManager.get(SHARED_INPUT_MAP_NAME); + if (shared==null) { + shared = new RSyntaxTextAreaDefaultInputMap(); + UIManager.put(SHARED_INPUT_MAP_NAME, shared); + } + //KeyStroke[] keys = shared.allKeys(); + //for (int i=0; i " + shared.get(keys[i])); + map.setParent(shared); + return map; + } - // If they change the syntax scheme, we must do this so that - // WrappedSyntaxView(_TEST) updates its child views properly. - if (name.equals(RSyntaxTextArea.SYNTAX_SCHEME_PROPERTY)) { - modelChanged(); - } - // Everything else is general to all RTextAreas. - else { - super.propertyChange(e); - } + @Override + protected void paintEditorAugmentations(Graphics g) { + super.paintEditorAugmentations(g); + paintMatchedBracket(g); + } - } - /** - * Updates the view. This should be called when the underlying RSyntaxTextArea changes its syntax - * editing style. - */ - public void refreshSyntaxHighlighting() { - modelChanged(); - } + /** + * Paints the "matched bracket", if any. + * + * @param g The graphics context. + */ + protected void paintMatchedBracket(Graphics g) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + if (rsta.isBracketMatchingEnabled()) { + Rectangle match = rsta.getMatchRectangle(); + if (match!=null) { + paintMatchedBracketImpl(g, rsta, match); + } + if (rsta.getPaintMatchedBracketPair()) { + Rectangle dotRect = rsta.getDotRectangle(); + if (dotRect!=null) { // should always be true + paintMatchedBracketImpl(g, rsta, dotRect); + } + } + } + } - /** - * Returns the y-coordinate of the line containing a specified offset. - *

    - * - * This is faster than calling modelToView(offs).y, so it is preferred if you do not need the actual - * bounding box. - * - * @param offs - * The offset info the document. - * @return The y-coordinate of the top of the offset, or -1 if this text area doesn't yet have a - * positive size. - * @throws BadLocationException - * If offs isn't a valid offset into the document. - */ - public int yForLineContaining(int offs) throws BadLocationException { - Rectangle alloc = getVisibleEditorRect(); - if (alloc != null) { - RSTAView view = (RSTAView) getRootView(textArea).getView(0); - return view.yForLineContaining(alloc, offs); - } - return -1; - } - -} \ No newline at end of file + + protected void paintMatchedBracketImpl(Graphics g, RSyntaxTextArea rsta, + Rectangle r) { + // We must add "-1" to the height because otherwise we'll paint below + // the region that gets invalidated. + if (rsta.getAnimateBracketMatching()) { + Color bg = rsta.getMatchedBracketBGColor(); + final int arcWH = 5; + if (bg!=null) { + g.setColor(bg); + g.fillRoundRect(r.x,r.y, r.width,r.height-1, arcWH, arcWH); + } + g.setColor(rsta.getMatchedBracketBorderColor()); + g.drawRoundRect(r.x,r.y, r.width,r.height-1, arcWH, arcWH); + } + else { + Color bg = rsta.getMatchedBracketBGColor(); + if (bg!=null) { + g.setColor(bg); + g.fillRect(r.x,r.y, r.width,r.height-1); + } + g.setColor(rsta.getMatchedBracketBorderColor()); + g.drawRect(r.x,r.y, r.width,r.height-1); + } + } + + + /** + * Gets called whenever a bound property is changed on this UI's + * RSyntaxTextArea. + * + * @param e The property change event. + */ + @Override + protected void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + // If they change the syntax scheme, we must do this so that + // WrappedSyntaxView(_TEST) updates its child views properly. + if (name.equals(RSyntaxTextArea.SYNTAX_SCHEME_PROPERTY)) { + modelChanged(); + } + + // Everything else is general to all RTextAreas. + else { + super.propertyChange(e); + } + + } + + + /** + * Updates the view. This should be called when the underlying + * RSyntaxTextArea changes its syntax editing style. + */ + public void refreshSyntaxHighlighting() { + modelChanged(); + } + + + /** + * Returns the y-coordinate of the specified line.

    + * + * This method is quicker than using traditional + * modelToView(int) calls, as the entire bounding box isn't + * computed. + */ + @Override + public int yForLine(int line) throws BadLocationException { + Rectangle alloc = getVisibleEditorRect(); + if (alloc!=null) { + RSTAView view = (RSTAView)getRootView(textArea).getView(0); + return view.yForLine(alloc, line); + } + return -1; + } + + + /** + * Returns the y-coordinate of the line containing a specified offset.

    + * + * This is faster than calling modelToView(offs).y, so it is + * preferred if you do not need the actual bounding box. + */ + @Override + public int yForLineContaining(int offs) throws BadLocationException { + Rectangle alloc = getVisibleEditorRect(); + if (alloc!=null) { + RSTAView view = (RSTAView)getRootView(textArea).getView(0); + return view.yForLineContaining(alloc, offs); + } + return -1; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java old mode 100644 new mode 100755 index 2d62ad6bd..ef2f5a8d9 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RSyntaxUtilities.java @@ -3,30 +3,28 @@ * * RSyntaxUtilities.java - Utility methods used by RSyntaxTextArea and its * views. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; +import java.awt.Color; +import java.awt.Container; +import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; -import javax.swing.*; +import java.awt.Toolkit; +import java.util.Map; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import javax.swing.JLabel; +import javax.swing.JTextArea; +import javax.swing.JViewport; +import javax.swing.SwingConstants; +import javax.swing.UIManager; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import javax.swing.text.Document; @@ -36,908 +34,1533 @@ import javax.swing.text.TabExpander; import javax.swing.text.View; +import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; +import org.fife.ui.rtextarea.Gutter; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextScrollPane; + + /** - * Utility methods used by RSyntaxTextArea and its associated classes. - * + * Utility methods used by RSyntaxTextArea and its associated + * classes. + * * @author Robert Futrell * @version 0.2 */ -public class RSyntaxUtilities implements SwingConstants { - - // private static final int DIGIT_MASK = 1; - private static final int LETTER_MASK = 2; - // private static final int WHITESPACE_MASK = 4; - // private static final int UPPER_CASE_MASK = 8; - private static final int HEX_CHARACTER_MASK = 16; - private static final int LETTER_OR_DIGIT_MASK = 32; - private static final int BRACKET_MASK = 64; - private static final int JAVA_OPERATOR_MASK = 128; - - /** - * A lookup table used to quickly decide if a 16-bit Java char is a US-ASCII letter (A-Z or a-z), a digit, a - * whitespace char (either space (0x0020) or tab (0x0009)), etc. This method should be faster than - * Character.isLetter, Character.isDigit, and Character.isWhitespace because - * we know we are dealing with ASCII chars and so don't have to worry about code planes, etc. - */ - private static final int[] dataTable = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, // 0-15 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 - 4, 128, 0, 0, 0, 128, 128, 0, 64, 64, 128, 128, 0, 128, 0, 128, // 32-47 - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 128, 0, 128, 128, 128, 128, // 48-63 - 0, 58, 58, 58, 58, 58, 58, 42, 42, 42, 42, 42, 42, 42, 42, 42, // 64-79 - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 64, 0, 64, 128, 0, // 80-95 - 0, 50, 50, 50, 50, 50, 50, 34, 34, 34, 34, 34, 34, 34, 34, 34, // 96-111 - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 128, 64, 128, 0, // 112-127 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143 - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224- - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 240-255. - }; - - /** - * Returns the leading whitespace of a string. - * - * @param text - * The String to check. - * @return The leading whitespace. - */ - public static String getLeadingWhitespace(String text) { - int count = 0; - int len = text.length(); - while (count < len && RSyntaxUtilities.isWhitespace(text.charAt(count))) { - count++; - } - return text.substring(0, count); - } - - private static final Element getLineElem(Document d, int offs) { - Element map = d.getDefaultRootElement(); - int index = map.getElementIndex(offs); - Element elem = map.getElement(index); - if ((offs >= elem.getStartOffset()) && (offs < elem.getEndOffset())) { - return elem; - } - return null; - } - - /** - * Returns the bounding box (in the current view) of a specified position in the model. This method is designed for - * line-wrapped views to use, as it allows you to specify a "starting position" in the line, from which the x-value - * is assumed to be zero. The idea is that you specify the first character in a physical line as p0, as - * this is the character where the x-pixel value is 0. - * - * @param textArea - * The text area containing the text. - * @param s - * A segment in which to load the line. This is passed in so we don't have to reallocate a new - * Segment for each call. - * @param p0 - * The starting position in the physical line in the document. - * @param p1 - * The position for which to get the bounding box in the view. - * @param e - * How to expand tabs. - * @param rect - * The rectangle whose x- and width-values are changed to represent the bounding box of p1. - * This is reused to keep from needlessly reallocating Rectangles. - * @param x0 - * The x-coordinate (pixel) marking the left-hand border of the text. This is useful if the text area has - * a border, for example. - * @return The bounding box in the view of the character p1. - * @throws BadLocationException - * If p0 or p1 is not a valid location in the specified text area's document. - * @throws IllegalArgumentException - * If p0 and p1 are not on the same line. - */ - public static Rectangle getLineWidthUpTo(RSyntaxTextArea textArea, - Segment s, int p0, int p1, - TabExpander e, Rectangle rect, - int x0) - throws BadLocationException { - - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - - // Ensure p0 and p1 are valid document positions. - if (p0 < 0) - throw new BadLocationException("Invalid document position", p0); - else if (p1 > doc.getLength()) - throw new BadLocationException("Invalid document position", p1); - - // Ensure p0 and p1 are in the same line, and get the start/end - // offsets for that line. - Element map = doc.getDefaultRootElement(); - int lineNum = map.getElementIndex(p0); - // We do ">1" because p1 might be the first position on the next line - // or the last position on the previous one. - // if (lineNum!=map.getElementIndex(p1)) - if (Math.abs(lineNum - map.getElementIndex(p1)) > 1) - throw new IllegalArgumentException("p0 and p1 are not on the " + - "same line (" + p0 + ", " + p1 + ")."); - - // Get the token list. - Token t = doc.getTokenListForLine(lineNum); - - // Modify the token list 't' to begin at p0 (but still have correct - // token types, etc.), and get the x-location (in pixels) of the - // beginning of this new token list. - makeTokenListStartAt(t, p0, e, textArea, 0); - - rect = t.listOffsetToView(textArea, e, p1, x0, rect); - return rect; - - } - - /** - * Returns the location of the bracket paired with the one at the current caret position. - * - * @param textArea - * The text area. - * @return The location of the matching bracket in the document, or -1 if there isn't a matching - * bracket (or the caret isn't on a bracket). - */ - private static Segment charSegment = new Segment(); - - public static int getMatchingBracketPosition(RSyntaxTextArea textArea) { - - try { - - // Actually position just BEFORE caret. - int caretPosition = textArea.getCaretPosition() - 1; - if (caretPosition > -1) { - - // Some variables that will be used later. - Token token; - Element map; - int curLine; - Element line; - int start, end; - RSyntaxDocument doc = (RSyntaxDocument) textArea.getDocument(); - char bracket = doc.charAt(caretPosition); - - // First, see if the previous char was a bracket - // ('{', '}', '(', ')', '[', ']'). - // If it was, then make sure this bracket isn't sitting in - // the middle of a comment or string. If it isn't, then - // initialize some stuff so we can continue on. - char bracketMatch; - boolean goForward; - switch (bracket) { - - case '{': - case '(': - case '[': - - // Ensure this bracket isn't in a comment. - map = doc.getDefaultRootElement(); - curLine = map.getElementIndex(caretPosition); - line = map.getElement(curLine); - start = line.getStartOffset(); - end = line.getEndOffset(); - token = doc.getTokenListForLine(curLine); - token = RSyntaxUtilities.getTokenAtOffset(token, caretPosition); - // All brackets are always returned as "separators." - if (token.type != Token.SEPARATOR) { - return -1; - } - bracketMatch = bracket == '{' ? '}' : (bracket == '(' ? ')' : ']'); - goForward = true; - break; - - case '}': - case ')': - case ']': - - // Ensure this bracket isn't in a comment. - map = doc.getDefaultRootElement(); - curLine = map.getElementIndex(caretPosition); - line = map.getElement(curLine); - start = line.getStartOffset(); - end = line.getEndOffset(); - token = doc.getTokenListForLine(curLine); - token = RSyntaxUtilities.getTokenAtOffset(token, caretPosition); - // All brackets are always returned as "separators." - if (token.type != Token.SEPARATOR) { - return -1; - } - bracketMatch = bracket == '}' ? '{' : (bracket == ')' ? '(' : '['); - goForward = false; - break; - - default: - return -1; - - } - - if (goForward) { - - int lastLine = map.getElementCount(); - - // Start just after the found bracket since we're sure - // we're not in a comment. - start = caretPosition + 1; - int numEmbedded = 0; - boolean haveTokenList = false; - - while (true) { - - doc.getText(start, end - start, charSegment); - int segOffset = charSegment.offset; - - for (int i = segOffset; i < segOffset + charSegment.count; i++) { - - char ch = charSegment.array[i]; - - if (ch == bracket) { - if (haveTokenList == false) { - token = doc.getTokenListForLine(curLine); - haveTokenList = true; - } - int offset = start + (i - segOffset); - token = RSyntaxUtilities.getTokenAtOffset(token, offset); - if (token.type == Token.SEPARATOR) - numEmbedded++; - } - - else if (ch == bracketMatch) { - if (haveTokenList == false) { - token = doc.getTokenListForLine(curLine); - haveTokenList = true; - } - int offset = start + (i - segOffset); - token = RSyntaxUtilities.getTokenAtOffset(token, offset); - if (token.type == Token.SEPARATOR) { - if (numEmbedded == 0) - return offset; - numEmbedded--; - } - } - - } // End of for (int i=segOffset; i= segOffset; i--) { - - char ch = charSegment.array[i]; - - if (ch == bracket) { - if (haveTokenList == false) { - token = doc.getTokenListForLine(curLine); - haveTokenList = true; - } - int offset = start + (i - segOffset); - t2 = RSyntaxUtilities.getTokenAtOffset(token, offset); - if (t2.type == Token.SEPARATOR) - numEmbedded++; - } - - else if (ch == bracketMatch) { - if (haveTokenList == false) { - token = doc.getTokenListForLine(curLine); - haveTokenList = true; - } - int offset = start + (i - segOffset); - t2 = RSyntaxUtilities.getTokenAtOffset(token, offset); - if (t2.type == Token.SEPARATOR) { - if (numEmbedded == 0) - return offset; - numEmbedded--; - } - } - - } // End of for (int i=segOffset; i-1). - - } catch (BadLocationException ble) { - // Shouldn't ever happen. - ble.printStackTrace(); - } - - // Something went wrong... - return -1; - - } - - /** - * Provides a way to determine the next visually represented model location at which one might place a caret. Some - * views may not be visible, they might not be in the same order found in the model, or they just might not allow - * access to some of the locations in the model. - *

    - * - * NOTE: You should only call this method if the passed-in javax.swing.text.View is an instance of - * {@link TokenOrientedView} and javax.swing.text.TabExpander; otherwise, a - * ClassCastException could be thrown. - * - * @param pos - * the position to convert >= 0 - * @param a - * the allocated region in which to render - * @param direction - * the direction from the current position that can be thought of as the arrow keys typically found on a - * keyboard. This will be one of the following values: - *

      - *
    • SwingConstants.WEST
    • SwingConstants.EAST
    • SwingConstants.NORTH
    • SwingConstants.SOUTH - *
    - * @return the location within the model that best represents the next location visual position - * @exception BadLocationException - * @exception IllegalArgumentException - * if direction doesn't have one of the legal values above - */ - public static int getNextVisualPositionFrom(int pos, Position.Bias b, - Shape a, int direction, - Position.Bias[] biasRet, View view) - throws BadLocationException { - - biasRet[0] = Position.Bias.Forward; - - // Do we want the "next position" above, below, to the left or right? - switch (direction) { - - case NORTH: - case SOUTH: - if (pos == -1) { - pos = (direction == NORTH) ? - Math.max(0, view.getEndOffset() - 1) : - view.getStartOffset(); - break; - } - RSyntaxTextArea target = (RSyntaxTextArea) view. - getContainer(); - Caret c = (target != null) ? target.getCaret() : null; - // YECK! Ideally, the x location from the magic caret - // position would be passed in. - Point mcp; - if (c != null) - mcp = c.getMagicCaretPosition(); - else - mcp = null; - int x; - if (mcp == null) { - Rectangle loc = target.modelToView(pos); - x = (loc == null) ? 0 : loc.x; - } - else { - x = mcp.x; - } - if (direction == NORTH) - pos = getPositionAbove(target, pos, x, (TabExpander) view); - else - pos = getPositionBelow(target, pos, x, (TabExpander) view); - break; - - case WEST: - if (pos == -1) - pos = Math.max(0, view.getEndOffset() - 1); - else - pos = Math.max(0, pos - 1); - break; - - case EAST: - if (pos == -1) - pos = view.getStartOffset(); - else - pos = Math.min(pos + 1, view.getDocument(). - getLength()); - break; - - default: - throw new IllegalArgumentException( - "Bad direction: " + direction); - } - - return pos; - - } - - /** - * Determines the position in the model that is closest to the given view location in the row above. The component - * given must have a size to compute the result. If the component doesn't have a size a value of -1 will be - * returned. - * - * @param c - * the editor - * @param offs - * the offset in the document >= 0 - * @param x - * the X coordinate >= 0 - * @return the position >= 0 if the request can be computed, otherwise a value of -1 will be returned. - * @exception BadLocationException - * if the offset is out of range - */ - public static final int getPositionAbove(RSyntaxTextArea c, int offs, - float x, TabExpander e) throws BadLocationException { - - TokenOrientedView tov = (TokenOrientedView) e; - Token token = tov.getTokenListForPhysicalLineAbove(offs); - if (token == null) - return -1; - - // A line containing only Token.NULL is an empty line. - else if (token.type == Token.NULL) { - int line = c.getLineOfOffset(offs); // Sure to be >0 ?? - return c.getLineStartOffset(line - 1); - } - - else { - return token.getListOffset(c, e, 0, x); - } - - } - - /** - * Determines the position in the model that is closest to the given view location in the row below. The component - * given must have a size to compute the result. If the component doesn't have a size a value of -1 will be - * returned. - * - * @param c - * the editor - * @param offs - * the offset in the document >= 0 - * @param x - * the X coordinate >= 0 - * @return the position >= 0 if the request can be computed, otherwise a value of -1 will be returned. - * @exception BadLocationException - * if the offset is out of range - */ - public static final int getPositionBelow(RSyntaxTextArea c, int offs, - float x, TabExpander e) throws BadLocationException { - - TokenOrientedView tov = (TokenOrientedView) e; - Token token = tov.getTokenListForPhysicalLineBelow(offs); - if (token == null) - return -1; - - // A line containing only Token.NULL is an empty line. - else if (token.type == Token.NULL) { - int line = c.getLineOfOffset(offs); // Sure to be > c.getLineCount()-1 ?? - return c.getLineStartOffset(line + 1); - } - - else { - return token.getListOffset(c, e, 0, x); - } - - } - - /** - * Returns the token at the specified index, or null if the given offset isn't in this token list's - * range.
    - * Note that this method does NOT check to see if tokenList is null; callers should check for - * themselves. - * - * @param tokenList - * The list of tokens in which to search. - * @param offset - * The offset at which to get the token. - * @return The token at offset, or null if none of the tokens are at that offset. - */ - public static final Token getTokenAtOffset(Token tokenList, int offset) { - for (Token t = tokenList; t != null; t = t.getNextToken()) { - if (t.containsPosition(offset)) - return t; - } - return null; - } - - /** - * Returns the end of the word at the given offset. - * - * @param textArea - * The text area. - * @param offs - * The offset into the text area's content. - * @return The end offset of the word. - * @throws BadLocationException - * If offs is invalid. - * @see #getWordStart(RSyntaxTextArea, int) - */ - public static int getWordEnd(RSyntaxTextArea textArea, int offs) - throws BadLocationException { - - Document doc = textArea.getDocument(); - int endOffs = textArea.getLineEndOffsetOfCurrentLine(); - int lineEnd = Math.min(endOffs, doc.getLength()); - if (offs == lineEnd) { // End of the line. - return offs; - } - - String s = doc.getText(offs, lineEnd - offs - 1); - if (s != null && s.length() > 0) { // Should always be true - int i = 0; - int count = s.length(); - char ch = s.charAt(i); - if (Character.isWhitespace(ch)) { - while (i < count && Character.isWhitespace(s.charAt(i++))) - ; - } - else if (Character.isLetterOrDigit(ch)) { - while (i < count && Character.isLetterOrDigit(s.charAt(i++))) - ; - } - else { - i = 2; - } - offs += i - 1; - } - - return offs; - - } - - /** - * Returns the start of the word at the given offset. - * - * @param textArea - * The text area. - * @param offs - * The offset into the text area's content. - * @return The start offset of the word. - * @throws BadLocationException - * If offs is invalid. - * @see #getWordEnd(RSyntaxTextArea, int) - */ - public static int getWordStart(RSyntaxTextArea textArea, int offs) - throws BadLocationException { - - Document doc = textArea.getDocument(); - Element line = getLineElem(doc, offs); - if (line == null) { - throw new BadLocationException("No word at " + offs, offs); - } - - int lineStart = line.getStartOffset(); - if (offs == lineStart) { // Start of the line. - return offs; - } - - int endOffs = Math.min(offs + 1, doc.getLength()); - String s = doc.getText(lineStart, endOffs - lineStart); - if (s != null && s.length() > 0) { - int i = s.length() - 1; - char ch = s.charAt(i); - if (Character.isWhitespace(ch)) { - while (i > 0 && Character.isWhitespace(s.charAt(i - 1))) { - i--; - } - offs = lineStart + i; - } - else if (Character.isLetterOrDigit(ch)) { - while (i > 0 && Character.isLetterOrDigit(s.charAt(i - 1))) { - i--; - } - offs = lineStart + i; - } - - } - - return offs; - - } - - /** - * Determines the width of the given token list taking tabs into consideration. This is implemented in a 1.1 style - * coordinate system where ints are used and 72dpi is assumed. - *

    - * - * This method also assumes that the passed-in token list begins at x-pixel 0 in the view (for tab - * purposes). - * - * @param tokenList - * The tokenList list representing the text. - * @param textArea - * The text area in which this token list resides. - * @param e - * The tab expander. This value cannot be null. - * @return The width of the token list, in pixels. - */ - public static final float getTokenListWidth(Token tokenList, - RSyntaxTextArea textArea, - TabExpander e) { - return getTokenListWidth(tokenList, textArea, e, 0); - } - - /** - * Determines the width of the given token list taking tabs into consideration. This is implemented in a 1.1 style - * coordinate system where ints are used and 72dpi is assumed. - *

    - * - * @param tokenList - * The token list list representing the text. - * @param textArea - * The text area in which this token list resides. - * @param e - * The tab expander. This value cannot be null. - * @param x0 - * The x-pixel coordinate of the start of the token list. - * @return The width of the token list, in pixels. - * @see #getTokenListWidthUpTo - */ - public static final float getTokenListWidth(final Token tokenList, - RSyntaxTextArea textArea, - TabExpander e, float x0) { - float width = x0; - for (Token t = tokenList; t != null && t.isPaintable(); t = t.getNextToken()) { - width += t.getWidth(textArea, e, width); - } - return width - x0; - } - - /** - * Determines the width of the given token list taking tabs into consideration and only up to the given index in the - * document (exclusive). - * - * @param tokenList - * The token list representing the text. - * @param textArea - * The text area in which this token list resides. - * @param e - * The tab expander. This value cannot be null. - * @param x0 - * The x-pixel coordinate of the start of the token list. - * @param upTo - * The document position at which you want to stop, exclusive. If this position is before the starting - * position of the token list, a width of 0 will be returned; similarly, if this position - * comes after the entire token list, the width of the entire token list is returned. - * @return The width of the token list, in pixels, up to, but not including, the character at position - * upTo. - * @see #getTokenListWidth - */ - public static final float getTokenListWidthUpTo(final Token tokenList, - RSyntaxTextArea textArea, TabExpander e, - float x0, int upTo) { - float width = 0; - for (Token t = tokenList; t != null && t.isPaintable(); t = t.getNextToken()) { - if (t.containsPosition(upTo)) { - return width + t.getWidthUpTo(upTo - t.offset, textArea, e, - x0 + width); - } - width += t.getWidth(textArea, e, x0 + width); - } - return width; - } - - /** - * Returns whether or not this character is a "bracket" to be matched by such programming languages as C, C++, and - * Java. - * - * @param ch - * The character to check. - * @return Whether or not the character is a "bracket" - one of '(', ')', '[', ']', '{', and '}'. - */ - public static final boolean isBracket(char ch) { - // We need the first condition as it might be that ch>255, and thus - // not in our table. '}' is the highest-valued char in the bracket - // set. - return ch <= '}' && (dataTable[ch] & BRACKET_MASK) > 0; - } - - /** - * Returns whether or not a character is a digit (0-9). - * - * @param ch - * The character to check. - * @return Whether or not the character is a digit. - */ - public static final boolean isDigit(char ch) { - // We do it this way as we'd need to do two conditions anyway (first - // to check that ch<255 so it can index into our table, then whether - // that table position has the digit mask). - return ch >= '0' && ch <= '9'; - } - - /** - * Returns whether or not this character is a hex character. This method accepts both upper- and lower-case letters - * a-f. - * - * @param ch - * The character to check. - * @return Whether or not the character is a hex character 0-9, a-f, or A-F. - */ - public static final boolean isHexCharacter(char ch) { - // We need the first condition as it could be that ch>255 (and thus - // not a valid index into our table). 'f' is the highest-valued - // char that is a valid hex character. - return (ch <= 'f') && (dataTable[ch] & HEX_CHARACTER_MASK) > 0; - } - - /** - * Returns whether a character is a Java operator. Note that C and C++ operators are the same as Java operators. - * - * @param ch - * The character to check. - * @return Whether or not the character is a Java operator. - */ - public static final boolean isJavaOperator(char ch) { - // We need the first condition as it could be that ch>255 (and thus - // not a valid index into our table). '~' is the highest-valued - // char that is a valid Java operator. - return (ch <= '~') && (dataTable[ch] & JAVA_OPERATOR_MASK) > 0; - } - - /** - * Returns whether a character is a US-ASCII letter (A-Z or a-z). - * - * @param ch - * The character to check. - * @return Whether or not the character is a US-ASCII letter. - */ - public static final boolean isLetter(char ch) { - // We need the first condition as it could be that ch>255 (and thus - // not a valid index into our table). - return (ch <= 'z') && (dataTable[ch] & LETTER_MASK) > 0; - } - - /** - * Returns whether or not a character is a US-ASCII letter or a digit. - * - * @param ch - * The character to check. - * @return Whether or not the character is a US-ASCII letter or a digit. - */ - public static final boolean isLetterOrDigit(char ch) { - // We need the first condition as it could be that ch>255 (and thus - // not a valid index into our table). - return (ch <= 'z') && (dataTable[ch] & LETTER_OR_DIGIT_MASK) > 0; - } - - /** - * Returns whether or not a character is a whitespace character (either a space ' ' or tab '\t'). This checks for - * the Unicode character values 0x0020 and 0x0009. - * - * @param ch - * The character to check. - * @return Whether or not the character is a whitespace character. - */ - public static final boolean isWhitespace(char ch) { - // We do it this way as we'd need to do two conditions anyway (first - // to check that ch<255 so it can index into our table, then whether - // that table position has the whitespace mask). - return ch == ' ' || ch == '\t'; - } - - /** - * Modifies the passed-in token list to start at the specified offset. For example, if the token list covered - * positions 20-60 in the document (inclusive) like so: - * - *

    -     *   [token1] -> [token2] -> [token3] -> [token4]
    -     *   20     30   31     40   41     50   51     60
    -     * 
    - * - * and you used this method to make the token list start at position 44, then the token list would be modified to be - * the following: - * - *
    -     *   [part-of-old-token3] -> [token4]
    -     *   44                 50   51     60
    -     * 
    - * - * Tokens that come before the specified position are forever lost, and the token containing that position is made - * to begin at that position if necessary. All token types remain the same as they were originally. - *

    - * - * This method can be useful if you are only interested in part of a token list (i.e., the line it represents), but - * you don't want to modify the token list yourself. - * - * @param tokenList - * The list to make start at the specified position. This parameter is modified. - * @param pos - * The position at which the new token list is to start. If this position is not in the passed-in token - * list, returned token list will either be null or the unpaintable token(s) at the end of - * the passed-in token list. - * @param e - * How to expand tabs. - * @param textArea - * The text area from which the token list came. - * @param x0 - * The initial x-pixel position of the old token list. - * @return The width, in pixels, of the part of the token list "removed from the - * front." This way, you know the x-offset of the "new" token list. - */ - public static float makeTokenListStartAt(Token tokenList, int pos, - TabExpander e, - final RSyntaxTextArea textArea, - float x0) { - - Token t = tokenList; - - // Loop through the token list until you find the one that contains - // pos. Remember the cumulative width of all of these tokens. - while (t != null && t.isPaintable() && !t.containsPosition(pos)) { - x0 += t.getWidth(textArea, e, x0); - t = t.getNextToken(); - } - - // Make the token that contains pos start at pos. - if (t != null && t.isPaintable() && t.offset != pos) { - // Number of chars between p0 and token start. - int difference = pos - t.offset; - x0 += t.getWidthUpTo(t.textCount - difference + 1, textArea, e, x0); - t.makeStartAt(pos); - } - - // Make the passed-in token list point to the proper place. - // t can be null, for example, if line ends with unended MLC. - if (t != null && t.isPaintable()) - tokenList.copyFrom(t); - else - tokenList = null; - t = null; - - // Return the x-offset (in pixels) of the newly-modified t. - return x0; - - } - - /** - * If the character is an upper-case US-ASCII letter, it returns the lower-case version of that letter; otherwise, - * it just returns the character. - * - * @param ch - * The character to lower-case (if it is a US-ASCII upper-case character). - * @return The lower-case version of the character. - */ - public static final char toLowerCase(char ch) { - // We can logical OR with 32 because A-Z are 65-90 in the ASCII table - // and none of them have the 6th bit (32) set, and a-z are 97-122 in - // the ASCII table, which is 32 over from A-Z. - // We do it this way as we'd need to do two conditions anyway (first - // to check that ch<255 so it can index into our table, then whether - // that table position has the upper-case mask). - if (ch >= 'A' && ch <= 'Z') - return (char) (ch | 0x20); - return ch; - } - -} \ No newline at end of file +public final class RSyntaxUtilities implements SwingConstants { + + /** + * Integer constant representing a Windows-variant OS. + */ + public static final int OS_WINDOWS = 1; + + /** + * Integer constant representing Mac OS X. + */ + public static final int OS_MAC_OSX = 2; + + /** + * Integer constant representing Linux. + */ + public static final int OS_LINUX = 4; + + /** + * Integer constant representing an "unknown" OS. 99.99% of the + * time, this means some UNIX variant (AIX, SunOS, etc.). + */ + public static final int OS_OTHER = 8; + + /** + * Used for the color of hyperlinks when a LookAndFeel uses light text + * against a dark background. + */ + private static final Color LIGHT_HYPERLINK_FG = new Color(0xd8ffff); + + private static final int OS = getOSImpl(); + + //private static final int DIGIT_MASK = 1; + private static final int LETTER_MASK = 2; + //private static final int WHITESPACE_MASK = 4; + //private static final int UPPER_CASE_MASK = 8; + private static final int HEX_CHARACTER_MASK = 16; + private static final int LETTER_OR_DIGIT_MASK = 32; + private static final int BRACKET_MASK = 64; + private static final int JAVA_OPERATOR_MASK = 128; + + /** + * A lookup table used to quickly decide if a 16-bit Java char is a + * US-ASCII letter (A-Z or a-z), a digit, a whitespace char (either space + * (0x0020) or tab (0x0009)), etc. This method should be faster + * than Character.isLetter, Character.isDigit, + * and Character.isWhitespace because we know we are dealing + * with ASCII chars and so don't have to worry about code planes, etc. + */ + private static final int[] DATA_TABLE = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, // 0-15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 + 4, 128, 0, 0, 0, 128, 128, 0, 64, 64, 128, 128, 0, 128, 0, 128, // 32-47 + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 128, 0, 128, 128, 128, 128, // 48-63 + 0, 58, 58, 58, 58, 58, 58, 42, 42, 42, 42, 42, 42, 42, 42, 42, // 64-79 + 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 64, 0, 64, 128, 0, // 80-95 + 0, 50, 50, 50, 50, 50, 50, 34, 34, 34, 34, 34, 34, 34, 34, 34, // 96-111 + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 64, 128, 64, 128, 0, // 112-127 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 128-143 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 144- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 160- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 176- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 192- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 208- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 224- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 240-255. + }; + + /** + * Used in bracket matching methods. + */ + private static Segment charSegment = new Segment(); + + /** + * Used in token list manipulation methods. + */ + private static final TokenImpl TEMP_TOKEN = new TokenImpl(); + + /** + * Used internally. + */ + private static final char[] JS_KEYWORD_RETURN = { 'r', 'e', 't', 'u', 'r', 'n' }; + private static final char[] JS_AND = { '&', '&' }; + private static final char[] JS_OR = { '|', '|' }; + + /** + * Used internally. + */ + private static final String BRACKETS = "{([})]"; + + + /** + * An unused constructor to prevent instantiation, and keep static analysis + * tools happy. + */ + private RSyntaxUtilities() { // NOSONAR + // Private constructor to prevent instantiation. + } + + + /** + * Returns a string with characters that are special to HTML (such as + * <, > and &) replaced + * by their HTML escape sequences. + * + * @param s The input string. + * @param newlineReplacement What to replace newline characters with. + * If this is null, they are simply removed. + * @param inPreBlock Whether this HTML will be in within pre + * tags. If this is true, spaces will be kept as-is; + * otherwise, they will be converted to " ". + * @return The escaped version of s. + */ + public static String escapeForHtml(String s, + String newlineReplacement, boolean inPreBlock) { + + if (s==null) { + return null; + } + if (newlineReplacement==null) { + newlineReplacement = ""; + } + final String tabString = " "; + boolean lastWasSpace = false; + + StringBuilder sb = new StringBuilder(); + + for (int i=0; i': + sb.append(">"); + lastWasSpace = false; + break; + case '\'': + sb.append("'"); + lastWasSpace = false; + break; + case '"': + sb.append("""); + lastWasSpace = false; + break; + case '/': // OWASP-recommended even though unnecessary + sb.append("/"); + lastWasSpace = false; + break; + default: + sb.append(ch); + lastWasSpace = false; + break; + } + } + + return sb.toString(); + + } + + + /** + * Returns the rendering hints for text that will most accurately reflect + * those of the native windowing system. + * + * @return The rendering hints, or null if they cannot be + * determined. + */ + public static Map getDesktopAntiAliasHints() { + return (Map)Toolkit.getDefaultToolkit(). + getDesktopProperty("awt.font.desktophints"); + } + + + /** + * Returns the color to use for the line underneath a folded region line. + * + * @param textArea The text area. + * @return The color to use. + */ + public static Color getFoldedLineBottomColor(RSyntaxTextArea textArea) { + Color color = Color.gray; + Gutter gutter = RSyntaxUtilities.getGutter(textArea); + if (gutter!=null) { + color = gutter.getFoldIndicatorForeground(); + } + return color; + } + + + /** + * Returns the gutter component of the scroll pane containing a text + * area, if any. + * + * @param textArea The text area. + * @return The gutter, or null if the text area is not in + * an {@link RTextScrollPane}. + * @see RTextScrollPane#getGutter() + */ + public static Gutter getGutter(RTextArea textArea) { + Gutter gutter = null; + Container parent = textArea.getParent(); + if (parent instanceof JViewport) { + parent = parent.getParent(); + if (parent instanceof RTextScrollPane) { + RTextScrollPane sp = (RTextScrollPane)parent; + gutter = sp.getGutter(); // Should always be non-null + } + } + return gutter; + } + + + /** + * Returns the color to use for hyperlink-style components. This method + * will return Color.blue unless it appears that the current + * LookAndFeel uses light text on a dark background, in which case a + * brighter alternative is returned. + * + * @return The color to use for hyperlinks. + * @see #isLightForeground(Color) + */ + public static Color getHyperlinkForeground() { + + // This property is defined by all standard LaFs, even Nimbus (!), + // but you never know what crazy LaFs there are... + Color fg = UIManager.getColor("Label.foreground"); + if (fg==null) { + fg = new JLabel().getForeground(); + } + + return isLightForeground(fg) ? LIGHT_HYPERLINK_FG : Color.blue; + + } + + + /** + * Returns the leading whitespace of a string. + * + * @param text The String to check. + * @return The leading whitespace. + * @see #getLeadingWhitespace(Document, int) + */ + public static String getLeadingWhitespace(String text) { + int count = 0; + int len = text.length(); + while (countoffs is not a valid offset + * in the document. + * @see #getLeadingWhitespace(String) + */ + public static String getLeadingWhitespace(Document doc, int offs) + throws BadLocationException { + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Element elem = root.getElement(line); + int startOffs = elem.getStartOffset(); + int endOffs = elem.getEndOffset() - 1; + String text = doc.getText(startOffs, endOffs-startOffs); + return getLeadingWhitespace(text); + } + + + private static Element getLineElem(Document d, int offs) { + Element map = d.getDefaultRootElement(); + int index = map.getElementIndex(offs); + Element elem = map.getElement(index); + if ((offs>=elem.getStartOffset()) && (offsp0, as this is + * the character where the x-pixel value is 0. + * + * @param textArea The text area containing the text. + * @param s A segment in which to load the line. This is passed in so we + * don't have to reallocate a new Segment for each + * call. + * @param p0 The starting position in the physical line in the document. + * @param p1 The position for which to get the bounding box in the view. + * @param e How to expand tabs. + * @param rect The rectangle whose x- and width-values are changed to + * represent the bounding box of p1. This is reused + * to keep from needlessly reallocating Rectangles. + * @param x0 The x-coordinate (pixel) marking the left-hand border of the + * text. This is useful if the text area has a border, for example. + * @return The bounding box in the view of the character p1. + * @throws BadLocationException If p0 or p1 is + * not a valid location in the specified text area's document. + * @throws IllegalArgumentException If p0 and p1 + * are not on the same line. + */ + public static Rectangle getLineWidthUpTo(RSyntaxTextArea textArea, + Segment s, int p0, int p1, + TabExpander e, Rectangle rect, + int x0) + throws BadLocationException { + + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + + // Ensure p0 and p1 are valid document positions. + if (p0<0) { + throw new BadLocationException("Invalid document position", p0); + } + else if (p1>doc.getLength()) { + throw new BadLocationException("Invalid document position", p1); + } + + // Ensure p0 and p1 are in the same line, and get the start/end + // offsets for that line. + Element map = doc.getDefaultRootElement(); + int lineNum = map.getElementIndex(p0); + // We do ">1" because p1 might be the first position on the next line + // or the last position on the previous one. + // if (lineNum!=map.getElementIndex(p1)) + if (Math.abs(lineNum-map.getElementIndex(p1))>1) { + throw new IllegalArgumentException("p0 and p1 are not on the " + + "same line (" + p0 + ", " + p1 + ")."); + } + + // Get the token list. + Token t = doc.getTokenListForLine(lineNum); + + // Modify the token list 't' to begin at p0 (but still have correct + // token types, etc.), and get the x-location (in pixels) of the + // beginning of this new token list. + TokenSubList subList = TokenUtils.getSubTokenList(t, p0, e, textArea, + 0, TEMP_TOKEN); + t = subList.tokenList; + + rect = t.listOffsetToView(textArea, e, p1, x0, rect); + return rect; + + } + + + /** + * Returns the location of the bracket paired with the one at the current + * caret position. + * + * @param textArea The text area. + * @param input A point to use as the return value. If this is + * null, a new object is created and returned. + * @return A point representing the matched bracket info. The "x" field + * is the offset of the bracket at the caret position (either just + * before or just after the caret), and the "y" field is the offset + * of the matched bracket. Both "x" and "y" will be + * -1 if there isn't a matching bracket (or the caret + * isn't on a bracket). + */ + public static Point getMatchingBracketPosition(RSyntaxTextArea textArea, + Point input) { + + if (input==null) { + input = new Point(); + } + input.setLocation(-1, -1); + + try { + + // Actually position just BEFORE caret. + int caretPosition = textArea.getCaretPosition() - 1; + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + char bracket = 0; + + // If the caret was at offset 0, we can't check "to its left." + if (caretPosition>=0) { + bracket = doc.charAt(caretPosition); + } + + // Try to match a bracket "to the right" of the caret if one + // was not found on the left. + int index = BRACKETS.indexOf(bracket); + if (index==-1 && caretPosition

      + *
    • SwingConstants.WEST + *
    • SwingConstants.EAST + *
    • SwingConstants.NORTH + *
    • SwingConstants.SOUTH + *
    + * @return the location within the model that best represents the next + * location visual position + * @throws BadLocationException if {@code pos} is invalid. + * @throws IllegalArgumentException if direction + * doesn't have one of the legal values above + */ + public static int getNextVisualPositionFrom(int pos, Position.Bias b, + Shape a, int direction, + Position.Bias[] biasRet, View view) + throws BadLocationException { + + RSyntaxTextArea target = (RSyntaxTextArea)view.getContainer(); + biasRet[0] = Position.Bias.Forward; + + // Do we want the "next position" above, below, to the left or right? + switch (direction) { + + case NORTH: + case SOUTH: + if (pos == -1) { + pos = (direction == NORTH) ? + Math.max(0, view.getEndOffset() - 1) : + view.getStartOffset(); + break; + } + Caret c = (target != null) ? target.getCaret() : null; + // YECK! Ideally, the x location from the magic caret + // position would be passed in. + Point mcp; + if (c != null) { + mcp = c.getMagicCaretPosition(); + } + else { + mcp = null; + } + int x; + if (mcp == null) { + Rectangle loc = target.modelToView(pos); + x = (loc == null) ? 0 : loc.x; + } + else { + x = mcp.x; + } + if (direction == NORTH) { + pos = getPositionAbove(target,pos,x,(TabExpander)view); + } + else { + pos = getPositionBelow(target,pos,x,(TabExpander)view); + } + break; + + case WEST: + int endOffs = view.getEndOffset(); + if(pos == -1) { + pos = Math.max(0, endOffs - 1); + } + else { + pos = Math.max(0, pos - 1); + if (target.isCodeFoldingEnabled()) { + int last = pos==endOffs-1 ? target.getLineCount()-1 : + target.getLineOfOffset(pos+1); + int current = target.getLineOfOffset(pos); + if (last!=current) { // If moving up a line... + FoldManager fm = target.getFoldManager(); + if (fm.isLineHidden(current)) { + while (--current>0 && fm.isLineHidden(current)); + pos = target.getLineEndOffset(current) - 1; + } + } + } + } + break; + + case EAST: + if(pos == -1) { + pos = view.getStartOffset(); + } + else { + pos = Math.min(pos + 1, view.getDocument().getLength()); + if (target.isCodeFoldingEnabled()) { + int last = pos==0 ? 0 : target.getLineOfOffset(pos-1); + int current = target.getLineOfOffset(pos); + if (last!=current) { // If moving down a line... + FoldManager fm = target.getFoldManager(); + if (fm.isLineHidden(current)) { + int lineCount = target.getLineCount(); + while (++current0. + * @return The flags. + */ + public static int getPatternFlags(boolean matchCase, int others) { + if (!matchCase) { + others |= Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE; + } + return others; + } + + + /** + * Determines the position in the model that is closest to the given + * view location in the row above. The component given must have a + * size to compute the result. If the component doesn't have a size + * a value of -1 will be returned. + * + * @param c the editor + * @param offs the offset in the document >= 0 + * @param x the X coordinate >= 0 + * @return the position >= 0 if the request can be computed, otherwise + * a value of -1 will be returned. + * @exception BadLocationException if the offset is out of range + */ + public static int getPositionAbove(RSyntaxTextArea c, int offs, + float x, TabExpander e) throws BadLocationException { + + TokenOrientedView tov = (TokenOrientedView)e; + Token token = tov.getTokenListForPhysicalLineAbove(offs); + if (token==null) { + return -1; + } + else if (token.getType()==Token.NULL) { + int line = c.getLineOfOffset(offs); // Sure to be >0 ?? + return c.getLineStartOffset(line-1); + } + + else { + return token.getListOffset(c, e, c.getMargin().left, x); + } + + } + + + /** + * Determines the position in the model that is closest to the given + * view location in the row below. The component given must have a + * size to compute the result. If the component doesn't have a size + * a value of -1 will be returned. + * + * @param c the editor + * @param offs the offset in the document >= 0 + * @param x the X coordinate >= 0 + * @return the position >= 0 if the request can be computed, otherwise + * a value of -1 will be returned. + * @exception BadLocationException if the offset is out of range + */ + public static int getPositionBelow(RSyntaxTextArea c, int offs, + float x, TabExpander e) throws BadLocationException { + + TokenOrientedView tov = (TokenOrientedView)e; + Token token = tov.getTokenListForPhysicalLineBelow(offs); + if (token==null) { + return -1; + } + else if (token.getType()==Token.NULL) { + int line = c.getLineOfOffset(offs); // Sure to be > c.getLineCount()-1 ?? +// return c.getLineStartOffset(line+1); +FoldManager fm = c.getFoldManager(); +line = fm.getVisibleLineBelow(line); +return c.getLineStartOffset(line); + } + + else { + return token.getListOffset(c, e, c.getMargin().left, x); + } + + } + + + /** + * Returns the last non-whitespace, non-comment token, starting with the + * specified line. + * + * @param doc The document. + * @param line The line at which to start looking. + * @return The last non-whitespace, non-comment token, or null + * if there isn't one. + * @see #getNextImportantToken(Token, RSyntaxTextArea, int) + * @see #getPreviousImportantTokenFromOffs(RSyntaxDocument, int) + */ + public static Token getPreviousImportantToken(RSyntaxDocument doc, + int line) { + if (line<0) { + return null; + } + Token t = doc.getTokenListForLine(line); + if (t!=null) { + t = t.getLastNonCommentNonWhitespaceToken(); + if (t!=null) { + return t; + } + } + return getPreviousImportantToken(doc, line-1); + } + + + /** + * Returns the last non-whitespace, non-comment token, before the + * specified offset. + * + * @param doc The document. + * @param offs The ending offset for the search. + * @return The last non-whitespace, non-comment token, or null + * if there isn't one. + * @see #getPreviousImportantToken(RSyntaxDocument, int) + * @see #getNextImportantToken(Token, RSyntaxTextArea, int) + */ + public static Token getPreviousImportantTokenFromOffs( + RSyntaxDocument doc, int offs) { + + Element root = doc.getDefaultRootElement(); + int line = root.getElementIndex(offs); + Token t = doc.getTokenListForLine(line); + + // Check line containing offs + Token target = null; + while (t!=null && t.isPaintable() && !t.containsPosition(offs)) { + if (!t.isCommentOrWhitespace()) { + target = t; + } + t = t.getNextToken(); + } + + // Check previous line(s) + if (target==null) { + target = RSyntaxUtilities.getPreviousImportantToken(doc, line-1); + } + + return target; + + } + + + /** + * Returns the token at the specified offset. + * + * @param textArea The text area. + * @param offset The offset of the token. + * @return The token, or null if the offset is not valid. + * @see #getTokenAtOffset(RSyntaxDocument, int) + * @see #getTokenAtOffset(Token, int) + */ + public static Token getTokenAtOffset(RSyntaxTextArea textArea, + int offset) { + RSyntaxDocument doc = (RSyntaxDocument)textArea.getDocument(); + return RSyntaxUtilities.getTokenAtOffset(doc, offset); + } + + + /** + * Returns the token at the specified offset. + * + * @param doc The document. + * @param offset The offset of the token. + * @return The token, or null if the offset is not valid. + * @see #getTokenAtOffset(RSyntaxTextArea, int) + * @see #getTokenAtOffset(Token, int) + */ + public static Token getTokenAtOffset(RSyntaxDocument doc, + int offset) { + Element root = doc.getDefaultRootElement(); + int lineIndex = root.getElementIndex(offset); + Token t = doc.getTokenListForLine(lineIndex); + return RSyntaxUtilities.getTokenAtOffset(t, offset); + } + + + /** + * Returns the token at the specified index, or null if + * the given offset isn't in this token list's range.
    + * Note that this method does NOT check to see if tokenList + * is null; callers should check for themselves. + * + * @param tokenList The list of tokens in which to search. + * @param offset The offset at which to get the token. + * @return The token at offset, or null if + * none of the tokens are at that offset. + * @see #getTokenAtOffset(RSyntaxTextArea, int) + * @see #getTokenAtOffset(RSyntaxDocument, int) + */ + public static Token getTokenAtOffset(Token tokenList, int offset) { + for (Token t=tokenList; t!=null && t.isPaintable(); t=t.getNextToken()){ + if (t.containsPosition(offset)) { + return t; + } + } + return null; + } + + + /** + * Returns the end of the word at the given offset. + * + * @param textArea The text area. + * @param offs The offset into the text area's content. + * @return The end offset of the word. + * @throws BadLocationException If offs is invalid. + * @see #getWordStart(RSyntaxTextArea, int) + */ + public static int getWordEnd(RSyntaxTextArea textArea, int offs) + throws BadLocationException { + + Document doc = textArea.getDocument(); + int endOffs = textArea.getLineEndOffsetOfCurrentLine(); + int lineEnd = Math.min(endOffs, doc.getLength()); + if (offs == lineEnd) { // End of the line. + return offs; + } + + String s = doc.getText(offs, lineEnd-offs-1); + if (s!=null && s.length()>0) { // Should always be true + int i = 0; + int count = s.length(); + char ch = s.charAt(i); + if (Character.isWhitespace(ch)) { + while (ioffs is invalid. + * @see #getWordEnd(RSyntaxTextArea, int) + */ + public static int getWordStart(RSyntaxTextArea textArea, int offs) + throws BadLocationException { + + Document doc = textArea.getDocument(); + Element line = getLineElem(doc, offs); + if (line == null) { + throw new BadLocationException("No word at " + offs, offs); + } + + int lineStart = line.getStartOffset(); + if (offs==lineStart) { // Start of the line. + return offs; + } + + int endOffs = Math.min(offs+1, doc.getLength()); + String s = doc.getText(lineStart, endOffs-lineStart); + if(s != null && s.length() > 0) { + int i = s.length() - 1; + char ch = s.charAt(i); + if (Character.isWhitespace(ch)) { + while (i>0 && Character.isWhitespace(s.charAt(i-1))) { + i--; + } + offs = lineStart + i; + } + else if (Character.isLetterOrDigit(ch)) { + while (i>0 && Character.isLetterOrDigit(s.charAt(i-1))) { + i--; + } + offs = lineStart + i; + } + + } + + return offs; + + } + + + /** + * Determines the width of the given token list taking tabs + * into consideration. This is implemented in a 1.1 style coordinate + * system where ints are used and 72dpi is assumed.

    + * + * This method also assumes that the passed-in token list begins at + * x-pixel 0 in the view (for tab purposes). + * + * @param tokenList The tokenList list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @return The width of the token list, in pixels. + */ + public static float getTokenListWidth(Token tokenList, + RSyntaxTextArea textArea, + TabExpander e) { + return getTokenListWidth(tokenList, textArea, e, 0); + } + + + /** + * Determines the width of the given token list taking tabs + * into consideration. This is implemented in a 1.1 style coordinate + * system where ints are used and 72dpi is assumed.

    + * + * @param tokenList The token list list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @param x0 The x-pixel coordinate of the start of the token list. + * @return The width of the token list, in pixels. + * @see #getTokenListWidthUpTo + */ + public static float getTokenListWidth(final Token tokenList, + RSyntaxTextArea textArea, + TabExpander e, float x0) { + float width = x0; + for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { + width += t.getWidth(textArea, e, width); + } + return width - x0; + } + + + /** + * Determines the width of the given token list taking tabs into + * consideration and only up to the given index in the document + * (exclusive). + * + * @param tokenList The token list representing the text. + * @param textArea The text area in which this token list resides. + * @param e The tab expander. This value cannot be null. + * @param x0 The x-pixel coordinate of the start of the token list. + * @param upTo The document position at which you want to stop, + * exclusive. If this position is before the starting position + * of the token list, a width of 0 will be + * returned; similarly, if this position comes after the entire + * token list, the width of the entire token list is returned. + * @return The width of the token list, in pixels, up to, but not + * including, the character at position upTo. + * @see #getTokenListWidth + */ + public static float getTokenListWidthUpTo(final Token tokenList, + RSyntaxTextArea textArea, TabExpander e, + float x0, int upTo) { + float width = 0; + for (Token t=tokenList; t!=null&&t.isPaintable(); t=t.getNextToken()) { + if (t.containsPosition(upTo)) { + return width + t.getWidthUpTo(upTo-t.getOffset(), textArea, e, + x0+width); + } + width += t.getWidth(textArea, e, x0+width); + } + return width; + } + + + /** + * Returns whether or not this character is a "bracket" to be matched by + * such programming languages as C, C++, and Java. + * + * @param ch The character to check. + * @return Whether or not the character is a "bracket" - one of '(', ')', + * '[', ']', '{', and '}'. + */ + public static boolean isBracket(char ch) { + // We need the first condition as it might be that ch>255, and thus + // not in our table. '}' is the highest-valued char in the bracket + // set. + return ch<='}' && (DATA_TABLE[ch]&BRACKET_MASK)>0; + } + + + /** + * Returns whether or not a character is a digit (0-9). + * + * @param ch The character to check. + * @return Whether or not the character is a digit. + */ + public static boolean isDigit(char ch) { + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the digit mask). + return ch>='0' && ch<='9'; + } + + + /** + * Returns whether or not this character is a hex character. This method + * accepts both upper- and lower-case letters a-f. + * + * @param ch The character to check. + * @return Whether or not the character is a hex character 0-9, a-f, or + * A-F. + */ + public static boolean isHexCharacter(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). 'f' is the highest-valued + // char that is a valid hex character. + return (ch<='f') && (DATA_TABLE[ch]&HEX_CHARACTER_MASK)>0; + } + + + /** + * Returns whether a character is a Java operator. Note that C and C++ + * operators are the same as Java operators. + * + * @param ch The character to check. + * @return Whether or not the character is a Java operator. + */ + public static boolean isJavaOperator(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). '~' is the highest-valued + // char that is a valid Java operator. + return (ch<='~') && (DATA_TABLE[ch]&JAVA_OPERATOR_MASK)>0; + } + + + /** + * Returns whether a character is a US-ASCII letter (A-Z or a-z). + * + * @param ch The character to check. + * @return Whether or not the character is a US-ASCII letter. + */ + public static boolean isLetter(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). + return (ch<='z') && (DATA_TABLE[ch]&LETTER_MASK)>0; + } + + + /** + * Returns whether or not a character is a US-ASCII letter or a digit. + * + * @param ch The character to check. + * @return Whether or not the character is a US-ASCII letter or a digit. + */ + public static boolean isLetterOrDigit(char ch) { + // We need the first condition as it could be that ch>255 (and thus + // not a valid index into our table). + return (ch<='z') && (DATA_TABLE[ch]&LETTER_OR_DIGIT_MASK)>0; + } + + + /** + * Returns whether the specified color is "light" to use as a foreground. + * Colors that return true indicate that the current Look and + * Feel probably uses light text colors on a dark background. + * + * @param fg The foreground color. + * @return Whether it is a "light" foreground color. + * @see #getHyperlinkForeground() + */ + public static boolean isLightForeground(Color fg) { + return fg.getRed()>0xa0 && fg.getGreen()>0xa0 && fg.getBlue()>0xa0; + } + + + /** + * Returns whether the specified token is a single non-word char (e.g. not + * in [A-Za-z]. This is a HACK to work around the fact that + * many standard token makers return things like semicolons and periods as + * {@link Token#IDENTIFIER}s just to make the syntax highlighting coloring + * look a little better. + * + * @param t The token to check. This cannot be null. + * @return Whether the token is a single non-word char. + */ + public static boolean isNonWordChar(Token t) { + return t.length()==1 && !RSyntaxUtilities.isLetter(t.charAt(0)); + } + + + /** + * Returns whether or not a character is a whitespace character (either + * a space ' ' or tab '\t'). This checks for the Unicode character values + * 0x0020 and 0x0009. + * + * @param ch The character to check. + * @return Whether or not the character is a whitespace character. + */ + public static boolean isWhitespace(char ch) { + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the whitespace mask). + return ch==' ' || ch=='\t'; + } + + + /** + * Repaints the gutter in a text area's scroll pane, if necessary. + * + * @param textArea The text area. + */ + public static void possiblyRepaintGutter(RTextArea textArea) { + Gutter gutter = RSyntaxUtilities.getGutter(textArea); + if (gutter!=null) { + gutter.repaint(); + } + } + + + /** + * Returns whether a regular expression token can follow the specified + * token in JavaScript. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one in + * JavaScript. + */ + public static boolean regexCanFollowInJavaScript(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", "&&", "||" */ + (t.getType()==Token.OPERATOR && + (t.charAt(t.length()-1)=='=' || + t.is(JS_AND) || t.is(JS_OR))) || + t.is(Token.RESERVED_WORD_2, JS_KEYWORD_RETURN); + } + + + /** + * Selects a range of text in a text component. If the new selection is + * outside of the previous viewable rectangle, then the view is centered + * around the new selection. + * + * @param textArea The text component whose selection is to be centered. + * @param range The range to select. + */ + public static void selectAndPossiblyCenter(JTextArea textArea, + DocumentRange range, boolean select) { + + int start = range.getStartOffset(); + int end = range.getEndOffset(); + + boolean foldsExpanded = false; + if (textArea instanceof RSyntaxTextArea) { + RSyntaxTextArea rsta = (RSyntaxTextArea)textArea; + FoldManager fm = rsta.getFoldManager(); + if (fm.isCodeFoldingSupportedAndEnabled()) { + foldsExpanded = fm.ensureOffsetNotInClosedFold(start); + foldsExpanded |= fm.ensureOffsetNotInClosedFold(end); + } + } + + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + + Rectangle r = null; + try { + r = textArea.modelToView(start); + if (r==null) { // Not yet visible; i.e. JUnit tests + return; + } + if (end!=start) { + r = r.union(textArea.modelToView(end)); + } + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + return; + } + + Rectangle visible = textArea.getVisibleRect(); + + // If the new selection is already in the view, don't scroll, + // as that is visually jarring. + if (!foldsExpanded && visible.contains(r)) { + if (select) { + textArea.setSelectionStart(start); + textArea.setSelectionEnd(end); + } + return; + } + + visible.x = r.x - (visible.width - r.width) / 2; + visible.y = r.y - (visible.height - r.height) / 2; + + Rectangle bounds = textArea.getBounds(); + Insets i = textArea.getInsets(); + bounds.x = i.left; + bounds.y = i.top; + bounds.width -= i.left + i.right; + bounds.height -= i.top + i.bottom; + + if (visible.x < bounds.x) { + visible.x = bounds.x; + } + + if (visible.x + visible.width > bounds.x + bounds.width) { + visible.x = bounds.x + bounds.width - visible.width; + } + + if (visible.y < bounds.y) { + visible.y = bounds.y; + } + + if (visible.y + visible.height > bounds.y + bounds.height) { + visible.y = bounds.y + bounds.height - visible.height; + } + + textArea.scrollRectToVisible(visible); + + } + + + /** + * If the character is an upper-case US-ASCII letter, it returns the + * lower-case version of that letter; otherwise, it just returns the + * character. + * + * @param ch The character to lower-case (if it is a US-ASCII upper-case + * character). + * @return The lower-case version of the character. + */ + public static char toLowerCase(char ch) { + // We can logical OR with 32 because A-Z are 65-90 in the ASCII table + // and none of them have the 6th bit (32) set, and a-z are 97-122 in + // the ASCII table, which is 32 over from A-Z. + // We do it this way as we'd need to do two conditions anyway (first + // to check that ch<255 so it can index into our table, then whether + // that table position has the upper-case mask). + if (ch>='A' && ch<='Z') { + return (char)(ch | 0x20); + } + return ch; + } + + + /** + * Creates a regular expression pattern that matches a "wildcard" pattern. + * + * @param wildcard The wildcard pattern. + * @param matchCase Whether the pattern should be case sensitive. + * @param escapeStartChar Whether to escape a starting '^' + * character. + * @return The pattern. + */ + public static Pattern wildcardToPattern(String wildcard, boolean matchCase, + boolean escapeStartChar) { + + int flags = RSyntaxUtilities.getPatternFlags(matchCase, 0); + + StringBuilder sb = new StringBuilder(); + for (int i=0; i0 || escapeStartChar) { + sb.append('\\'); + } + sb.append('^'); + break; + case '\\': + case '.': case '|': + case '+': case '-': + case '$': + case '[': case ']': + case '{': case '}': + case '(': case ')': + sb.append('\\').append(ch); + break; + default: + sb.append(ch); + break; + } + } + + Pattern p; + try { + p = Pattern.compile(sb.toString(), flags); + } catch (PatternSyntaxException pse) { + pse.printStackTrace(); + p = Pattern.compile(".+"); + } + + return p; + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java old mode 100644 new mode 100755 index a78223254..e88f10047 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RTfToText.java @@ -2,237 +2,237 @@ * 07/28/2008 * * RtfToText.java - Returns the plain text version of RTF documents. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; + /** - * Gets the plain text version of RTF documents. - *

    - * - * This is used by RtfTransferable to return the plain text version of the transferable when the receiver - * does not support RTF. - * + * Gets the plain text version of RTF documents.

    + * + * This is used by StyledTextTransferable to return the plain text + * version of the transferable when the receiver does not support RTF. + * * @author Robert Futrell * @version 1.0 */ -class RtfToText { - - private Reader r; - private StringBuffer sb; - private StringBuffer controlWord; - private int blockCount; - private boolean inControlWord; - - /** - * Private constructor. - * - * @param r - * The reader to read RTF text from. - */ - private RtfToText(Reader r) { - this.r = r; - sb = new StringBuffer(); - controlWord = new StringBuffer(); - blockCount = 0; - inControlWord = false; - } - - /** - * Converts the RTF text read from this converter's Reader into plain text. It is the caller's - * responsibility to close the reader after this method is called. - * - * @return The plain text. - * @throws IOException - * If an IO error occurs. - */ - private String convert() throws IOException { - - // Skip over first curly brace as the whole file is in '{' and '}' - int i = r.read(); - if (i != '{') { - throw new IOException("Invalid RTF file"); - } - - while ((i = r.read()) != -1) { - - char ch = (char) i; - switch (ch) { - case '{': - if (inControlWord && controlWord.length() == 0) { // "\{" - sb.append('{'); - controlWord.setLength(0); - inControlWord = false; - } - else { - blockCount++; - } - break; - case '}': - if (inControlWord && controlWord.length() == 0) { // "\}" - sb.append('}'); - controlWord.setLength(0); - inControlWord = false; - } - else { - blockCount--; - } - break; - case '\\': - if (blockCount == 0) { - if (inControlWord) { - if (controlWord.length() == 0) { // "\\" - sb.append('\\'); - controlWord.setLength(0); - inControlWord = false; - } - else { - endControlWord(); - } - } - inControlWord = true; - } - break; - case ' ': - if (blockCount == 0) { - if (inControlWord) { - endControlWord(); - } - else { - sb.append(' '); - } - } - break; - case '\r': - case '\n': - if (blockCount == 0) { - if (inControlWord) { - endControlWord(); - } - // Otherwise, ignore - } - break; - default: - if (blockCount == 0) { - if (inControlWord) { - controlWord.append(ch); - } - else { - sb.append(ch); - } - } - break; - } - - } - - return sb.toString(); - - } - - /** - * Ends a control word. Checks whether it is a common one that affects the plain text output (such as " - * par" or "tab") and updates the text buffer accordingly. - */ - private void endControlWord() { - String word = controlWord.toString(); - if ("par".equals(word)) { - sb.append('\n'); - } - else if ("tab".equals(word)) { - sb.append('\t'); - } - controlWord.setLength(0); - inControlWord = false; - } - - /** - * Converts the contents of the specified byte array representing an RTF document into plain text. - * - * @param rtf - * The byte array representing an RTF document. - * @return The contents of the RTF document, in plain text. - * @throws IOException - * If an IO error occurs. - */ - public static String getPlainText(byte[] rtf) throws IOException { - return getPlainText(new ByteArrayInputStream(rtf)); - } - - /** - * Converts the contents of the specified RTF file to plain text. - * - * @param file - * The RTF file to convert. - * @return The contents of the file, in plain text. - * @throws IOException - * If an IO error occurs. - */ - public static String getPlainText(File file) throws IOException { - return getPlainText(new BufferedReader(new FileReader(file))); - } - - /** - * Converts the contents of the specified input stream to plain text. The input stream will be closed when this - * method returns. - * - * @param in - * The input stream to convert. - * @return The contents of the stream, in plain text. - * @throws IOException - * If an IO error occurs. - */ - public static String getPlainText(InputStream in) throws IOException { - return getPlainText(new InputStreamReader(in, "US-ASCII")); - } - - /** - * Converts the contents of the specified Reader to plain text. - * - * @param r - * The Reader. - * @return The contents of the Reader, in plain text. - * @throws IOException - * If an IO error occurs. - */ - private static String getPlainText(Reader r) throws IOException { - try { - RtfToText converter = new RtfToText(r); - return converter.convert(); - } finally { - r.close(); - } - } - - /** - * Converts the contents of the specified String to plain text. - * - * @param rtf - * A string whose contents represent an RTF document. - * @return The contents of the String, in plain text. - * @throws IOException - * If an IO error occurs. - */ - public static String getPlainText(String rtf) throws IOException { - return getPlainText(new StringReader(rtf)); - } - -} \ No newline at end of file +final class RtfToText { + + private Reader r; + private StringBuilder sb; + private StringBuilder controlWord; + private int blockCount; + private boolean inControlWord; + + + /** + * Private constructor. + * + * @param r The reader to read RTF text from. + */ + private RtfToText(Reader r) { + this.r = r; + sb = new StringBuilder(); + controlWord = new StringBuilder(); + blockCount = 0; + inControlWord = false; + } + + + /** + * Converts the RTF text read from this converter's Reader + * into plain text. It is the caller's responsibility to close the + * reader after this method is called. + * + * @return The plain text. + * @throws IOException If an IO error occurs. + */ + private String convert() throws IOException { + + // Skip over first curly brace as the whole file is in '{' and '}' + int i = r.read(); + if (i!='{') { + throw new IOException("Invalid RTF file"); + } + + while ((i=r.read())!=-1) { + + char ch = (char)i; + switch (ch) { + case '{': + if (inControlWord && controlWord.length()==0) { // "\{" + sb.append('{'); + controlWord.setLength(0); + inControlWord = false; + } + else { + blockCount++; + } + break; + case '}': + if (inControlWord && controlWord.length()==0) { // "\}" + sb.append('}'); + controlWord.setLength(0); + inControlWord = false; + } + else { + blockCount--; + } + break; + case '\\': + if (blockCount==0) { + if (inControlWord) { + if (controlWord.length()==0) { // "\\" + sb.append('\\'); + controlWord.setLength(0); + inControlWord = false; + } + else { + endControlWord(); + inControlWord = true; + } + } + else { + inControlWord = true; + } + } + break; + case ' ': + if (blockCount==0) { + if (inControlWord) { + endControlWord(); + } + else { + sb.append(' '); + } + } + break; + case '\r': + case '\n': + if (blockCount==0) { + if (inControlWord) { + endControlWord(); + } + // Otherwise, ignore + } + break; + default: + if (blockCount==0) { + if (inControlWord) { + controlWord.append(ch); + } + else { + sb.append(ch); + } + } + break; + } + + } + + return sb.toString(); + + } + + + /** + * Ends a control word. Checks whether it is a common one that affects + * the plain text output (such as "par" or "tab") + * and updates the text buffer accordingly. + */ + private void endControlWord() { + String word = controlWord.toString(); + if ("par".equals(word) || "line".equals(word)) { + sb.append('\n'); + } + else if ("tab".equals(word)) { + sb.append('\t'); + } + controlWord.setLength(0); + inControlWord = false; + } + + + /** + * Converts the contents of the specified byte array representing + * an RTF document into plain text. + * + * @param rtf The byte array representing an RTF document. + * @return The contents of the RTF document, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(byte[] rtf) throws IOException { + return getPlainText(new ByteArrayInputStream(rtf)); + } + + + /** + * Converts the contents of the specified RTF file to plain text. + * + * @param file The RTF file to convert. + * @return The contents of the file, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(File file) throws IOException { + return getPlainText(new BufferedReader(new FileReader(file))); + } + + + /** + * Converts the contents of the specified input stream to plain text. + * The input stream will be closed when this method returns. + * + * @param in The input stream to convert. This will be closed when this + * method returns. + * @return The contents of the stream, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(InputStream in) throws IOException { + return getPlainText(new InputStreamReader(in, StandardCharsets.US_ASCII)); + } + + + /** + * Converts the contents of the specified Reader to plain text. + * + * @param r The Reader. This will be closed when this method + * returns. + * @return The contents of the Reader, in plain text. + * @throws IOException If an IO error occurs. + */ + private static String getPlainText(Reader r) throws IOException { + try { + RtfToText converter = new RtfToText(r); + return converter.convert(); + } finally { + r.close(); + } + } + + + /** + * Converts the contents of the specified String to plain text. + * + * @param rtf A string whose contents represent an RTF document. + * @return The contents of the String, in plain text. + * @throws IOException If an IO error occurs. + */ + public static String getPlainText(String rtf) throws IOException { + return getPlainText(new StringReader(rtf)); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java old mode 100644 new mode 100755 index 5b05cfb65..ddef7504e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfGenerator.java @@ -2,515 +2,493 @@ * 07/28/2008 * * RtfGenerator.java - Generates RTF via a simple Java API. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.awt.Color; import java.awt.Font; -import java.awt.GraphicsEnvironment; import java.awt.Toolkit; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; + +import org.fife.ui.rtextarea.RTextArea; + /** - * Generates RTF text via a simple Java API. - *

    - * + * Generates RTF text via a simple Java API.

    + * * The following RTF features are supported: *

      - *
    • Fonts - *
    • Font sizes - *
    • Foreground and background colors - *
    • Bold, italic, and underline + *
    • Fonts + *
    • Font sizes + *
    • Foreground and background colors + *
    • Bold, italic, and underline *
    - * - * The RTF generated isn't really "optimized," but it will do, especially for small amounts of text, such as what's - * common when copy-and-pasting. It tries to be sufficient for the use case of copying syntax highlighted code: + * + * The RTF generated isn't really "optimized," but it will do, especially for + * small amounts of text, such as what's common when copy-and-pasting. It + * tries to be sufficient for the use case of copying syntax highlighted + * code: *
      - *
    • It assumes that tokens changing foreground color often is fairly common. - *
    • It assumes that background highlighting is fairly uncommon. + *
    • It assumes that tokens changing foreground color often is fairly + * common. + *
    • It assumes that background highlighting is fairly uncommon. *
    - * + * * @author Robert Futrell - * @version 1.0 + * @version 1.1 */ public class RtfGenerator { - private List fontList; - private List colorList; - private StringBuffer document; - private boolean lastWasControlWord; - private int lastFontIndex; - private int lastFGIndex; - private boolean lastBold; - private boolean lastItalic; - private int lastFontSize; - private String monospacedFontName; - - /** - * Java2D assumes a 72 dpi screen resolution, but on Windows the screen resolution is either 96 dpi or 120 dpi, - * depending on your font display settings. This is an attempt to make the RTF generated match the size of what's - * displayed in the RSyntaxTextArea. - */ - private int screenRes; - - /** - * The default font size for RTF. This is point size, in half points. - */ - private static final int DEFAULT_FONT_SIZE = 12;// 24; - - /** - * Constructor. - */ - public RtfGenerator() { - fontList = new ArrayList(1); // Usually only 1. - colorList = new ArrayList(1); // Usually only 1. - document = new StringBuffer(); - reset(); - } - - /** - * Adds a newline to the RTF document. - * - * @see #appendToDoc(String, Font, Color, Color) - */ - public void appendNewline() { - document.append("\\par"); - document.append('\n'); // Just for ease of reading RTF. - lastWasControlWord = false; - } - - /** - * Appends styled text to the RTF document being generated. - * - * @param text - * The text to append. - * @param f - * The font of the text. If this is null, the default font is used. - * @param fg - * The foreground of the text. If this is null, the default foreground color is used. - * @param bg - * The background color of the text. If this is null, the default background color is used. - * @see #appendNewline() - */ - public void appendToDoc(String text, Font f, Color fg, Color bg) { - appendToDoc(text, f, fg, bg, false); - } - - /** - * Appends styled text to the RTF document being generated. - * - * @param text - * The text to append. - * @param f - * The font of the text. If this is null, the default font is used. - * @param bg - * The background color of the text. If this is null, the default background color is used. - * @param underline - * Whether the text should be underlined. - * @see #appendNewline() - */ - public void appendToDocNoFG(String text, Font f, Color bg, - boolean underline) { - appendToDoc(text, f, null, bg, underline, false); - } - - /** - * Appends styled text to the RTF document being generated. - * - * @param text - * The text to append. - * @param f - * The font of the text. If this is null, the default font is used. - * @param fg - * The foreground of the text. If this is null, the default foreground color is used. - * @param bg - * The background color of the text. If this is null, the default background color is used. - * @param underline - * Whether the text should be underlined. - * @see #appendNewline() - */ - public void appendToDoc(String text, Font f, Color fg, Color bg, - boolean underline) { - appendToDoc(text, f, fg, bg, underline, true); - } - - /** - * Appends styled text to the RTF document being generated. - * - * @param text - * The text to append. - * @param f - * The font of the text. If this is null, the default font is used. - * @param fg - * The foreground of the text. If this is null, the default foreground color is used. - * @param bg - * The background color of the text. If this is null, the default background color is used. - * @param underline - * Whether the text should be underlined. - * @param setFG - * Whether the foreground specified by fg should be honored (if it is non-null - * ). - * @see #appendNewline() - */ - public void appendToDoc(String text, Font f, Color fg, Color bg, - boolean underline, boolean setFG) { - - if (text != null) { - - // Set font to use, if different from last addition. - int fontIndex = f == null ? 0 : (getFontIndex(fontList, f) + 1); - if (fontIndex != lastFontIndex) { - document.append("\\f").append(fontIndex); - lastFontIndex = fontIndex; - lastWasControlWord = true; - } - - // Set styles to use. - if (f != null) { - int fontSize = fixFontSize(f.getSize2D()); // Half points - if (fontSize != lastFontSize) { - document.append("\\fs").append(fontSize); - lastFontSize = fontSize; - lastWasControlWord = true; - } - if (f.isBold() != lastBold) { - document.append(lastBold ? "\\b0" : "\\b"); - lastBold = !lastBold; - lastWasControlWord = true; - } - if (f.isItalic() != lastItalic) { - document.append(lastItalic ? "\\i0" : "\\i"); - lastItalic = !lastItalic; - lastWasControlWord = true; - } - } - else { // No font specified - assume neither bold nor italic. - if (lastFontSize != DEFAULT_FONT_SIZE) { - document.append("\\fs").append(DEFAULT_FONT_SIZE); - lastFontSize = DEFAULT_FONT_SIZE; - lastWasControlWord = true; - } - if (lastBold) { - document.append("\\b0"); - lastBold = false; - lastWasControlWord = true; - } - if (lastItalic) { - document.append("\\i0"); - lastItalic = false; - lastWasControlWord = true; - } - } - if (underline) { - document.append("\\ul"); - lastWasControlWord = true; - } - - // Set the foreground color. - if (setFG) { - int fgIndex = 0; - if (fg != null) { // null => fg color index 0 - fgIndex = getIndex(colorList, fg) + 1; - } - if (fgIndex != lastFGIndex) { - document.append("\\cf").append(fgIndex); - lastFGIndex = fgIndex; - lastWasControlWord = true; - } - } - - // Set the background color. - if (bg != null) { - int pos = getIndex(colorList, bg); - document.append("\\highlight").append(pos + 1); - lastWasControlWord = true; - } - - if (lastWasControlWord) { - document.append(' '); // Delimiter - lastWasControlWord = false; - } - escapeAndAdd(document, text); - - // Reset everything that was set for this text fragment. - if (bg != null) { - document.append("\\highlight0"); - lastWasControlWord = true; - } - if (underline) { - document.append("\\ul0"); - lastWasControlWord = true; - } - - } - - } - - /** - * Appends some text to a buffer, with special care taken for special characters as defined by the RTF spec: - * - *
      - *
    • All tab characters are replaced with the string "\tab" - *
    • '\', '{' and '}' are changed to "\\", "\{" and "\}" - *
    - * - * @param text - * The text to append (with tab chars substituted). - * @param sb - * The buffer to append to. - */ - private final void escapeAndAdd(StringBuffer sb, String text) { - // TODO: On the move to 1.5 use StringBuffer append() overloads that - // can take a CharSequence and a range of that CharSequence to speed - // things up. - // int last = 0; - int count = text.length(); - for (int i = 0; i < count; i++) { - char ch = text.charAt(i); - switch (ch) { - case '\t': - // Micro-optimization: for syntax highlighting with - // tab indentation, there are often multiple tabs - // back-to-back at the start of lines, so don't put - // spaces between each "\tab". - sb.append("\\tab"); - while ((++i < count) && text.charAt(i) == '\t') { - sb.append("\\tab"); - } - sb.append(' '); - i--; // We read one too far. - break; - case '\\': - case '{': - case '}': - sb.append('\\').append(ch); - break; - default: - sb.append(ch); - break; - } - } - } - - /** - * Returns a font point size adjusted for the current screen resolution. Java2D assumes 72 dpi. On systems with - * larger dpi (Windows, GTK, etc.), font rendering will appear to small if we simply return a Java "Font" object's - * getSize() value. We need to adjust it for the screen resolution. - * - * @param pointSize - * A Java Font's point size, as returned from getSize2D(). - * @return The font point size, adjusted for the current screen resolution. This will allow other applications to - * render fonts the same size as they appear in the Java application. - */ - private int fixFontSize(float pointSize) { - if (screenRes != 72) { // Java2D assumes 72 dpi - pointSize = (int) Math.round(pointSize * screenRes / 72.0); - } - return (int) pointSize; - } - - private String getColorTableRtf() { - // Example: - // "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue255; }" - return IntStream.range(0, colorList.size()).mapToObj(i -> (Color) colorList.get(i)).map(c -> "\\red" + c.getRed() + "\\green" + c.getGreen() + "\\blue" + c.getBlue() + ';').collect(Collectors.joining("", "{\\colortbl ;", "}")); - } - - /** - * Returns the index of the specified font in a list of fonts. This method only checks for a font by its family - * name; its attributes such as bold and italic are ignored. - *

    - * - * If the font is not in the list, it is added, and its new index is returned. - * - * @param list - * The list (possibly) containing the font. - * @param font - * The font to get the index of. - * @return The index of the font. - */ - private static int getFontIndex(List list, Font font) { - String fontName = font.getFamily(); - for (int i = 0; i < list.size(); i++) { - Font font2 = (Font) list.get(i); - if (font2.getFamily().equals(fontName)) { - return i; - } - } - list.add(font); - return list.size() - 1; - } - - private String getFontTableRtf() { - - // Example: - // "{\\fonttbl{\\f0\\fmodern\\fcharset0 Courier;}}" - - // Workaround for text areas using the Java logical font "Monospaced" - // by default. There's no way to know what it's mapped to, so we - // just search for a monospaced font on the system. - String monoFamilyName = getMonospacedFontName(); - - StringBuilder sb = new StringBuilder("{\\fonttbl{\\f0\\fnil\\fcharset0 " + monoFamilyName + ";}"); - for (int i = 0; i < fontList.size(); i++) { - Font f = (Font) fontList.get(i); - String familyName = f.getFamily(); - if (familyName.equals("Monospaced")) { - familyName = monoFamilyName; - } - sb.append("{\\f").append(i + 1).append("\\fnil\\fcharset0 "); - sb.append(familyName).append(";}"); - } - sb.append('}'); - - return sb.toString(); - - } - - /** - * Returns the index of the specified item in a list. If the item is not in the list, it is added, and its new index - * is returned. - * - * @param list - * The list (possibly) containing the item. - * @param item - * The item to get the index of. - * @return The index of the item. - */ - private static int getIndex(List list, Object item) { - int pos = list.indexOf(item); - if (pos == -1) { - list.add(item); - pos = list.size() - 1; - } - return pos; - } - - /** - * Try to pick a monospaced font installed on this system. We try to check for monospaced fonts that are commonly - * installed on different OS's. This information was gleaned from - * http://www.codestyle.org/css/font-family/sampler-Monospace.shtml. - * - * @return The name of a monospaced font. - */ - private String getMonospacedFontName() { - - if (monospacedFontName == null) { - - GraphicsEnvironment ge = GraphicsEnvironment. - getLocalGraphicsEnvironment(); - String[] familyNames = ge.getAvailableFontFamilyNames(); - Arrays.sort(familyNames); - boolean windows = System.getProperty("os.name").toLowerCase(). - indexOf("windows") >= 0; - - // "Monaco" is the "standard" monospaced font on OS X. We'll - // check for it first so on Macs we don't get stuck with the - // uglier Courier New. It'll look funny on Windows though, so - // don't pick it if we're on Windows. - // It's found on Windows 1.76% of the time, OS X 96.73% - // of the time, and UNIX 00.00% (?) of the time. - if (!windows && Arrays.binarySearch(familyNames, "Monaco") >= 0) { - monospacedFontName = "Monaco"; - } - - // "Courier New" is found on Windows 96.48% of the time, - // OS X 92.38% of the time, and UNIX 61.95% of the time. - else if (Arrays.binarySearch(familyNames, "Courier New") >= 0) { - monospacedFontName = "Courier New"; - } - - // "Courier" is found on Windows ??.??% of the time, - // OS X 96.27% of the time, and UNIX 74.04% of the time. - else if (Arrays.binarySearch(familyNames, "Courier") >= 0) { - monospacedFontName = "Courier"; - } - - // "Nimbus Mono L" is on Windows 00.00% (?) of the time, - // OS X 00.00% (?) of the time, but on UNIX 88.79% of the time. - else if (Arrays.binarySearch(familyNames, "Nimbus Mono L") >= 0) { - monospacedFontName = "Nimbus Mono L"; - } - - // "Lucida Sans Typewriter" is on Windows 49.37% of the time, - // OS X 90.43% of the time, and UNIX 00.00% (?) of the time. - else if (Arrays.binarySearch(familyNames, "Lucida Sans Typewriter") >= 0) { - monospacedFontName = "Lucida Sans Typewriter"; - } - - // "Bitstream Vera Sans Mono" is on Windows 29.81% of the time, - // OS X 25.53% of the time, and UNIX 80.71% of the time. - else if (Arrays.binarySearch(familyNames, "Bitstream Vera Sans Mono") >= 0) { - monospacedFontName = "Bitstream Vera Sans Mono"; - } - - // Windows: 34.16% of the time, OS X: 00.00% (?) of the time, - // UNIX: 33.92% of the time. - if (monospacedFontName == null) { - monospacedFontName = "Terminal"; - } - - } - - return monospacedFontName; - - } - - /** - * Returns the RTF document created by this generator. - * - * @return The RTF document, as a String. - */ - public String getRtf() { - return "{" + - // Header - "\\rtf1\\ansi\\ansicpg1252" + - "\\deff0" + // First font in font table is the default - "\\deflang1033" + - "\\viewkind4" + // "Normal" view - "\\uc\\pard\\f0" + - "\\fs20" + // Font size in half-points (default 24) - getFontTableRtf() + '\n' + - getColorTableRtf() + '\n' + - // Content - document + - "}"; - } - - /** - * Resets this generator. All document information and content is cleared. - */ - public void reset() { - fontList.clear(); - colorList.clear(); - document.setLength(0); - lastWasControlWord = false; - lastFontIndex = 0; - lastFGIndex = 0; - lastBold = false; - lastItalic = false; - lastFontSize = DEFAULT_FONT_SIZE; - screenRes = Toolkit.getDefaultToolkit().getScreenResolution(); - } - -} \ No newline at end of file + private Color mainBG; + private List fontList; + private List colorList; + private StringBuilder document; + private boolean lastWasControlWord; + private int lastFontIndex; + private int lastFGIndex; + private boolean lastBold; + private boolean lastItalic; + private int lastFontSize; + + /** + * Java2D assumes a 72 dpi screen resolution, but on Windows the screen + * resolution is either 96 dpi or 120 dpi, depending on your font display + * settings. This is an attempt to make the RTF generated match the + * size of what's displayed in the RSyntaxTextArea. + */ + private int screenRes; + + /** + * The default font size for RTF. This is point size, in half + * points. + */ + private static final int DEFAULT_FONT_SIZE = 12;//24; + + + /** + * Constructor. + */ + public RtfGenerator(Color mainBG) { + this.mainBG = mainBG; + fontList = new ArrayList<>(1); // Usually only 1. + colorList = new ArrayList<>(1); // Usually only 1. + document = new StringBuilder(); + reset(); + } + + + /** + * Adds a newline to the RTF document. + * + * @see #appendToDoc(String, Font, Color, Color) + */ + public void appendNewline() { + document.append("\\line"); + document.append('\n'); // Just for ease of reading RTF. + lastWasControlWord = false; + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg) { + appendToDoc(text, f, fg, bg, false); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @see #appendNewline() + */ + public void appendToDocNoFG(String text, Font f, Color bg, + boolean underline) { + appendToDoc(text, f, null, bg, underline, false); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg, + boolean underline) { + appendToDoc(text, f, fg, bg, underline, true); + } + + + /** + * Appends styled text to the RTF document being generated. + * + * @param text The text to append. + * @param f The font of the text. If this is null, the + * default font is used. + * @param fg The foreground of the text. If this is null, + * the default foreground color is used. + * @param bg The background color of the text. If this is + * null, the default background color is used. + * @param underline Whether the text should be underlined. + * @param setFG Whether the foreground specified by fg should + * be honored (if it is non-null). + * @see #appendNewline() + */ + public void appendToDoc(String text, Font f, Color fg, Color bg, + boolean underline, boolean setFG) { + + if (text!=null) { + + // Set font to use, if different from last addition. + int fontIndex = f==null ? 0 : (getFontIndex(fontList, f)+1); + if (fontIndex!=lastFontIndex) { + document.append("\\f").append(fontIndex); + lastFontIndex = fontIndex; + lastWasControlWord = true; + } + + // Set styles to use. + if (f!=null) { + int fontSize = fixFontSize(f.getSize2D()*2); // Half points! + if (fontSize!=lastFontSize) { + document.append("\\fs").append(fontSize); + lastFontSize = fontSize; + lastWasControlWord = true; + } + if (f.isBold()!=lastBold) { + document.append(lastBold ? "\\b0" : "\\b"); + lastBold = !lastBold; + lastWasControlWord = true; + } + if (f.isItalic()!=lastItalic) { + document.append(lastItalic ? "\\i0" : "\\i"); + lastItalic = !lastItalic; + lastWasControlWord = true; + } + } + else { // No font specified - assume neither bold nor italic. + if (lastFontSize!=DEFAULT_FONT_SIZE) { + document.append("\\fs").append(DEFAULT_FONT_SIZE); + lastFontSize = DEFAULT_FONT_SIZE; + lastWasControlWord = true; + } + if (lastBold) { + document.append("\\b0"); + lastBold = false; + lastWasControlWord = true; + } + if (lastItalic) { + document.append("\\i0"); + lastItalic = false; + lastWasControlWord = true; + } + } + if (underline) { + document.append("\\ul"); + lastWasControlWord = true; + } + + // Set the foreground color. + if (setFG) { + int fgIndex = 0; + if (fg!=null) { // null => fg color index 0 + fgIndex = getColorIndex(colorList, fg)+1; + } + if (fgIndex!=lastFGIndex) { + document.append("\\cf").append(fgIndex); + lastFGIndex = fgIndex; + lastWasControlWord = true; + } + } + + // Set the background color. + if (bg!=null) { + int pos = getColorIndex(colorList, bg); + document.append("\\highlight").append(pos+1); + lastWasControlWord = true; + } + + if (lastWasControlWord) { + document.append(' '); // Delimiter + lastWasControlWord = false; + } + escapeAndAdd(document, text); + + // Reset everything that was set for this text fragment. + if (bg!=null) { + document.append("\\highlight0"); + lastWasControlWord = true; + } + if (underline) { + document.append("\\ul0"); + lastWasControlWord = true; + } + + } + + } + + + /** + * Appends some text to a buffer, with special care taken for special + * characters as defined by the RTF spec. + * + *

      + *
    • All tab characters are replaced with the string + * "\tab" + *
    • '\', '{' and '}' are changed to "\\", "\{" and "\}" + *
    + * + * @param text The text to append (with tab chars substituted). + * @param sb The buffer to append to. + */ + private void escapeAndAdd(StringBuilder sb, String text) { + int count = text.length(); + for (int i=0; i + * + * Java2D assumes 72 dpi. On systems with larger dpi (Windows, GTK, etc.), + * font rendering will appear too small if we simply return a Java "Font" + * object's getSize() value. We need to adjust it for the screen + * resolution. + * + * @param pointSize A Java Font's point size, as returned from + * getSize2D(). + * @return The font point size, adjusted for the current screen resolution. + * This will allow other applications to render fonts the same + * size as they appear in the Java application. + */ + private int fixFontSize(float pointSize) { + if (screenRes!=72) { // Java2D assumes 72 dpi + pointSize = Math.round(pointSize*72f/screenRes); + } + return (int)pointSize; + } + + + /** + * Returns the index of the specified item in a list. If the item + * is not in the list, it is added, and its new index is returned. + * + * @param list The list (possibly) containing the item. + * @param item The item to get the index of. + * @return The index of the item. + */ + private static int getColorIndex(List list, Color item) { + int pos = list.indexOf(item); + if (pos==-1) { + list.add(item); + pos = list.size()-1; + } + return pos; + } + + + private String getColorTableRtf() { + + // Example: + // "{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green0\\blue255; }" + + StringBuilder sb = new StringBuilder(); + + sb.append("{\\colortbl ;"); + for (Color c : colorList) { + sb.append("\\red").append(c.getRed()); + sb.append("\\green").append(c.getGreen()); + sb.append("\\blue").append(c.getBlue()); + sb.append(';'); + } + sb.append("}"); + + return sb.toString(); + + } + + + /** + * Returns the index of the specified font in a list of fonts. This + * method only checks for a font by its family name; its attributes such + * as bold and italic are ignored.

    + * + * If the font is not in the list, it is added, and its new index is + * returned. + * + * @param list The list (possibly) containing the font. + * @param font The font to get the index of. + * @return The index of the font. + */ + private static int getFontIndex(List list, Font font) { + String fontName = font.getFamily(); + for (int i=0; iString. + */ + public String getRtf() { + + // Add background to the color table before adding it to our buffer + int mainBGIndex = getColorIndex(colorList, mainBG); + + StringBuilder sb = new StringBuilder(); + sb.append("{"); + + // Header + sb.append("\\rtf1\\ansi\\ansicpg1252"); + sb.append("\\deff0"); // First font in font table is the default + sb.append("\\deflang1033"); + sb.append("\\viewkind4"); // "Normal" view + sb.append("\\uc\\pard\\f0"); + sb.append("\\fs20"); // Font size in half-points (default 24) + sb.append(getFontTableRtf()).append('\n'); + sb.append(getColorTableRtf()).append('\n'); + + // Content + int bgIndex = mainBGIndex + 1; + sb.append("\\cb").append(bgIndex).append(' '); + lastWasControlWord = true; + if (document.length() > 0) { + document.append("\\line"); // Forced line break + } + sb.append(document); + + sb.append("}"); + + //System.err.println("*** " + sb.length()); + return sb.toString(); + + } + + + /** + * Resets this generator. All document information and content is + * cleared. + */ + public void reset() { + fontList.clear(); + colorList.clear(); + document.setLength(0); + lastWasControlWord = false; + lastFontIndex = 0; + lastFGIndex = 0; + lastBold = false; + lastItalic = false; + lastFontSize = DEFAULT_FONT_SIZE; + screenRes = Toolkit.getDefaultToolkit().getScreenResolution(); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java deleted file mode 100644 index a4e0e587d..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/RtfTransferable.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 07/28/2008 - * - * RtfTransferable.java - Used during drag-and-drop to represent RTF text. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -import java.awt.datatransfer.*; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.StringReader; -import java.util.stream.IntStream; - -/** - * Object used during copy/paste and DnD operations to represent RTF text. It can return the text being moved as either - * RTF or plain text. This class is basically the same as java.awt.datatransfer.StringSelection, except - * that it can also return the text as RTF. - * - * @author Robert Futrell - * @version 1.0 - */ -class RtfTransferable implements Transferable { - - /** - * The RTF data, in bytes (the RTF is 7-bit ascii). - */ - private byte[] data; - - /** - * The "flavors" the text can be returned as. - */ - private final DataFlavor[] FLAVORS = { - new DataFlavor("text/rtf", "RTF"), - DataFlavor.stringFlavor, - DataFlavor.plainTextFlavor // deprecated - }; - - /** - * Constructor. - * - * @param data - * The RTF data. - */ - public RtfTransferable(byte[] data) { - this.data = data; - } - - public Object getTransferData(DataFlavor flavor) - throws UnsupportedFlavorException, IOException { - if (flavor.equals(FLAVORS[0])) { // RTF - return new ByteArrayInputStream(data == null ? new byte[0] : data); - } - else if (flavor.equals(FLAVORS[1])) { // stringFlavor - return data == null ? "" : RtfToText.getPlainText(data); - } - else if (flavor.equals(FLAVORS[2])) { // plainTextFlavor (deprecated) - String text = ""; // Valid if data==null - if (data != null) { - text = RtfToText.getPlainText(data); - } - return new StringReader(text); - } - else { - throw new UnsupportedFlavorException(flavor); - } - } - - public DataFlavor[] getTransferDataFlavors() { - return (DataFlavor[]) FLAVORS.clone(); - } - - public boolean isDataFlavorSupported(DataFlavor flavor) { - return IntStream.range(0, FLAVORS.length).anyMatch(i -> flavor.equals(FLAVORS[i])); - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SelectRegionLinkGeneratorResult.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SelectRegionLinkGeneratorResult.java new file mode 100755 index 000000000..26ee092dc --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SelectRegionLinkGeneratorResult.java @@ -0,0 +1,61 @@ +/* + * 02/16/2012 + * + * Copyright (C) 2013 Robert Futrell + * robert_futrell at users.sourceforge.net + * http://fifesoft.com/rsyntaxtextarea + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.event.HyperlinkEvent; + + +/** + * A link generator result that selects a region of text in the text area. + * This will typically be used by IDE-style applications, to provide support + * for "linking" the use of a variable in a document to its declaration. + * + * @author Robert Futrell + * @version 1.0 + * @see LinkGenerator + */ +public class SelectRegionLinkGeneratorResult implements LinkGeneratorResult { + + private RSyntaxTextArea textArea; + private int sourceOffset; + private int selStart; + private int selEnd; + + + public SelectRegionLinkGeneratorResult(RSyntaxTextArea textArea, + int sourceOffset, int selStart, int selEnd) { + this.textArea = textArea; + this.sourceOffset = sourceOffset; + this.selStart = selStart; + this.selEnd = selEnd; + } + + + /** + * Selects the text in the text area. + */ + @Override + public HyperlinkEvent execute() { + textArea.select(selStart, selEnd); + return null; + } + + + /** + * {@inheritDoc} + */ + @Override + public int getSourceOffset() { + return sourceOffset; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java old mode 100644 new mode 100755 index 5b7b2718f..05c5bf551 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SquiggleUnderlineHighlightPainter.java @@ -4,23 +4,9 @@ * SquiggleUnderlineHighlightPainter.java - Highlighter that draws a squiggle * underline under "highlighted" text, similar to error markers in Microsoft * Visual Studio or Eclipse. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -33,102 +19,104 @@ import javax.swing.text.Position; import javax.swing.text.View; +import org.fife.ui.rtextarea.ChangeableHighlightPainter; + + /** - * Highlight painter that paints a squiggly underline underneath text, similar to what popular IDE's such as Visual - * Studio and Eclipse do to indicate errors, warnings, etc. - *

    - * + * Highlight painter that paints a squiggly underline underneath text, similar + * to what popular IDE's such as Visual Studio and Eclipse do to indicate + * errors, warnings, etc.

    + * * This class must be used as a LayerPainter. - * + * * @author Robert Futrell * @version 1.0 */ public class SquiggleUnderlineHighlightPainter - extends ChangeableColorHighlightPainter { - - private static final int AMT = 2; - - /** - * Constructor. - * - * @param color - * The color of the squiggle. This cannot be null. - */ - public SquiggleUnderlineHighlightPainter(Color color) { - super(color); - setColor(color); - } - - /** - * Paints a portion of a highlight. - * - * @param g - * the graphics context - * @param offs0 - * the starting model offset >= 0 - * @param offs1 - * the ending model offset >= offs1 - * @param bounds - * the bounding box of the view, which is not necessarily the region to paint. - * @param c - * the editor - * @param view - * View painting for - * @return region drawing occurred in - */ - public Shape paintLayer(Graphics g, int offs0, int offs1, - Shape bounds, JTextComponent c, View view) { - - g.setColor(getColor()); - - if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { - // Contained in view, can just use bounds. - Rectangle alloc; - if (bounds instanceof Rectangle) - alloc = (Rectangle) bounds; - else - alloc = bounds.getBounds(); - paintSquiggle(g, alloc); - return alloc; - } - - // Otherwise, should only render part of View. - try { - // --- determine locations --- - Shape shape = view.modelToView(offs0, Position.Bias.Forward, - offs1, Position.Bias.Backward, - bounds); - Rectangle r = (shape instanceof Rectangle) ? - (Rectangle) shape : shape.getBounds(); - paintSquiggle(g, r); - return r; - } catch (BadLocationException e) { - e.printStackTrace(); // can't render - } - - // Only if exception - return null; - - } - - /** - * Paints a squiggle underneath text in the specified rectangle. - * - * @param g - * The graphics context with which to paint. - * @param r - * The rectangle containing the text. - */ - protected void paintSquiggle(Graphics g, Rectangle r) { - int x = r.x; - int y = r.y + r.height - 1; - int delta = -AMT; - while (x < r.x + r.width) { - g.drawLine(x, y, x + AMT, y + delta); - y += delta; - delta = -delta; - x += AMT; - } - } - -} \ No newline at end of file + extends ChangeableHighlightPainter { + + private static final int AMT = 2; + + /** + * Constructor. + * + * @param color The color of the squiggle. This cannot be + * null. + */ + public SquiggleUnderlineHighlightPainter(Color color) { + super(color); + setPaint(color); + } + + + /** + * Paints a portion of a highlight. + * + * @param g the graphics context + * @param offs0 the starting model offset >= 0 + * @param offs1 the ending model offset >= offs1 + * @param bounds the bounding box of the view, which is not + * necessarily the region to paint. + * @param c the editor + * @param view View painting for + * @return region drawing occurred in + */ + @Override + public Shape paintLayer(Graphics g, int offs0, int offs1, + Shape bounds, JTextComponent c, View view) { + + g.setColor((Color)getPaint()); + + if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { + // Contained in view, can just use bounds. + Rectangle alloc; + if (bounds instanceof Rectangle) { + alloc = (Rectangle)bounds; + } + else { + alloc = bounds.getBounds(); + } + paintSquiggle(g, alloc); + return alloc; + } + + // Otherwise, should only render part of View. + try { + // --- determine locations --- + Shape shape = view.modelToView(offs0, Position.Bias.Forward, + offs1,Position.Bias.Backward, + bounds); + Rectangle r = (shape instanceof Rectangle) ? + (Rectangle)shape : shape.getBounds(); + paintSquiggle(g, r); + return r; + } catch (BadLocationException e) { + e.printStackTrace(); // can't render + } + + // Only if exception + return null; + + } + + + /** + * Paints a squiggle underneath text in the specified rectangle. + * + * @param g The graphics context with which to paint. + * @param r The rectangle containing the text. + */ + protected void paintSquiggle(Graphics g, Rectangle r) { + int x = r.x; + int y = r.y + r.height - AMT; + int delta = -AMT; + while (xRSyntaxTextArea has a - * corresponding Style; this Style tells us the following things: - * + * The color and style information for a token type. Each token type in an + * RSyntaxTextArea has a corresponding Style; this + * Style tells us the following things: + * *

      - *
    • What foreground color to use for tokens of this type.
    • - *
    • What background color to use.
    • - *
    • The font to use.
    • - *
    • Whether the token should be underlined.
    • + *
    • What foreground color to use for tokens of this type.
    • + *
    • What background color to use.
    • + *
    • The font to use.
    • + *
    • Whether the token should be underlined.
    • *
    - * + * * @author Robert Futrell * @version 0.6 */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) public class Style implements Cloneable { - public static final Color DEFAULT_FOREGROUND = Color.BLACK; - public static final Color DEFAULT_BACKGROUND = null; - public static final Font DEFAULT_FONT = null; - - public Color foreground; - public Color background; - public boolean underline; - public Font font; - - FontMetrics fontMetrics; - - /** - * Creates a new syntax scheme defaulting to black foreground, no background, and no styling. - */ - public Style() { - this(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); - } - - /** - * Creates a new syntax scheme with the specified colors and no styling. - * - * @param fg - * The foreground color to use. - * @param bg - * The background color to use. - */ - public Style(Color fg, Color bg) { - this(fg, bg, DEFAULT_FONT); - } - - /** - * Creates a new syntax scheme. - * - * @param fg - * The foreground color to use. - * @param bg - * The background color to use. - * @param font - * The font for this syntax scheme. - */ - public Style(Color fg, Color bg, Font font) { - this(fg, bg, font, false); - } - - /** - * Creates a new syntax scheme. - * - * @param fg - * The foreground color to use. - * @param bg - * The background color to use. - * @param font - * The font for this syntax scheme. - * @param underline - * Whether or not to underline tokens with this style. - */ - public Style(Color fg, Color bg, Font font, boolean underline) { - foreground = fg; - background = bg; - this.font = font; - this.underline = underline; - this.fontMetrics = font == null ? null : - new JPanel().getFontMetrics(font); // Default, no rendering hints! - } - - /** - * Returns whether or not two (possibly null) objects are equal. - */ - private boolean areEqual(Object o1, Object o2) { - return (o1 == null && o2 == null) || (o1 != null && o1.equals(o2)); - } - - /** - * Returns a deep copy of this object. - * - * @return The copy. - */ - public Object clone() { - Style clone = null; - try { - clone = (Style) super.clone(); - } catch (CloneNotSupportedException cnse) { // Never happens - cnse.printStackTrace(); - return null; - } - clone.foreground = foreground; - clone.background = background; - clone.font = font; - clone.underline = underline; - clone.fontMetrics = fontMetrics; - return clone; - } - - /** - * Returns whether or not two syntax schemes are equal. - * - * @param o2 - * The object with which to compare this syntax scheme. - * @return Whether or not these two syntax schemes represent the same scheme. - */ - public boolean equals(Object o2) { - if (o2 instanceof Style) { - Style ss2 = (Style) o2; - if (this.underline == ss2.underline && - areEqual(foreground, ss2.foreground) && - areEqual(background, ss2.background) && - areEqual(font, ss2.font) && - areEqual(fontMetrics, ss2.fontMetrics)) - return true; - } - return false; - } - - /** - * Computes the hash code to use when adding this syntax scheme to hash tables. - *

    - * - * This method is implemented, since {@link #equals(Object)} is implemented, to keep FindBugs happy. - * - * @return The hash code. - */ - public int hashCode() { - int hashCode = underline ? 1 : 0; - if (foreground != null) { - hashCode ^= foreground.hashCode(); - } - if (background != null) { - hashCode ^= background.hashCode(); - } - return hashCode; - } - - /** - * Returns a string representation of this style. - * - * @return A string representation of this style. - */ - public String toString() { - return "[Style: foreground: " + foreground + - ", background: " + background + ", underline: " + - underline + ", font: " + font + "]"; - } - -} \ No newline at end of file + public static final Color DEFAULT_FOREGROUND = Color.BLACK; + public static final Color DEFAULT_BACKGROUND = null; + public static final Font DEFAULT_FONT = null; + + public Color foreground; + public Color background; + public boolean underline; + public Font font; + + public FontMetrics fontMetrics; + + + /** + * Creates a new style defaulting to black foreground, no + * background, and no styling. + */ + public Style() { + this(DEFAULT_FOREGROUND); + } + + + /** + * Creates a new style with the specified foreground and no styling. + * + * @param fg The foreground color to use. + */ + public Style(Color fg) { + this(fg, DEFAULT_BACKGROUND); + } + + + /** + * Creates a new style with the specified colors and no styling. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + */ + public Style(Color fg, Color bg) { + this(fg, bg, DEFAULT_FONT); + } + + + /** + * Creates a new style. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + * @param font The font for this syntax scheme. + */ + public Style(Color fg, Color bg, Font font) { + this(fg, bg, font, false); + } + + + /** + * Creates a new style. + * + * @param fg The foreground color to use. + * @param bg The background color to use. + * @param font The font for this syntax scheme. + * @param underline Whether or not to underline tokens with this style. + */ + public Style(Color fg, Color bg, Font font, boolean underline) { + foreground = fg; + background = bg; + this.font = font; + this.underline = underline; + this.fontMetrics = font==null ? null : + new JPanel().getFontMetrics(font); // Default, no rendering hints! + } + + + /** + * Returns whether or not two (possibly null) objects are + * equal. + */ + private boolean areEqual(Object o1, Object o2) { + return (o1==null && o2==null) || (o1!=null && o1.equals(o2)); + } + + + /** + * Returns a deep copy of this object. + * + * @return The copy. + */ + @Override + public Object clone() { + Style clone = null; + try { + clone = (Style)super.clone(); + } catch (CloneNotSupportedException cnse) { // Never happens + cnse.printStackTrace(); + return null; + } + clone.foreground = foreground; + clone.background = background; + clone.font = font; + clone.underline = underline; + clone.fontMetrics = fontMetrics; + return clone; + } + + + /** + * Returns whether or not two syntax schemes are equal. + * + * @param o2 The object with which to compare this syntax scheme. + * @return Whether or not these two syntax schemes represent the same + * scheme. + */ + @Override + public boolean equals(Object o2) { + if (o2 instanceof Style) { + Style ss2 = (Style)o2; + if (this.underline==ss2.underline && + areEqual(foreground, ss2.foreground) && + areEqual(background, ss2.background) && + areEqual(font, ss2.font) && + areEqual(fontMetrics, ss2.fontMetrics)) { + return true; + } + } + return false; + } + + + /** + * Computes the hash code to use when adding this syntax scheme to + * hash tables.

    + * + * This method is implemented, since {@link #equals(Object)} is implemented, + * to keep FindBugs happy. + * + * @return The hash code. + */ + @Override + public int hashCode() { + int hashCode = underline ? 1 : 0; + if (foreground!=null) { + hashCode ^= foreground.hashCode(); + } + if (background!=null) { + hashCode ^= background.hashCode(); + } + return hashCode; + } + + + /** + * Returns a string representation of this style. + * + * @return A string representation of this style. + */ + @Override + public String toString() { + return "[Style: foreground: " + foreground + + ", background: " + background + ", underline: " + + underline + ", font: " + font + "]"; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/StyledTextTransferable.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/StyledTextTransferable.java new file mode 100644 index 000000000..48d16045f --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/StyledTextTransferable.java @@ -0,0 +1,110 @@ +/* + * 07/28/2008 + * + * StyledTextTransferable.java - Used during drag-and-drop to represent RTF text. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.StringReader; + + +/** + * Object used during copy/paste and DnD operations to represent styled text. + * It can return the text being moved as HTML, RTF or plain text. This + * class is basically the same as + * java.awt.datatransfer.StringSelection, except that it can also + * return the text in a couple of styled text formats. + * + * @author Robert Futrell + * @version 1.0 + */ +class StyledTextTransferable implements Transferable { + + /** + * The transferred text, as HTML. + */ + private String html; + + /** + * The RTF data, in bytes (the RTF is 7-bit ascii). + */ + private byte[] rtfBytes; + + + /** + * The "flavors" the text can be returned as. + */ + private static final DataFlavor[] FLAVORS = { + DataFlavor.fragmentHtmlFlavor, + new DataFlavor("text/rtf", "RTF"), + DataFlavor.stringFlavor, + DataFlavor.plainTextFlavor // deprecated + }; + + + /** + * Constructor. + * + * @param html The transferred text, as HTML. + * @param rtfBytes The transferred text, as RTF bytes. + */ + StyledTextTransferable(String html, byte[] rtfBytes) { + this.html = html; + this.rtfBytes = rtfBytes; + } + + + @Override + public Object getTransferData(DataFlavor flavor) + throws UnsupportedFlavorException, IOException { + + if (flavor.equals(FLAVORS[0])) { // HTML + return html; + } + + else if (flavor.equals(FLAVORS[1])) { // RTF + return new ByteArrayInputStream(rtfBytes ==null ? new byte[0] : rtfBytes); + } + + else if (flavor.equals(FLAVORS[2])) { // stringFlavor + return rtfBytes ==null ? "" : RtfToText.getPlainText(rtfBytes); + } + + else if (flavor.equals(FLAVORS[3])) { // plainTextFlavor (deprecated) + String text = ""; // Valid if data==null + if (rtfBytes !=null) { + text = RtfToText.getPlainText(rtfBytes); + } + return new StringReader(text); + } + + throw new UnsupportedFlavorException(flavor); + } + + + @Override + public DataFlavor[] getTransferDataFlavors() { + return FLAVORS.clone(); + } + + + @Override + public boolean isDataFlavorSupported(DataFlavor flavor) { + for (DataFlavor flavor1 : FLAVORS) { + if (flavor.equals(flavor1)) { + return true; + } + } + return false; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java old mode 100644 new mode 100755 index 23c162066..e0ce8330f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxConstants.java @@ -2,199 +2,325 @@ * 03/08/2004 * * SyntaxConstants.java - Constants used by RSyntaxTextArea and friends. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; + /** - * Constants that define the different programming languages understood by RSyntaxTextArea. These constants - * are the values you can pass to {@link RSyntaxTextArea#setSyntaxEditingStyle(String)} to get syntax highlighting. - *

    - * - * By default, all RSyntaxTextAreas can render all of these languages, but this can be changed (the list - * can be augmented or completely overwritten) on a per-text area basis. What languages can be rendered is actually - * managed by the {@link TokenMakerFactory} installed on the text area's {@link RSyntaxDocument}. By default, all - * RSyntaxDocumenets have a factory installed capable of handling all of these languages. - * + * Constants that define the different programming languages understood by + * RSyntaxTextArea. These constants are the values you can pass + * to {@link RSyntaxTextArea#setSyntaxEditingStyle(String)} to get syntax + * highlighting.

    + * + * By default, all RSyntaxTextAreas can render all of these + * languages, but this can be changed (the list can be augmented or completely + * overwritten) on a per-text area basis. What languages can be rendered is + * actually managed by the {@link TokenMakerFactory} installed on the text + * area's {@link RSyntaxDocument}. By default, all + * RSyntaxDocumenets have a factory installed capable of handling + * all of these languages. + * * @author Robert Futrell * @version 1.0 */ public interface SyntaxConstants { - /** - * Style meaning don't syntax highlight anything. - */ - public static final String SYNTAX_STYLE_NONE = "text/plain"; - - /** - * Style for highlighting ActionScript. - */ - public static final String SYNTAX_STYLE_ACTIONSCRIPT = "text/actionscript"; - - /** - * Style for highlighting x86 assembler. - */ - public static final String SYNTAX_STYLE_ASSEMBLER_X86 = "text/asm"; - - /** - * Style for highlighting BBCode. - */ - public static final String SYNTAX_STYLE_BBCODE = "text/bbcode"; - - /** - * Style for highlighting C. - */ - public static final String SYNTAX_STYLE_C = "text/c"; - - /** - * Style for highlighting Clojure. - */ - public static final String SYNTAX_STYLE_CLOJURE = "text/clojure"; - - /** - * Style for highlighting C++. - */ - public static final String SYNTAX_STYLE_CPLUSPLUS = "text/cpp"; - - /** - * Style for highlighting C#. - */ - public static final String SYNTAX_STYLE_CSHARP = "text/cs"; - - /** - * Style for highlighting CSS. - */ - public static final String SYNTAX_STYLE_CSS = "text/css"; - - /** - * Style for highlighting Delphi/Pascal. - */ - public static final String SYNTAX_STYLE_DELPHI = "text/delphi"; - - /** - * Style for highlighting Fortran. - */ - public static final String SYNTAX_STYLE_FORTRAN = "text/fortran"; - - /** - * Style for highlighting Groovy. - */ - public static final String SYNTAX_STYLE_GROOVY = "text/groovy"; - - /** - * Style for highlighting HTML. - */ - public static final String SYNTAX_STYLE_HTML = "text/html"; - - /** - * Style for highlighting Java. - */ - public static final String SYNTAX_STYLE_JAVA = "text/java"; - - /** - * Style for highlighting JavaScript. - */ - public static final String SYNTAX_STYLE_JAVASCRIPT = "text/javascript"; - - /** - * Style for highlighting JSP. - */ - public static final String SYNTAX_STYLE_JSP = "text/jsp"; - - /** - * Style for highlighting Lisp. - */ - public static final String SYNTAX_STYLE_LISP = "text/lisp"; - - /** - * Style for highlighting Lua. - */ - public static final String SYNTAX_STYLE_LUA = "text/lua"; - - /** - * Style for highlighting makefiles. - */ - public static final String SYNTAX_STYLE_MAKEFILE = "text/makefile"; - - /** - * Style for highlighting MXML. - */ - public static final String SYNTAX_STYLE_MXML = "text/mxml"; - - /** - * Style for highlighting Perl. - */ - public static final String SYNTAX_STYLE_PERL = "text/perl"; - - /** - * Style for highlighting PHP. - */ - public static final String SYNTAX_STYLE_PHP = "text/php"; - - /** - * Style for highlighting properties files. - */ - public static final String SYNTAX_STYLE_PROPERTIES_FILE = "text/properties"; - - /** - * Style for highlighting Python. - */ - public static final String SYNTAX_STYLE_PYTHON = "text/python"; - - /** - * Style for highlighting Ruby. - */ - public static final String SYNTAX_STYLE_RUBY = "text/ruby"; - - /** - * Style for highlighting SAS keywords. - */ - public static final String SYNTAX_STYLE_SAS = "text/sas"; - - /** - * Style for highlighting Scala. - */ - public static final String SYNTAX_STYLE_SCALA = "text/scala"; - - /** - * Style for highlighting SQL. - */ - public static final String SYNTAX_STYLE_SQL = "text/sql"; - - /** - * Style for highlighting Tcl. - */ - public static final String SYNTAX_STYLE_TCL = "text/tcl"; - - /** - * Style for highlighting UNIX shell keywords. - */ - public static final String SYNTAX_STYLE_UNIX_SHELL = "text/unix"; - - /** - * Style for highlighting Windows batch files. - */ - public static final String SYNTAX_STYLE_WINDOWS_BATCH = "text/bat"; - - /** - * Style for highlighting XML. - */ - public static final String SYNTAX_STYLE_XML = "text/xml"; - -} \ No newline at end of file + /** + * Style meaning don't syntax highlight anything. + */ + String SYNTAX_STYLE_NONE = "text/plain"; + + + /** + * Style for highlighting ActionScript. + */ + String SYNTAX_STYLE_ACTIONSCRIPT = "text/actionscript"; + + + /** + * Style for highlighting x86 assembler. + */ + String SYNTAX_STYLE_ASSEMBLER_X86 = "text/asm"; + + + /** + * Style for highlighting BBCode. + */ + String SYNTAX_STYLE_BBCODE = "text/bbcode"; + + + /** + * Style for highlighting C. + */ + String SYNTAX_STYLE_C = "text/c"; + + + /** + * Style for highlighting Clojure. + */ + String SYNTAX_STYLE_CLOJURE = "text/clojure"; + + + /** + * Style for highlighting C++. + */ + String SYNTAX_STYLE_CPLUSPLUS = "text/cpp"; + + + /** + * Style for highlighting C#. + */ + String SYNTAX_STYLE_CSHARP = "text/cs"; + + + /** + * Style for highlighting CSS. + */ + String SYNTAX_STYLE_CSS = "text/css"; + + + /** + * Style for highlighting CSV. + */ + String SYNTAX_STYLE_CSV = "text/csv"; + + + /** + * Syntax style for highlighting D. + */ + String SYNTAX_STYLE_D = "text/d"; + + + /** + * Syntax style for highlighting Dockerfiles. + */ + String SYNTAX_STYLE_DOCKERFILE = "text/dockerfile"; + + + /** + * Style for highlighting Dart. + */ + String SYNTAX_STYLE_DART = "text/dart"; + + + /** + * Style for highlighting Delphi/Pascal. + */ + String SYNTAX_STYLE_DELPHI = "text/delphi"; + + + /** + * Style for highlighting DTD files. + */ + String SYNTAX_STYLE_DTD = "text/dtd"; + + + /** + * Style for highlighting Fortran. + */ + String SYNTAX_STYLE_FORTRAN = "text/fortran"; + + + /** + * Style for highlighting go. + */ + String SYNTAX_STYLE_GO = "text/golang"; + + + /** + * Style for highlighting Groovy. + */ + String SYNTAX_STYLE_GROOVY = "text/groovy"; + + + /** + * Style for highlighting hosts files. + */ + String SYNTAX_STYLE_HOSTS = "text/hosts"; + + + /** + * Style for highlighting .htaccess files. + */ + String SYNTAX_STYLE_HTACCESS = "text/htaccess"; + + + /** + * Style for highlighting HTML. + */ + String SYNTAX_STYLE_HTML = "text/html"; + + + /** + * Style for highlighting INI files. + */ + String SYNTAX_STYLE_INI = "text/ini"; + + + /** + * Style for highlighting Java. + */ + String SYNTAX_STYLE_JAVA = "text/java"; + + + /** + * Style for highlighting JavaScript. + */ + String SYNTAX_STYLE_JAVASCRIPT = "text/javascript"; + + + /** + * Style for highlighting JSON. + */ + String SYNTAX_STYLE_JSON = "text/json"; + + + /** + * Style for highlighting .jshintrc files (JSON with comments, so can be + * used for other times when you want this behavior). + */ + String SYNTAX_STYLE_JSON_WITH_COMMENTS = "text/jshintrc"; + + + /** + * Style for highlighting JSP. + */ + String SYNTAX_STYLE_JSP = "text/jsp"; + + + /** + * Style for highlighting LaTeX. + */ + String SYNTAX_STYLE_LATEX = "text/latex"; + + + /** + * Style for highlighting Less. + */ + String SYNTAX_STYLE_LESS = "text/less"; + + + /** + * Style for highlighting Lisp. + */ + String SYNTAX_STYLE_LISP = "text/lisp"; + + + /** + * Style for highlighting Lua. + */ + String SYNTAX_STYLE_LUA = "text/lua"; + + + /** + * Style for highlighting makefiles. + */ + String SYNTAX_STYLE_MAKEFILE = "text/makefile"; + + + /** + * Style for highlighting MXML. + */ + String SYNTAX_STYLE_MXML = "text/mxml"; + + + /** + * Style for highlighting NSIS install scripts. + */ + String SYNTAX_STYLE_NSIS = "text/nsis"; + + + /** + * Style for highlighting Perl. + */ + String SYNTAX_STYLE_PERL = "text/perl"; + + + /** + * Style for highlighting PHP. + */ + String SYNTAX_STYLE_PHP = "text/php"; + + + /** + * Style for highlighting properties files. + */ + String SYNTAX_STYLE_PROPERTIES_FILE = "text/properties"; + + + /** + * Style for highlighting Python. + */ + String SYNTAX_STYLE_PYTHON = "text/python"; + + + /** + * Style for highlighting Ruby. + */ + String SYNTAX_STYLE_RUBY = "text/ruby"; + + + /** + * Style for highlighting SAS keywords. + */ + String SYNTAX_STYLE_SAS = "text/sas"; + + + /** + * Style for highlighting Scala. + */ + String SYNTAX_STYLE_SCALA = "text/scala"; + + + /** + * Style for highlighting SQL. + */ + String SYNTAX_STYLE_SQL = "text/sql"; + + + /** + * Style for highlighting Tcl. + */ + String SYNTAX_STYLE_TCL = "text/tcl"; + + + /** + * Style for highlighting TypeScript. + */ + String SYNTAX_STYLE_TYPESCRIPT = "text/typescript"; + + + /** + * Style for highlighting UNIX shell keywords. + */ + String SYNTAX_STYLE_UNIX_SHELL = "text/unix"; + + + /** + * Style for highlighting Visual Basic. + */ + String SYNTAX_STYLE_VISUAL_BASIC = "text/vb"; + + + /** + * Style for highlighting Windows batch files. + */ + String SYNTAX_STYLE_WINDOWS_BATCH = "text/bat"; + + + /** + * Style for highlighting XML. + */ + String SYNTAX_STYLE_XML = "text/xml"; + + + /** + * Syntax style for highlighting YAML. + */ + String SYNTAX_STYLE_YAML = "text/yaml"; + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java old mode 100644 new mode 100755 index 9e00de98f..6c5b9ea93 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxScheme.java @@ -3,23 +3,9 @@ * * SyntaxScheme.java - The set of colors and tokens used by an RSyntaxTextArea * to color tokens. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -29,7 +15,9 @@ import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; + import javax.swing.text.StyleContext; + import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -37,548 +25,703 @@ import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.helpers.XMLReaderFactory; + /** - * The set of colors and styles used by an RSyntaxTextArea to color tokens. - * + * The set of colors and styles used by an RSyntaxTextArea to + * color tokens.

    + * You can use this class to programmatically set the fonts and colors used in + * an RSyntaxTextArea, but for more powerful, externalized control, consider + * using {@link Theme}s instead. + * * @author Robert Futrell * @version 1.0 + * @see Theme */ -public class SyntaxScheme implements Cloneable { - - public Style[] styles; - - private static final String VERSION = "*ver1"; - - /** - * Creates a color scheme that either has all color values set to a default value or set to null. - * - * @param useDefaults - * If true, all color values will be set to default colors; if false, all - * colors will be initially null. - */ - public SyntaxScheme(boolean useDefaults) { - styles = new Style[Token.NUM_TOKEN_TYPES]; - if (useDefaults) { - restoreDefaults(null); - } - } - - /** - * Creates a default color scheme. - * - * @param baseFont - * The base font to use. Keywords will be a bold version of this font, and comments will be an italicized - * version of this font. - */ - public SyntaxScheme(Font baseFont) { - styles = new Style[Token.NUM_TOKEN_TYPES]; - restoreDefaults(baseFont); - } - - /** - * Changes the "base font" for this syntax scheme. This is called by RSyntaxTextArea when its font - * changes via setFont(). This looks for tokens that use a derivative of the text area's old font (but - * bolded and/or italicized) and make them use the new font with those stylings instead. This is desirable because - * most programmers prefer a single font to be used in their text editor, but might want bold (say for keywords) or - * italics. - * - * @param old - * The old font of the text area. - * @param font - * The new font of the text area. - */ - void changeBaseFont(Font old, Font font) { - for (Style style : styles) { - if (style != null && style.font != null) { - if (style.font.getFamily().equals(old.getFamily()) && - style.font.getSize() == old.getSize()) { - int s = style.font.getStyle(); // Keep bold or italic - StyleContext sc = StyleContext.getDefaultStyleContext(); - style.font = sc.getFont(font.getFamily(), s, font.getSize()); - } - } - } - } - - /** - * Returns a deep copy of this color scheme. - * - * @return The copy. - */ - public Object clone() { - SyntaxScheme shcs = null; - try { - shcs = (SyntaxScheme) super.clone(); - } catch (CloneNotSupportedException cnse) { // Never happens - cnse.printStackTrace(); - return null; - } - shcs.styles = new Style[Token.NUM_TOKEN_TYPES]; - for (int i = 0; i < Token.NUM_TOKEN_TYPES; i++) { - Style s = styles[i]; - if (s != null) { - shcs.styles[i] = (Style) s.clone(); - } - } - return shcs; - } - - /** - * Tests whether this color scheme is the same as another color scheme. - * - * @param otherScheme - * The color scheme to compare to. - * @return true if this color scheme and otherScheme are the same scheme; - * false otherwise. - */ - public boolean equals(Object otherScheme) { - - // No need for null check; instanceof takes care of this for us, - // i.e. "if (!(null instanceof Foo))" evaluates to "true". - if (!(otherScheme instanceof SyntaxScheme)) { - return false; - } - - Style[] otherSchemes = ((SyntaxScheme) otherScheme).styles; - - int length = styles.length; - for (int i = 0; i < length; i++) { - if (styles[i] == null) { - if (otherSchemes[i] != null) { - return false; - } - } - else if (!styles[i].equals(otherSchemes[i])) { - return false; - } - } - return true; - - } - - /** - * Returns a hex string representing an RGB color, of the form "$rrggbb". - * - * @param c - * The color. - * @return The string representation of the color. - */ - private static final String getHexString(Color c) { - return "$" + Integer.toHexString((c.getRGB() & 0xffffff) + 0x1000000). - substring(1); - } - - /** - * This is implemented to be consistent with {@link #equals(Object)}. This is a requirement to keep FindBugs happy. - * - * @return The hash code for this object. - */ - public int hashCode() { - // Keep me fast. Iterating over *all* syntax schemes contained is - // probably much slower than a "bad" hash code here. - int hashCode = 0; - int count = styles.length; - for (Style style : styles) { - if (style != null) { - hashCode ^= style.hashCode(); - break; - } - } - return hashCode; - } - - /** - * Loads a syntax scheme from an input stream. - * - * @param baseFont - * The font to use as the "base" for the syntax scheme. If this is null, a default - * monospaced font is used. - * @param in - * The stream to load from. It is up to the caller to close this stream when they are done. - * @return The syntax scheme. - * @throws IOException - * If an IO error occurs. - */ - public static SyntaxScheme load(Font baseFont, InputStream in) - throws IOException { - if (baseFont == null) { - baseFont = RSyntaxTextArea.getDefaultFont(); - } - return XmlParser.load(baseFont, in); - } - - /** - * Loads a syntax highlighting color scheme from a string created from toCommaSeparatedString. This - * method is useful for saving and restoring color schemes. - * - * @param string - * A string generated from {@link #toCommaSeparatedString()}. - * @return A color scheme. - */ - public static SyntaxScheme loadFromString(String string) { - - SyntaxScheme scheme = new SyntaxScheme(true); - - try { - - if (string != null) { - - String[] tokens = string.split(",", -1); - - // Check the version string, use defaults if incompatible - if (tokens.length == 0 || !VERSION.equals(tokens[0])) { - return scheme; // Still set to defaults - } - - int tokenTypeCount = Token.NUM_TOKEN_TYPES; - int tokenCount = tokenTypeCount * 7 + 1; // Version string - if (tokens.length != tokenCount) { - throw new Exception( - "Not enough tokens in packed color scheme: expected " + - tokenCount + ", found " + tokens.length); - } - - // Loop through each token style. Format: - // "index,(fg|-),(bg|-),(t|f),((font,style,size)|(-,,))" - for (int i = 0; i < tokenTypeCount; i++) { - - int pos = i * 7 + 1; - int integer = Integer.parseInt(tokens[pos]); // == i - if (integer != i) - throw new Exception("Expected " + i + ", found " + - integer); - - Color fg = null; - String temp = tokens[pos + 1]; - if (!"-".equals(temp)) { // "-" => keep fg as null - fg = stringToColor(temp); - } - Color bg = null; - temp = tokens[pos + 2]; - if (!"-".equals(temp)) { // "-" => keep bg as null - bg = stringToColor(temp); - } - - // Check for "true" or "false" since we don't want to - // accidentally suck in an int representing the next - // packed color, and any string != "true" means false. - temp = tokens[pos + 3]; - if (!"t".equals(temp) && !"f".equals(temp)) - throw new Exception("Expected 't' or 'f', found " + temp); - boolean underline = "t".equals(temp); - - Font font = null; - String family = tokens[pos + 4]; - if (!"-".equals(family)) { - font = new Font(family, - Integer.parseInt(tokens[pos + 5]), // style - Integer.parseInt(tokens[pos + 6])); // size - } - scheme.styles[i] = new Style(fg, bg, font, underline); - - } - - } - - } catch (Exception e) { - e.printStackTrace(); - } - - return scheme; - - } - - void refreshFontMetrics(Graphics2D g2d) { - // It is assumed that any rendering hints are already applied to g2d. - for (Style s : styles) { - if (s != null) { - s.fontMetrics = s.font == null ? null : - g2d.getFontMetrics(s.font); - } - } - } - - /** - * Restores all colors and fonts to their default values. - * - * @param baseFont - * The base font to use when creating this scheme. If this is null, then a default - * monospaced font is used. - */ - public void restoreDefaults(Font baseFont) { - - // Colors used by tokens. - Color comment = new Color(0, 128, 0); - Color docComment = new Color(164, 0, 0); - Color keyword = Color.BLUE; - Color function = new Color(173, 128, 0); - Color literalNumber = new Color(100, 0, 200); - Color literalString = new Color(220, 0, 156); - Color error = new Color(148, 148, 0); - - // Special fonts. - if (baseFont == null) { - baseFont = RSyntaxTextArea.getDefaultFont(); - } - // WORKAROUND for Sun JRE bug 6282887 (Asian font bug in 1.4/1.5) - StyleContext sc = StyleContext.getDefaultStyleContext(); - Font boldFont = sc.getFont(baseFont.getFamily(), Font.BOLD, - baseFont.getSize()); - Font italicFont = sc.getFont(baseFont.getFamily(), Font.ITALIC, - baseFont.getSize()); - Font commentFont = italicFont;// baseFont.deriveFont(Font.ITALIC); - Font keywordFont = boldFont;// baseFont.deriveFont(Font.BOLD); - - styles[Token.COMMENT_EOL] = new Style(comment, null, commentFont); - styles[Token.COMMENT_MULTILINE] = new Style(comment, null, commentFont); - styles[Token.COMMENT_DOCUMENTATION] = new Style(docComment, null, commentFont); - styles[Token.RESERVED_WORD] = new Style(keyword, null, keywordFont); - styles[Token.FUNCTION] = new Style(function, null); - styles[Token.LITERAL_BOOLEAN] = new Style(literalNumber, null); - styles[Token.LITERAL_NUMBER_DECIMAL_INT] = new Style(literalNumber, null); - styles[Token.LITERAL_NUMBER_FLOAT] = new Style(literalNumber, null); - styles[Token.LITERAL_NUMBER_HEXADECIMAL] = new Style(literalNumber, null); - styles[Token.LITERAL_STRING_DOUBLE_QUOTE] = new Style(literalString, null); - styles[Token.LITERAL_CHAR] = new Style(literalString, null); - styles[Token.LITERAL_BACKQUOTE] = new Style(literalString, null); - styles[Token.DATA_TYPE] = new Style(new Color(0, 128, 128), null); - styles[Token.VARIABLE] = new Style(new Color(255, 153, 0), null); - styles[Token.IDENTIFIER] = new Style(null, null); - styles[Token.WHITESPACE] = new Style(Color.gray, null); - styles[Token.SEPARATOR] = new Style(Color.RED, null); - styles[Token.OPERATOR] = new Style(new Color(128, 64, 64), null); - styles[Token.PREPROCESSOR] = new Style(new Color(128, 128, 128), null); - styles[Token.MARKUP_TAG_DELIMITER] = new Style(Color.RED, null); - styles[Token.MARKUP_TAG_NAME] = new Style(Color.BLUE, null); - styles[Token.MARKUP_TAG_ATTRIBUTE] = new Style(new Color(63, 127, 127), null); - // styles[Token.ERROR] = null; - styles[Token.ERROR_IDENTIFIER] = new Style(error, null); - styles[Token.ERROR_NUMBER_FORMAT] = new Style(error, null); - styles[Token.ERROR_STRING_DOUBLE] = new Style(error, null); - styles[Token.ERROR_CHAR] = new Style(error, null); - - } - - /** - * Sets a style to use when rendering a token type. - * - * @param type - * The token type. - * @param style - * The style for the token type. - */ - public void setStyle(int type, Style style) { - styles[type] = style; - } - - /** - * Returns the color represented by a string. If the first char in the string is '$', it is assumed to - * be in hex, otherwise it is assumed to be decimal. So, for example, both of these: - * - *

    -     * "$00ff00"
    -     * "65280"
    -     * 
    - * - * will return new Color(0, 255, 0). - * - * @param s - * The string to evaluate. - * @return The color. - */ - private static final Color stringToColor(String s) { - // Check for decimal as well as hex, for backward - // compatibility (fix from GwynEvans on forums) - char ch = s.charAt(0); - return new Color((ch == '$' || ch == '#') ? - Integer.parseInt(s.substring(1), 16) : - Integer.parseInt(s)); - } - - /** - * Returns this syntax highlighting scheme as a comma-separated list of values as follows: - *
      - *
    • If a color is non-null, it is added as a 24-bit integer of the form ((r<<16) | (g<<8) | (b)); if - * it is null, it is added as "-,". - *
    • The font and style (bold/italic) is added as an integer like so: "family, style, size". - *
    • The entire syntax highlighting scheme is thus one long string of color schemes of the format - * "i,[fg],[bg],uline,[style], where: - *
        - *
      • i is the index of the syntax scheme. - *
      • fg and bg are the foreground and background colors for the scheme, and may be null (represented - * by -). - *
      • uline is whether or not the font should be underlined, and is either t or - * f. - *
      • style is the family,style,size triplet described above. - *
      - *
    - * - * @return A string representing the rgb values of the colors. - */ - public String toCommaSeparatedString() { - - StringBuffer sb = new StringBuffer(VERSION); - sb.append(','); - - for (int i = 0; i < Token.NUM_TOKEN_TYPES; i++) { - - sb.append(i).append(','); - - Style ss = styles[i]; - if (ss == null) { // Only true for i==0 (NULL token) - sb.append("-,-,f,-,,,"); - continue; - } - - Color c = ss.foreground; - sb.append(c != null ? (getHexString(c) + ",") : "-,"); - c = ss.background; - sb.append(c != null ? (getHexString(c) + ",") : "-,"); - - sb.append(ss.underline ? "t," : "f,"); - - Font font = ss.font; - if (font != null) { - sb.append(font.getFamily()).append(','). - append(font.getStyle()).append(','). - append(font.getSize()).append(','); - } - else { - sb.append("-,,,"); - } - - } - - return sb.substring(0, sb.length() - 1); // Take off final ','. - - } - - /** - * Loads a SyntaxScheme from an XML file. - */ - private static class XmlParser extends DefaultHandler { - - private Font baseFont; - private SyntaxScheme scheme; - - public XmlParser(Font baseFont) { - scheme = new SyntaxScheme(baseFont); - } - - /** - * Creates the XML reader to use. Note that in 1.4 JRE's, the reader class wasn't defined by default, but in - * 1.5+ it is. - * - * @return The XML reader to use. - */ - private static XMLReader createReader() throws IOException { - XMLReader reader = null; - try { - reader = XMLReaderFactory.createXMLReader(); - } catch (SAXException e) { - // Happens in JRE 1.4.x; 1.5+ define the reader class properly - try { - reader = XMLReaderFactory.createXMLReader( - "org.apache.crimson.parser.XMLReaderImpl"); - } catch (SAXException se) { - throw new IOException(se.toString()); - } - } - return reader; - } - - public static SyntaxScheme load(Font baseFont, - InputStream in) throws IOException { - XMLReader reader = createReader(); - XmlParser parser = new XmlParser(baseFont); - parser.baseFont = baseFont; - reader.setContentHandler(parser); - InputSource is = new InputSource(in); - is.setEncoding("UTF-8"); - try { - reader.parse(is); - } catch (SAXException se) { - throw new IOException(se.toString()); - } - return parser.scheme; - } - - public void startElement(String uri, String localName, String qName, - Attributes attrs) { - - if ("style".equals(qName)) { - - String type = attrs.getValue("token"); - Field field = null; - try { - field = Token.class.getField(type); - } catch (RuntimeException re) { - throw re; // FindBugs - } catch (Exception e) { - System.err.println("Invalid token type: " + type); - return; - } - - if (field.getType() == int.class) { - - int index = 0; - try { - index = field.getInt(scheme); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - return; - } catch (IllegalAccessException e) { - e.printStackTrace(); - return; - } - - String fgStr = attrs.getValue("fg"); - if (fgStr != null) { - Color fg = stringToColor(fgStr); - scheme.styles[index].foreground = fg; - } - - String bgStr = attrs.getValue("bg"); - if (bgStr != null) { - scheme.styles[index].background = stringToColor(bgStr); - } - - boolean styleSpecified = false; - boolean bold = false; - boolean italic = false; - String boldStr = attrs.getValue("bold"); - if (boldStr != null) { - bold = Boolean.valueOf(boldStr); - styleSpecified = true; - } - String italicStr = attrs.getValue("italic"); - if (italicStr != null) { - italic = Boolean.valueOf(italicStr); - styleSpecified = true; - } - if (styleSpecified) { - int style = 0; - if (bold) { - style |= Font.BOLD; - } - if (italic) { - style |= Font.ITALIC; - } - scheme.styles[index].font = baseFont.deriveFont(style); - } - - String ulineStr = attrs.getValue("underline"); - if (ulineStr != null) { - boolean uline = Boolean.valueOf(ulineStr); - scheme.styles[index].underline = uline; - } - - } - - } - - } - - } - -} \ No newline at end of file +@SuppressWarnings({ "checkstyle:magicnumber" }) +public class SyntaxScheme implements Cloneable, TokenTypes { + + private Style[] styles; + + private static final String VERSION = "*ver1"; + + + /** + * Creates a color scheme that either has all color values set to + * a default value or set to null. + * + * @param useDefaults If true, all color values will + * be set to default colors; if false, all colors + * will be initially null. + */ + public SyntaxScheme(boolean useDefaults) { + styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; + if (useDefaults) { + restoreDefaults(null); + } + } + + + /** + * Creates a default color scheme. + * + * @param baseFont The base font to use. Keywords will be a bold version + * of this font, and comments will be an italicized version of this + * font. + */ + public SyntaxScheme(Font baseFont) { + this(baseFont, true); + } + + + /** + * Creates a default color scheme. + * + * @param baseFont The base font to use. Keywords will be a bold version + * of this font, and comments will be an italicized version of this + * font. + * @param fontStyles Whether bold and italic should be used in the scheme + * (vs. all tokens using a plain font). + */ + public SyntaxScheme(Font baseFont, boolean fontStyles) { + styles = new Style[DEFAULT_NUM_TOKEN_TYPES]; + restoreDefaults(baseFont, fontStyles); + } + + + /** + * Changes the "base font" for this syntax scheme. This is called by + * RSyntaxTextArea when its font changes via + * setFont(). This looks for tokens that use a derivative of + * the text area's old font (but bolded and/or italicized) and make them + * use the new font with those stylings instead. This is desirable because + * most programmers prefer a single font to be used in their text editor, + * but might want bold (say for keywords) or italics. + * + * @param old The old font of the text area. + * @param font The new font of the text area. + */ + void changeBaseFont(Font old, Font font) { + for (Style style : styles) { + if (style != null && style.font != null) { + if (style.font.getFamily().equals(old.getFamily()) && + style.font.getSize() == old.getSize()) { + int s = style.font.getStyle(); // Keep bold or italic + StyleContext sc = StyleContext.getDefaultStyleContext(); + style.font = sc.getFont(font.getFamily(), s, font.getSize()); + } + } + } + } + + + /** + * Returns a deep copy of this color scheme. + * + * @return The copy. + */ + @Override + public Object clone() { + SyntaxScheme shcs = null; + try { + shcs = (SyntaxScheme)super.clone(); + } catch (CloneNotSupportedException cnse) { // Never happens + cnse.printStackTrace(); + return null; + } + shcs.styles = new Style[styles.length]; + for (int i=0; itrue if this color scheme and + * otherScheme are the same scheme; + * false otherwise. + */ + @Override + public boolean equals(Object otherScheme) { + + // No need for null check; instanceof takes care of this for us, + // i.e. "if (!(null instanceof Foo))" evaluates to "true". + if (!(otherScheme instanceof SyntaxScheme)) { + return false; + } + + Style[] otherSchemes = ((SyntaxScheme)otherScheme).styles; + + int length = styles.length; + for (int i=0; i"$rrggbb". + * + * @param c The color. + * @return The string representation of the color. + */ + private static String getHexString(Color c) { + return "$" + Integer.toHexString((c.getRGB() & 0xffffff)+0x1000000). + substring(1); + } + + + /** + * Returns the specified style. + * + * @param index The index of the style. + * @return The style. + * @see #setStyle(int, Style) + * @see #getStyleCount() + */ + public Style getStyle(int index) { + return styles[index]; + } + + + /** + * Returns the number of styles. + * + * @return The number of styles. + * @see #getStyle(int) + */ + public int getStyleCount() { + return styles.length; + } + + + /** + * Used by third party implementors e.g. SquirreL SQL. Most applications do + * not need to call this method. + *

    + * Note that the returned array is not a copy of the style data; editing the + * array will modify the styles used by any RSyntaxTextArea + * using this scheme. + * + * @return The style array. + * @see #setStyles(Style[]) + */ + public Style[] getStyles() { + return styles; + } + + + /** + * This is implemented to be consistent with {@link #equals(Object)}. + * This is a requirement to keep FindBugs happy. + * + * @return The hash code for this object. + */ + @Override + public int hashCode() { + // Keep me fast. Iterating over *all* syntax schemes contained is + // probably much slower than a "bad" hash code here. + int hashCode = 0; + int count = styles.length; + for (Style style : styles) { + if (style != null) { + hashCode ^= style.hashCode(); + break; + } + } + return hashCode; + } + + + /** + * Loads a syntax scheme from an input stream.

    + * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param baseFont The font to use as the "base" for the syntax scheme. + * If this is null, a default monospaced font is used. + * @param in The stream to load from. It is up to the caller to close this + * stream when they are done. + * @return The syntax scheme. + * @throws IOException If an IO error occurs. + */ + public static SyntaxScheme load(Font baseFont, InputStream in) + throws IOException { + if (baseFont==null) { + baseFont = RSyntaxTextArea.getDefaultFont(); + } + return SyntaxSchemeLoader.load(baseFont, in); + } + + + /** + * Loads a syntax highlighting color scheme from a string created from + * toCommaSeparatedString. This method is useful for saving + * and restoring color schemes.

    + * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param string A string generated from {@link #toCommaSeparatedString()}. + * @return A color scheme. + * @see #toCommaSeparatedString() + */ + public static SyntaxScheme loadFromString(String string) { + return loadFromString(string, DEFAULT_NUM_TOKEN_TYPES); + } + + + /** + * Loads a syntax highlighting color scheme from a string created from + * toCommaSeparatedString. This method is useful for saving + * and restoring color schemes.

    + * + * Consider using the {@link Theme} class for saving and loading RSTA + * styles rather than using this API. + * + * @param string A string generated from {@link #toCommaSeparatedString()}. + * @param tokenTypeCount The number of token types saved in this string. + * This should be the number of token types saved by your custom + * SyntaxScheme subclass, + * or {@link TokenTypes#DEFAULT_NUM_TOKEN_TYPES} if you used the + * standard implementation (which most people will). + * @return A color scheme. + * @see #loadFromString(String) + * @see #toCommaSeparatedString() + */ + public static SyntaxScheme loadFromString(String string, + int tokenTypeCount) { + + SyntaxScheme scheme = new SyntaxScheme(true); + + try { + + if (string!=null) { + + String[] tokens = string.split(",", -1); + + // Check the version string, use defaults if incompatible + if (tokens.length==0 || !VERSION.equals(tokens[0])) { + return scheme; // Still set to defaults + } + + int tokenCount = tokenTypeCount*7 + 1; // Version string + if (tokens.length!=tokenCount) { + throw new Exception( + "Not enough tokens in packed color scheme: expected " + + tokenCount + ", found " + tokens.length); + } + + // Use StyleContext to create fonts to get composite fonts for + // Asian glyphs. + StyleContext sc = StyleContext.getDefaultStyleContext(); + + // Loop through each token style. Format: + // "index,(fg|-),(bg|-),(t|f),((font,style,size)|(-,,))" + for (int i=0; i keep fg as null + fg = stringToColor(temp); + } + Color bg = null; temp = tokens[pos+2]; + if (!"-".equals(temp)) { // "-" => keep bg as null + bg = stringToColor(temp); + } + + // Check for "true" or "false" since we don't want to + // accidentally suck in an int representing the next + // packed color, and any string != "true" means false. + temp = tokens[pos+3]; + if (!"t".equals(temp) && !"f".equals(temp)) { + throw new Exception("Expected 't' or 'f', found " + temp); + } + boolean underline = "t".equals(temp); + + Font font = null; + String family = tokens[pos+4]; + if (!"-".equals(family)) { + font = sc.getFont(family, + Integer.parseInt(tokens[pos+5]), // style + Integer.parseInt(tokens[pos+6])); // size + } + scheme.styles[i] = new Style(fg, bg, font, underline); + + } + + } + + } catch (Exception e) { + e.printStackTrace(); + } + + return scheme; + + } + + + void refreshFontMetrics(Graphics2D g2d) { + // It is assumed that any rendering hints are already applied to g2d. + for (Style s : styles) { + if (s != null) { + s.fontMetrics = s.font == null ? null : + g2d.getFontMetrics(s.font); + } + } + } + + + /** + * Restores all colors and fonts to their default values. + * + * @param baseFont The base font to use when creating this scheme. If + * this is null, then a default monospaced font is + * used. + */ + public void restoreDefaults(Font baseFont) { + restoreDefaults(baseFont, true); + } + + + /** + * Restores all colors and fonts to their default values. + * + * @param baseFont The base font to use when creating this scheme. If + * this is null, then a default monospaced font is + * used. + * @param fontStyles Whether bold and italic should be used in the scheme + * (vs. all tokens using a plain font). + */ + public void restoreDefaults(Font baseFont, boolean fontStyles) { + + // Colors used by tokens. + Color comment = new Color(0,128,0); + Color docComment = new Color(164,0,0); + Color markupComment = new Color(0, 96, 0); + Color keyword = Color.BLUE; + Color dataType = new Color(0,128,128); + Color function = new Color(173,128,0); + Color preprocessor = new Color(128,128,128); + Color operator = new Color(128, 64, 64); + Color regex = new Color(0,128,164); + Color variable = new Color(255,153,0); + Color literalNumber = new Color(100,0,200); + Color literalString = new Color(220,0,156); + Color error = new Color(148,148,0); + + // (Possible) special font styles for keywords and comments. + if (baseFont==null) { + baseFont = RSyntaxTextArea.getDefaultFont(); + } + Font commentFont = baseFont; + Font keywordFont = baseFont; + if (fontStyles) { + // WORKAROUND for Sun JRE bug 6282887 (Asian font bug in 1.4/1.5) + // That bug seems to be hidden now, see 6289072 instead. + StyleContext sc = StyleContext.getDefaultStyleContext(); + Font boldFont = sc.getFont(baseFont.getFamily(), Font.BOLD, + baseFont.getSize()); + Font italicFont = sc.getFont(baseFont.getFamily(), Font.ITALIC, + baseFont.getSize()); + commentFont = italicFont;//baseFont.deriveFont(Font.ITALIC); + keywordFont = boldFont;//baseFont.deriveFont(Font.BOLD); + } + + styles[COMMENT_EOL] = new Style(comment, null, commentFont); + styles[COMMENT_MULTILINE] = new Style(comment, null, commentFont); + styles[COMMENT_DOCUMENTATION] = new Style(docComment, null, commentFont); + styles[COMMENT_KEYWORD] = new Style(new Color(255,152,0), null, commentFont); + styles[COMMENT_MARKUP] = new Style(Color.gray, null, commentFont); + styles[RESERVED_WORD] = new Style(keyword, null, keywordFont); + styles[RESERVED_WORD_2] = new Style(keyword, null, keywordFont); + styles[FUNCTION] = new Style(function); + styles[LITERAL_BOOLEAN] = new Style(literalNumber); + styles[LITERAL_NUMBER_DECIMAL_INT] = new Style(literalNumber); + styles[LITERAL_NUMBER_FLOAT] = new Style(literalNumber); + styles[LITERAL_NUMBER_HEXADECIMAL] = new Style(literalNumber); + styles[LITERAL_STRING_DOUBLE_QUOTE] = new Style(literalString); + styles[LITERAL_CHAR] = new Style(literalString); + styles[LITERAL_BACKQUOTE] = new Style(literalString); + styles[DATA_TYPE] = new Style(dataType, null, keywordFont); + styles[VARIABLE] = new Style(variable); + styles[REGEX] = new Style(regex); + styles[ANNOTATION] = new Style(Color.gray); + styles[IDENTIFIER] = new Style(null); + styles[WHITESPACE] = new Style(Color.gray); + styles[SEPARATOR] = new Style(Color.RED); + styles[OPERATOR] = new Style(operator); + styles[PREPROCESSOR] = new Style(preprocessor); + styles[MARKUP_TAG_DELIMITER] = new Style(Color.RED); + styles[MARKUP_TAG_NAME] = new Style(Color.BLUE); + styles[MARKUP_TAG_ATTRIBUTE] = new Style(new Color(63,127,127)); + styles[MARKUP_TAG_ATTRIBUTE_VALUE]= new Style(literalString); + styles[MARKUP_COMMENT] = new Style(markupComment, null, commentFont); + styles[MARKUP_DTD] = new Style(function); + styles[MARKUP_PROCESSING_INSTRUCTION] = new Style(preprocessor); + styles[MARKUP_CDATA] = new Style(new Color(0xcc6600)); + styles[MARKUP_CDATA_DELIMITER] = new Style(new Color(0x008080)); + styles[MARKUP_ENTITY_REFERENCE] = new Style(dataType); + styles[ERROR_IDENTIFIER] = new Style(error); + styles[ERROR_NUMBER_FORMAT] = new Style(error); + styles[ERROR_STRING_DOUBLE] = new Style(error); + styles[ERROR_CHAR] = new Style(error); + + // Issue #34: If an application modifies TokenTypes to add new built-in + // token types, we'll get NPEs if not all styles are initialized. + for (int i=0; i$', it is assumed to be in hex, otherwise it is + * assumed to be decimal. So, for example, both of these: + *

    +	 * "$00ff00"
    +	 * "65280"
    +	 * 
    + * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @return The color. + */ + private static Color stringToColor(String s) { + // Check for decimal as well as hex, for backward + // compatibility (fix from GwynEvans on forums) + char ch = s.charAt(0); + return new Color((ch=='$' || ch=='#') ? + Integer.parseInt(s.substring(1),16) : + Integer.parseInt(s)); + } + + + /** + * Returns this syntax highlighting scheme as a comma-separated list of + * values as follows: + *
      + *
    • If a color is non-null, it is added as a 24-bit integer + * of the form ((r<*lt;16) | (g<*lt;8) | (b)); if + * it is null, it is added as "-,". + *
    • The font and style (bold/italic) is added as an integer like so: + * "family, style, size". + *
    • The entire syntax highlighting scheme is thus one long string of + * color schemes of the format "i,[fg],[bg],uline,[style], + * where: + *
        + *
      • i is the index of the syntax scheme. + *
      • fg and bg are the foreground and background + * colors for the scheme, and may be null (represented by + * -). + *
      • uline is whether or not the font should be + * underlined, and is either t or f. + *
      • style is the family,style,size + * triplet described above. + *
      + *
    + * + * @return A string representing the rgb values of the colors. + * @see #loadFromString(String) + */ + public String toCommaSeparatedString() { + + StringBuilder sb = new StringBuilder(VERSION); + sb.append(','); + + for (int i=0; iSyntaxScheme from an XML file. + */ + private static class SyntaxSchemeLoader extends DefaultHandler { + + private Font baseFont; + private SyntaxScheme scheme; + + SyntaxSchemeLoader(Font baseFont) { + scheme = new SyntaxScheme(baseFont); + } + + public static SyntaxScheme load(Font baseFont, InputStream in) + throws IOException { + SyntaxSchemeLoader parser = null; + try { + XMLReader reader = XMLReaderFactory.createXMLReader(); + parser = new SyntaxSchemeLoader(baseFont); + parser.baseFont = baseFont; + reader.setContentHandler(parser); + InputSource is = new InputSource(in); + is.setEncoding("UTF-8"); + reader.parse(is); + } catch (SAXException se) { + throw new IOException(se.toString()); + } + return parser.scheme; + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attrs) { + + if ("style".equals(qName)) { + + String type = attrs.getValue("token"); + Field field = null; + try { + field = Token.class.getField(type); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + System.err.println("Invalid token type: " + type); + return; + } + + if (field.getType()==int.class) { + + int index = 0; + try { + index = field.getInt(scheme); + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + return; + } + + String fgStr = attrs.getValue("fg"); + if (fgStr!=null) { + Color fg = stringToColor(fgStr); + scheme.styles[index].foreground = fg; + } + + String bgStr = attrs.getValue("bg"); + if (bgStr!=null) { + Color bg = stringToColor(bgStr); + scheme.styles[index].background = bg; + } + + boolean styleSpecified = false; + boolean bold = false; + boolean italic = false; + String boldStr = attrs.getValue("bold"); + if (boldStr!=null) { + bold = Boolean.parseBoolean(boldStr); + styleSpecified = true; + } + String italicStr = attrs.getValue("italic"); + if (italicStr!=null) { + italic = Boolean.parseBoolean(italicStr); + styleSpecified = true; + } + if (styleSpecified) { + int style = 0; + if (bold) { + style |= Font.BOLD; + } + if (italic) { + style |= Font.ITALIC; + } + scheme.styles[index].font = baseFont.deriveFont(style); + } + + String ulineStr = attrs.getValue("underline"); + if (ulineStr!=null) { + boolean uline= Boolean.parseBoolean(ulineStr); + scheme.styles[index].underline = uline; + } + + } + + } + + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java old mode 100644 new mode 100755 index ccf6afc1b..1c6a40ded --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/SyntaxView.java @@ -3,23 +3,9 @@ * * SyntaxView.java - The View object used by RSyntaxTextArea when word wrap is * disabled. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -27,755 +13,1004 @@ import javax.swing.event.*; import javax.swing.text.*; +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; + + /** - * The javax.swing.text.View object used by {@link RSyntaxTextArea} when word wrap is disabled. It - * implements syntax highlighting for programming languages using the colors and font styles specified by the - * RSyntaxTextArea. - *

    - * - * You don't really have to do anything to use this class, as {@link RSyntaxTextAreaUI} automatically sets the text - * area's view to be an instance of this class if word wrap is disabled. - *

    - * - * The tokens that specify how to paint the syntax-highlighted text are gleaned from the text area's - * {@link RSyntaxDocument}. - * + * The javax.swing.text.View object used by {@link RSyntaxTextArea} + * when word wrap is disabled. It implements syntax highlighting for + * programming languages using the colors and font styles specified by the + * RSyntaxTextArea.

    + * + * You don't really have to do anything to use this class, as + * {@link RSyntaxTextAreaUI} automatically sets the text area's view to be + * an instance of this class if word wrap is disabled.

    + * + * The tokens that specify how to paint the syntax-highlighted text are gleaned + * from the text area's {@link RSyntaxDocument}. + * * @author Robert Futrell * @version 0.3 */ public class SyntaxView extends View implements TabExpander, - TokenOrientedView, RSTAView { - - /** - * The default font used by the text area. If this changes we need to recalculate the longest line. - */ - Font font; - - /** - * Font metrics for the current font. - */ - protected FontMetrics metrics; - - /** - * The current longest line. This is used to calculate the preferred width of the view. Since the calculation is - * potentially expensive, we try to avoid it by stashing which line is currently the longest. - */ - Element longLine; - float longLineWidth; - - private int tabSize; - protected int tabBase; - - /** - * Cached for each paint() call so each drawLine() call has access to it. - */ - private RSyntaxTextArea host; - - /** - * Cached values to speed up the painting a tad. - */ - private int lineHeight = 0; - private int ascent; - private int clipStart; - private int clipEnd; - - // /** - // * The end-of-line marker. - // */ - // private static final char[] eolMarker = { '.' }; - - /** - * Constructs a new SyntaxView wrapped around an element. - * - * @param elem - * The element representing the text to display. - */ - public SyntaxView(Element elem) { - super(elem); - } - - /** - * Iterate over the lines represented by the child elements of the element this view represents, looking for the - * line that is the longest. The longLine variable is updated to represent the longest line contained. The - * font variable is updated to indicate the font used to calculate the longest line. - */ - void calculateLongestLine() { - Component c = getContainer(); - font = c.getFont(); - metrics = c.getFontMetrics(font); - tabSize = getTabSize() * metrics.charWidth(' '); - Element lines = getElement(); - int n = lines.getElementCount(); - for (int i = 0; i < n; i++) { - Element line = lines.getElement(i); - float w = getLineWidth(i); - if (w > longLineWidth) { - longLineWidth = w; - longLine = line; - } - } - } - - /** - * Gives notification from the document that attributes were changed in a location that this view is responsible - * for. - * - * @param changes - * the change information from the associated document - * @param a - * the current allocation of the view - * @param f - * the factory to use to rebuild if the view has children - * @see View#changedUpdate - */ - public void changedUpdate(DocumentEvent changes, Shape a, ViewFactory f) { - updateDamage(changes, a, f); - } - - /** - * Repaint the given line range. - * - * @param line0 - * The starting line number to repaint. This must be a valid line number in the model. - * @param line1 - * The ending line number to repaint. This must be a valid line number in the model. - * @param a - * The region allocated for the view to render into. - * @param host - * The component hosting the view (used to call repaint). - */ - protected void damageLineRange(int line0, int line1, Shape a, - Component host) { - if (a != null) { - Rectangle area0 = lineToRect(a, line0); - Rectangle area1 = lineToRect(a, line1); - if ((area0 != null) && (area1 != null)) { - Rectangle dmg = area0.union(area1); // damage. - host.repaint(dmg.x, dmg.y, dmg.width, dmg.height); - } - else - host.repaint(); - } - } - - /** - * Draws the passed-in text using syntax highlighting for the current language. The tokens used to decide how to - * paint the syntax highlighting are grabbed from the text area's document. - * - * @param token - * The list of tokens to draw. - * @param g - * The graphics context in which to draw. - * @param x - * The x-coordinate at which to draw. - * @param y - * The y-coordinate at which to draw. - * @return The x-coordinate representing the end of the painted text. - */ - public float drawLine(Token token, Graphics2D g, float x, float y) { - - float nextX = x; // The x-value at the end of our text. - - while (token != null && token.isPaintable() && nextX < clipEnd) { - nextX = token.paint(g, nextX, y, host, this, clipStart); - token = token.getNextToken(); - } - - // NOTE: We should re-use code from Token (paintBackground()) here, - // but don't because I'm just too lazy. - if (host.getEOLMarkersVisible()) { - g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); - g.setFont(host.getFontForTokenType(Token.WHITESPACE)); - g.drawString("\u00B6", nextX, y); - } - - // Return the x-coordinate at the end of the painted text. - return nextX; - - } - - /** - * Calculates the width of the line represented by the given element. - * - * @param line - * The line for which to get the length. - * @param lineNumber - * The line number of the specified line in the document. - * @return The width of the line. - */ - private float getLineWidth(int lineNumber) { - Token tokenList = ((RSyntaxDocument) getDocument()). - getTokenListForLine(lineNumber); - return RSyntaxUtilities.getTokenListWidth(tokenList, - (RSyntaxTextArea) getContainer(), - this); - } - - /** - * Provides a way to determine the next visually represented model location that one might place a caret. Some views - * may not be visible, they might not be in the same order found in the model, or they just might not allow access - * to some of the locations in the model. - * - * @param pos - * the position to convert >= 0 - * @param a - * the allocated region to render into - * @param direction - * the direction from the current position that can be thought of as the arrow keys typically found on a - * keyboard. This may be SwingConstants.WEST, SwingConstants.EAST, SwingConstants.NORTH, or - * SwingConstants.SOUTH. - * @return the location within the model that best represents the next location visual position. - * @exception BadLocationException - * @exception IllegalArgumentException - * for an invalid direction - */ - public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, - int direction, Position.Bias[] biasRet) - throws BadLocationException { - return RSyntaxUtilities.getNextVisualPositionFrom(pos, b, a, - direction, biasRet, this); - } - - /** - * Determines the preferred span for this view along an axis. - * - * @param axis - * may be either View.X_AXIS or View.Y_AXIS - * @return the span the view would like to be rendered into >= 0. Typically the view is told to render into the span - * that is returned, although there is no guarantee. The parent may choose to resize or break the view. - * @exception IllegalArgumentException - * for an invalid axis - */ - public float getPreferredSpan(int axis) { - updateMetrics(); - switch (axis) { - case View.X_AXIS: - float span = longLineWidth + 10; // "fudge factor." - if (host.getEOLMarkersVisible()) { - span += metrics.charWidth('\u00B6'); - } - return span; - case View.Y_AXIS: - // We update lineHeight here as when this method is first - // called, lineHeight isn't initialized. If we don't do it - // here, we get no vertical scrollbar (as lineHeight==0). - lineHeight = host != null ? host.getLineHeight() : lineHeight; - return getElement().getElementCount() * lineHeight; - default: - throw new IllegalArgumentException("Invalid axis: " + axis); - } - } - - /** - * Returns the tab size set for the document, defaulting to 5. - * - * @return The tab size. - */ - protected int getTabSize() { - Integer i = (Integer) getDocument().getProperty( - PlainDocument.tabSizeAttribute); - return (i != null) ? i : 5; - } - - /** - * Returns a token list for the physical line above the physical line containing the specified offset into - * the document. Note that for this plain (non-wrapped) view, this is simply the token list for the logical line - * above the line containing offset, since lines are not wrapped. - * - * @param offset - * The offset in question. - * @return A token list for the physical (and in this view, logical) line before this one. If offset is - * in the first line in the document, null is returned. - */ - public Token getTokenListForPhysicalLineAbove(int offset) { - RSyntaxDocument document = (RSyntaxDocument) getDocument(); - Element map = document.getDefaultRootElement(); - int line = map.getElementIndex(offset) - 1; - if (line >= 0) - return document.getTokenListForLine(line); - return null; - } - - /** - * Returns a token list for the physical line below the physical line containing the specified offset into - * the document. Note that for this plain (non-wrapped) view, this is simply the token list for the logical line - * below the line containing offset, since lines are not wrapped. - * - * @param offset - * The offset in question. - * @return A token list for the physical (and in this view, logical) line after this one. If offset is - * in the last physical line in the document, null is returned. - */ - public Token getTokenListForPhysicalLineBelow(int offset) { - RSyntaxDocument document = (RSyntaxDocument) getDocument(); - Element map = document.getDefaultRootElement(); - int line = map.getElementIndex(offset); - int lineCount = map.getElementCount(); - if (line < lineCount - 1) - return document.getTokenListForLine(line + 1); - return null; - } - - /** - * Gives notification that something was inserted into the document in a location that this view is responsible for. - * - * @param changes - * The change information from the associated document. - * @param a - * The current allocation of the view. - * @param f - * The factory to use to rebuild if the view has children. - */ - public void insertUpdate(DocumentEvent changes, Shape a, ViewFactory f) { - updateDamage(changes, a, f); - } - - /** - * Determine the rectangle that represents the given line. - * - * @param a - * The region allocated for the view to render into - * @param line - * The line number to find the region of. This must be a valid line number in the model. - */ - protected Rectangle lineToRect(Shape a, int line) { - Rectangle r = null; - updateMetrics(); - if (metrics != null) { - Rectangle alloc = a.getBounds(); - // NOTE: lineHeight is not initially set here, leading to the - // current line not being highlighted when a document is first - // opened. So, we set it here just in case. - lineHeight = host != null ? host.getLineHeight() : lineHeight; - r = new Rectangle(alloc.x, alloc.y + line * lineHeight, - alloc.width, lineHeight); - } - return r; - } - - /** - * Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it. - * - * @param pos - * the position to convert >= 0 - * @param a - * the allocated region to render into - * @return the bounding box of the given position - * @exception BadLocationException - * if the given position does not represent a valid location in the associated document - * @see View#modelToView - */ - public Shape modelToView(int pos, Shape a, Position.Bias b) - throws BadLocationException { - - // line coordinates - Element map = getElement(); - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - int lineIndex = map.getElementIndex(pos); - Rectangle lineArea = lineToRect(a, lineIndex); - tabBase = lineArea.x; // Used by listOffsetToView(). - - Token tokenList = doc.getTokenListForLine(lineIndex); - - // int x = (int)RSyntaxUtilities.getTokenListWidthUpTo(tokenList, - // (RSyntaxTextArea)getContainer(), - // this, 0, pos); - // We use this method instead as it returns the actual bounding box, - // not just the x-coordinate. - lineArea = tokenList.listOffsetToView( - (RSyntaxTextArea) getContainer(), this, pos, - tabBase, lineArea); - - return lineArea; - - } - - /** - * Provides a mapping, for a given region, from the document model coordinate space to the view coordinate space. - * The specified region is created as a union of the first and last character positions. - *

    - * - * This is implemented to subtract the width of the second character, as this view's modelToView - * actually returns the width of the character instead of "1" or "0" like the View implementations in - * javax.swing.text. Thus, if we don't override this method, the View implementation will - * return one character's width too much for its consumers (implementations of - * javax.swing.text.Highlighter). - * - * @param p0 - * the position of the first character (>=0) - * @param b0 - * The bias of the first character position, toward the previous character or the next character - * represented by the offset, in case the position is a boundary of two views; b0 will have - * one of these values: - *

      - *
    • Position.Bias.Forward
    • Position.Bias.Backward - *
    - * @param p1 - * the position of the last character (>=0) - * @param b1 - * the bias for the second character position, defined one of the legal values shown above - * @param a - * the area of the view, which encompasses the requested region - * @return the bounding box which is a union of the region specified by the first and last character positions - * @exception BadLocationException - * if the given position does not represent a valid location in the associated document - * @exception IllegalArgumentException - * if b0 or b1 are not one of the legal Position.Bias values - * listed above - * @see View#viewToModel - */ - public Shape modelToView(int p0, Position.Bias b0, - int p1, Position.Bias b1, - Shape a) throws BadLocationException { - - Shape s0 = modelToView(p0, a, b0); - Shape s1; - if (p1 == getEndOffset()) { - try { - s1 = modelToView(p1, a, b1); - } catch (BadLocationException ble) { - s1 = null; - } - if (s1 == null) { - // Assume extends left to right. - Rectangle alloc = (a instanceof Rectangle) ? (Rectangle) a : - a.getBounds(); - s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, - 1, alloc.height); - } - } - else { - s1 = modelToView(p1, a, b1); - } - Rectangle r0 = s0.getBounds(); - Rectangle r1 = (s1 instanceof Rectangle) ? (Rectangle) s1 : - s1.getBounds(); - if (r0.y != r1.y) { - // If it spans lines, force it to be the width of the view. - Rectangle alloc = (a instanceof Rectangle) ? (Rectangle) a : - a.getBounds(); - r0.x = alloc.x; - r0.width = alloc.width; - } - - r0.add(r1); - // The next line is the only difference between this method and - // View's implementation. We're subtracting the width of the second - // character. This is because this method is used by Highlighter - // implementations to get the area to "highlight", and if we don't do - // this, one character too many is highlighted thanks to our - // modelToView() implementation returning the actual width of the - // character requested! - if (p1 > p0) - r0.width -= r1.width; - - return r0; - - } - - /** - * Returns the next tab stop position after a given reference position. This implementation does not support things - * like centering so it ignores the tabOffset argument. - * - * @param x - * the current position >= 0 - * @param tabOffset - * the position within the text stream that the tab occurred at >= 0. - * @return the tab stop, measured in points >= 0 - */ - public float nextTabStop(float x, int tabOffset) { - if (tabSize == 0) - return x; - int ntabs = (((int) x) - tabBase) / tabSize; - return tabBase + ((ntabs + 1) * tabSize); - } - - /** - * Actually paints the text area. Only lines that have been damaged are repainted. - * - * @param g - * The graphics context with which to paint. - * @param a - * The allocated region in which to render. - * @see #drawLine - */ - public void paint(Graphics g, Shape a) { - - RSyntaxDocument document = (RSyntaxDocument) getDocument(); - - Rectangle alloc = a.getBounds(); - - tabBase = alloc.x; - host = (RSyntaxTextArea) getContainer(); - - Rectangle clip = g.getClipBounds(); - // An attempt to speed things up for files with long lines. Note that - // this will actually slow things down a tad for the common case of - // regular-length lines, but I don't think it'll make a difference - // visually. We'll see... - clipStart = clip.x; - clipEnd = clipStart + clip.width; - - lineHeight = host.getLineHeight(); - ascent = host.getMaxAscent();// metrics.getAscent(); - int heightBelow = (alloc.y + alloc.height) - (clip.y + clip.height); - int linesBelow = Math.max(0, heightBelow / lineHeight); - int heightAbove = clip.y - alloc.y; - int linesAbove = Math.max(0, heightAbove / lineHeight); - int linesTotal = alloc.height / lineHeight; - - if (alloc.height % lineHeight != 0) { - linesTotal++; - } - - Rectangle lineArea = lineToRect(a, linesAbove); - int y = lineArea.y + ascent; - int x = lineArea.x; - Element map = getElement(); - int lineCount = map.getElementCount(); - int endLine = Math.min(lineCount, linesTotal - linesBelow); - - RSyntaxTextAreaHighlighter h = - (RSyntaxTextAreaHighlighter) host.getHighlighter(); - - Graphics2D g2d = (Graphics2D) g; - Token token; - // System.err.println("Painting lines: " + linesAbove + " to " + (endLine-1)); - - for (int line = linesAbove; line < endLine; line++) { - - Element lineElement = map.getElement(line); - int startOffset = lineElement.getStartOffset(); - // int endOffset = (line==lineCount ? lineElement.getEndOffset()-1 : - // lineElement.getEndOffset()-1); - int endOffset = lineElement.getEndOffset() - 1; // Why always "-1"? - h.paintLayeredHighlights(g2d, startOffset, endOffset, - a, host, this); - - // Paint a line of text. - token = document.getTokenListForLine(line); - drawLine(token, g2d, x, y); - y += lineHeight; - - } - - } - - /** - * If the passed-in line is longer than the current longest line, then the longest line is updated. - * - * @param line - * The line to test against the current longest. - * @param lineNumber - * The line number of the passed-in line. - * @return true iff the current longest line was updated. - */ - protected boolean possiblyUpdateLongLine(Element line, int lineNumber) { - float w = getLineWidth(lineNumber); - if (w > longLineWidth) { - longLineWidth = w; - longLine = line; - return true; - } - return false; - } - - /** - * Gives notification that something was removed from the document in a location that this view is responsible for. - * - * @param changes - * the change information from the associated document - * @param a - * the current allocation of the view - * @param f - * the factory to use to rebuild if the view has children - */ - public void removeUpdate(DocumentEvent changes, Shape a, ViewFactory f) { - updateDamage(changes, a, f); - } - - public void setSize(float width, float height) { - super.setSize(width, height); - updateMetrics(); - } - - /** - * Repaint the region of change covered by the given document event. Damages the line that begins the range to cover - * the case when the insert/remove is only on one line. If lines are added or removed, damages the whole view. The - * longest line is checked to see if it has changed. - */ - protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f) { - Component host = getContainer(); - updateMetrics(); - Element elem = getElement(); - DocumentEvent.ElementChange ec = changes.getChange(elem); - Element[] added = (ec != null) ? ec.getChildrenAdded() : null; - Element[] removed = (ec != null) ? ec.getChildrenRemoved() : null; - if (((added != null) && (added.length > 0)) || - ((removed != null) && (removed.length > 0))) { - // lines were added or removed... - if (added != null) { - int addedAt = ec.getIndex(); // FIXME: Is this correct????? - for (int i = 0; i < added.length; i++) - possiblyUpdateLongLine(added[i], addedAt + i); - } - if (removed != null) { - for (Element aRemoved : removed) { - if (aRemoved == longLine) { - longLineWidth = -1; // Must do this!! - calculateLongestLine(); - break; - } - } - } - preferenceChanged(null, true, true); - host.repaint(); - } - - // This occurs when syntax highlighting only changes on lines - // (i.e. beginning a multiline comment). - else if (changes.getType() == DocumentEvent.EventType.CHANGE) { - // System.err.println("Updating the damage due to a CHANGE event..."); - int startLine = changes.getOffset(); - int endLine = changes.getLength(); - damageLineRange(startLine, endLine, a, host); - } - - else { - Element map = getElement(); - int line = map.getElementIndex(changes.getOffset()); - damageLineRange(line, line, a, host); - if (changes.getType() == DocumentEvent.EventType.INSERT) { - // check to see if the line is longer than current - // longest line. - Element e = map.getElement(line); - if (e == longLine) { - // We must recalculate longest line's width here - // because it has gotten longer. - longLineWidth = getLineWidth(line); - preferenceChanged(null, true, false); - } - else { - // If long line gets updated, update the status bars too. - if (possiblyUpdateLongLine(e, line)) - preferenceChanged(null, true, false); - } - } - else if (changes.getType() == DocumentEvent.EventType.REMOVE) { - if (map.getElement(line) == longLine) { - // removed from longest line... recalc - longLineWidth = -1; // Must do this! - calculateLongestLine(); - preferenceChanged(null, true, false); + TokenOrientedView, RSTAView { + + /** + * The default font used by the text area. If this changes we need to + * recalculate the longest line. + */ + private Font font; + + /** + * Font metrics for the current font. + */ + private FontMetrics metrics; + + /** + * The current longest line. This is used to calculate the preferred width + * of the view. Since the calculation is potentially expensive, we try to + * avoid it by stashing which line is currently the longest. + */ + private Element longLine; + private float longLineWidth; + + private int tabSize; + private int tabBase; + + /** + * Cached for each paint() call so each drawLine() call has access to it. + */ + private RSyntaxTextArea host; + + /** + * Cached values to speed up the painting a tad. + */ + private int lineHeight = 0; + private int ascent; + private int clipStart; + private int clipEnd; + + /** + * Temporary token used when we need to "modify" tokens for rendering + * purposes. Since tokens returned from RSyntaxDocuments are treated as + * immutable, we use this temporary token to do that work. + */ + private TokenImpl tempToken; + + + /** + * Constructs a new SyntaxView wrapped around an element. + * + * @param elem The element representing the text to display. + */ + public SyntaxView(Element elem) { + super(elem); + tempToken = new TokenImpl(); + } + + + /** + * Iterate over the lines represented by the child elements + * of the element this view represents, looking for the line + * that is the longest. The longLine variable is updated to + * represent the longest line contained. The font variable + * is updated to indicate the font used to calculate the + * longest line. + */ + void calculateLongestLine() { + Component c = getContainer(); + font = c.getFont(); + metrics = c.getFontMetrics(font); + tabSize = getTabSize() * metrics.charWidth(' '); + Element lines = getElement(); + int n = lines.getElementCount(); + for (int i=0; i longLineWidth) { + longLineWidth = w; + longLine = line; + } + } + } + + + /** + * Gives notification from the document that attributes were changed + * in a location that this view is responsible for. + * + * @param changes the change information from the associated document + * @param a the current allocation of the view + * @param f the factory to use to rebuild if the view has children + * @see View#changedUpdate + */ + @Override + public void changedUpdate(DocumentEvent changes, Shape a, ViewFactory f) { + updateDamage(changes, a, f); + } + + + /** + * Repaint the given line range. + * + * @param line0 The starting line number to repaint. This must + * be a valid line number in the model. + * @param line1 The ending line number to repaint. This must + * be a valid line number in the model. + * @param a The region allocated for the view to render into. + * @param host The component hosting the view (used to call repaint). + */ + protected void damageLineRange(int line0, int line1, Shape a, + Component host) { + if (a != null) { + Rectangle area0 = lineToRect(a, line0); + Rectangle area1 = lineToRect(a, line1); + if ((area0 != null) && (area1 != null)) { + Rectangle dmg = area0.union(area1); // damage. + host.repaint(dmg.x, dmg.y, dmg.width, dmg.height); + } + else { + host.repaint(); + } + } + } + + + /** + * Draws the passed-in text using syntax highlighting for the current + * language. It is assumed that the entire line is either not in a + * selected region, or painting with a selection-foreground color is turned + * off. + * + * @param painter The painter to render the tokens. + * @param token The list of tokens to draw. + * @param g The graphics context in which to draw. + * @param x The x-coordinate at which to draw. + * @param y The y-coordinate at which to draw. + * @return The x-coordinate representing the end of the painted text. + */ + private float drawLine(TokenPainter painter, Token token, Graphics2D g, + float x, float y, int line) { + + float nextX = x; // The x-value at the end of our text. + boolean paintBG = host.getPaintTokenBackgrounds(line, y); + + while (token!=null && token.isPaintable() && nextXtoken.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + nextX = painter.paint(tempToken,g,nextX,y,host, this, clipStart); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int tokenLen = token.length(); + int selCount = Math.min(tokenLen, selEnd-token.getOffset()); + if (selCount==tokenLen) { + nextX = painter.paintSelected(token, g, nextX,y, host, + this, clipStart, useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + nextX = painter.paintSelected(tempToken, g, nextX,y, host, + this, clipStart, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + nextX = painter.paint(token, g, nextX,y, host, this, + clipStart); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + nextX = painter.paintSelected(tempToken, g, nextX,y, host, this, + clipStart, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + nextX = painter.paint(token, g, nextX,y, host, this, clipStart); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + nextX = painter.paintSelected(token, g, nextX,y, host, this, + clipStart, useSTC); + } + + // This token is entirely unselected + else { + nextX = painter.paint(token, g, nextX,y, host, this, clipStart); + } + + token = token.getNextToken(); + + } + + // NOTE: We should re-use code from Token (paintBackground()) here, + // but don't because I'm just too lazy. + if (host.getEOLMarkersVisible()) { + g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); + g.setFont(host.getFontForTokenType(Token.WHITESPACE)); + g.drawString("\u00B6", nextX, y); + } + + // Return the x-coordinate at the end of the painted text. + return nextX; + + } + + + /** + * Calculates the width of the line represented by the given element. + * + * @param lineNumber The line number of the specified line in the document. + * @return The width of the line. + */ + private float getLineWidth(int lineNumber) { + Token tokenList = ((RSyntaxDocument)getDocument()). + getTokenListForLine(lineNumber); + return RSyntaxUtilities.getTokenListWidth(tokenList, + (RSyntaxTextArea)getContainer(), + this); + } + + + /** + * Provides a way to determine the next visually represented model + * location that one might place a caret. Some views may not be visible, + * they might not be in the same order found in the model, or they just + * might not allow access to some of the locations in the model. + * + * @param pos the position to convert >= 0 + * @param a the allocated region to render into + * @param direction the direction from the current position that can + * be thought of as the arrow keys typically found on a keyboard. + * This may be SwingConstants.WEST, SwingConstants.EAST, + * SwingConstants.NORTH, or SwingConstants.SOUTH. + * @return the location within the model that best represents the next + * location visual position. + * @exception BadLocationException If the offset specified is invalid. + * @exception IllegalArgumentException for an invalid direction + */ + @Override + public int getNextVisualPositionFrom(int pos, Position.Bias b, Shape a, + int direction, Position.Bias[] biasRet) + throws BadLocationException { + return RSyntaxUtilities.getNextVisualPositionFrom(pos, b, a, + direction, biasRet, this); + } + + + /** + * Determines the preferred span for this view along an + * axis. + * + * @param axis may be either View.X_AXIS or View.Y_AXIS + * @return the span the view would like to be rendered into >= 0. + * Typically the view is told to render into the span + * that is returned, although there is no guarantee. + * The parent may choose to resize or break the view. + * @exception IllegalArgumentException for an invalid axis + */ + @Override + public float getPreferredSpan(int axis) { + updateMetrics(); + switch (axis) { + case View.X_AXIS: + float span = longLineWidth + getRhsCorrection(); // fudge factor + if (host.getEOLMarkersVisible()) { + span += metrics.charWidth('\u00B6'); + } + return span; + case View.Y_AXIS: + // We update lineHeight here as when this method is first + // called, lineHeight isn't initialized. If we don't do it + // here, we get no vertical scrollbar (as lineHeight==0). + lineHeight = host!=null ? host.getLineHeight() : lineHeight; +// return getElement().getElementCount() * lineHeight; + int visibleLineCount = getElement().getElementCount(); + if (host.isCodeFoldingEnabled()) { + visibleLineCount -= host.getFoldManager().getHiddenLineCount(); } - } - } - } - - /** - * Checks to see if the font metrics and longest line are up-to-date. - */ - protected void updateMetrics() { - host = (RSyntaxTextArea) getContainer(); - Font f = host.getFont(); - if (font != f) { - // The font changed, we need to recalculate the longest line! - // This also updates cached font and tab size. - calculateLongestLine(); - } - } - - /** - * Provides a mapping from the view coordinate space to the logical coordinate space of the model. - * - * @param fx - * the X coordinate >= 0 - * @param fy - * the Y coordinate >= 0 - * @param a - * the allocated region to render into - * @return the location within the model that best represents the given point in the view >= 0 - */ - public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) { - - bias[0] = Position.Bias.Forward; - - Rectangle alloc = a.getBounds(); - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - int x = (int) fx; - int y = (int) fy; - - // If they're asking about a view position above the area covered by - // this view, then the position is assumed to be the starting position - // of this view. - if (y < alloc.y) { - return getStartOffset(); - } - - // If they're asking about a position below this view, the position - // is assumed to be the ending position of this view. - else if (y > alloc.y + alloc.height) { - return getEndOffset() - 1; - } - - // They're asking about a position within the coverage of this view - // vertically. So, we figure out which line the point corresponds to. - // If the line is greater than the number of lines contained, then - // simply use the last line as it represents the last possible place - // we can position to. - else { - - Element map = doc.getDefaultRootElement(); - int lineIndex = Math.abs((y - alloc.y) / lineHeight);// metrics.getHeight() ); - if (lineIndex >= map.getElementCount()) - return getEndOffset() - 1; - - Element line = map.getElement(lineIndex); - - // If the point is to the left of the line... - if (x < alloc.x) - return line.getStartOffset(); - - // If the point is to the right of the line... - else if (x > alloc.x + alloc.width) - return line.getEndOffset() - 1; - - else { - // Determine the offset into the text - int p0 = line.getStartOffset(); - Token tokenList = doc.getTokenListForLine(lineIndex); - tabBase = alloc.x; - int offs = tokenList.getListOffset( - (RSyntaxTextArea) getContainer(), - this, tabBase, x); - return offs != -1 ? offs : p0; - } - - } // End of else. - - } - - /** - * {@inheritDoc} - */ - public int yForLineContaining(Rectangle alloc, int offs) - throws BadLocationException { - // line coordinates - Element map = getElement(); - int line = map.getElementIndex(offs); - - // Rectangle lineArea = lineToRect(alloc, lineIndex); - updateMetrics(); - if (metrics != null) { - // NOTE: lineHeight is not initially set here, leading to the - // current line not being highlighted when a document is first - // opened. So, we set it here just in case. - lineHeight = host != null ? host.getLineHeight() : lineHeight; - return alloc.y + line * lineHeight; - } - - return -1; - - } - -} \ No newline at end of file + return visibleLineCount * (float) lineHeight; + default: + throw new IllegalArgumentException("Invalid axis: " + axis); + } + } + + + /** + * Workaround for JTextComponents allowing the caret to be rendered + * entirely off-screen if the entire "previous" character fit entirely. + * + * @return The amount of space to add to the x-axis preferred span. + */ + private int getRhsCorrection() { + int rhsCorrection = 10; + if (host!=null) { + rhsCorrection = host.getRightHandSideCorrection(); + } + return rhsCorrection; + } + + + /** + * Returns the tab size set for the document, defaulting to 5. + * + * @return The tab size. + */ + private int getTabSize() { + Integer i = (Integer)getDocument().getProperty( + PlainDocument.tabSizeAttribute); + int size = (i != null) ? i : 5; + return size; + } + + + /** + * Returns a token list for the physical line above the physical + * line containing the specified offset into the document. Note that for + * this plain (non-wrapped) view, this is simply the token list for the + * logical line above the line containing offset, since lines + * are not wrapped. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * before this one. If offset is in the first line in + * the document, null is returned. + */ + @Override + public Token getTokenListForPhysicalLineAbove(int offset) { + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = document.getDefaultRootElement(); +int line = map.getElementIndex(offset); +FoldManager fm = host.getFoldManager(); +if (fm==null) { + line--; + if (line>=0) { + return document.getTokenListForLine(line); + } +} +else { + line = fm.getVisibleLineAbove(line); + if (line>=0) { + return document.getTokenListForLine(line); + } +} +// int line = map.getElementIndex(offset) - 1; +// if (line>=0) +// return document.getTokenListForLine(line); + return null; + } + + + /** + * Returns a token list for the physical line below the physical + * line containing the specified offset into the document. Note that for + * this plain (non-wrapped) view, this is simply the token list for the + * logical line below the line containing offset, since lines + * are not wrapped. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * after this one. If offset is in the last physical + * line in the document, null is returned. + */ + @Override + public Token getTokenListForPhysicalLineBelow(int offset) { + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = document.getDefaultRootElement(); + int lineCount = map.getElementCount(); +int line = map.getElementIndex(offset); +if (!host.isCodeFoldingEnabled()) { + if (line=0 && line + * + * This is implemented to subtract the width of the second character, as + * this view's modelToView actually returns the width of the + * character instead of "1" or "0" like the View implementations in + * javax.swing.text. Thus, if we don't override this method, + * the View implementation will return one character's width + * too much for its consumers (implementations of + * javax.swing.text.Highlighter). + * + * @param p0 the position of the first character (>=0) + * @param b0 The bias of the first character position, toward the previous + * character or the next character represented by the offset, in + * case the position is a boundary of two views; b0 + * will have one of these values: + *
      + *
    • Position.Bias.Forward + *
    • Position.Bias.Backward + *
    + * @param p1 the position of the last character (>=0) + * @param b1 the bias for the second character position, defined + * one of the legal values shown above + * @param a the area of the view, which encompasses the requested region + * @return the bounding box which is a union of the region specified + * by the first and last character positions + * @exception BadLocationException if the given position does + * not represent a valid location in the associated document + * @exception IllegalArgumentException if b0 or + * b1 are not one of the + * legal Position.Bias values listed above + * @see View#viewToModel + */ + @Override + public Shape modelToView(int p0, Position.Bias b0, + int p1, Position.Bias b1, + Shape a) throws BadLocationException { + + Shape s0 = modelToView(p0, a, b0); + Shape s1; + if (p1 ==getEndOffset()) { + try { + s1 = modelToView(p1, a, b1); + } catch (BadLocationException ble) { + s1 = null; + } + if (s1 == null) { + // Assume extends left to right. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, + 1, alloc.height); + } + } + else { + s1 = modelToView(p1, a, b1); + } + Rectangle r0 = s0 instanceof Rectangle ? (Rectangle)s0 : s0.getBounds(); + Rectangle r1 = s1 instanceof Rectangle ? (Rectangle)s1 : s1.getBounds(); + if (r0.y != r1.y) { + // If it spans lines, force it to be the width of the view. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + r0.x = alloc.x; + r0.width = alloc.width; + } + + r0.add(r1); + // The next line is the only difference between this method and + // View's implementation. We're subtracting the width of the second + // character. This is because this method is used by Highlighter + // implementations to get the area to "highlight", and if we don't do + // this, one character too many is highlighted thanks to our + // modelToView() implementation returning the actual width of the + // character requested! + if (p1>p0) { + r0.width -= r1.width; + } + + return r0; + + } + + + /** + * Returns the next tab stop position after a given reference position. + * This implementation does not support things like centering so it + * ignores the tabOffset argument. + * + * @param x the current position >= 0 + * @param tabOffset the position within the text stream + * that the tab occurred at >= 0. + * @return the tab stop, measured in points >= 0 + */ + @Override + public float nextTabStop(float x, int tabOffset) { + if (tabSize == 0) { + return x; + } + int ntabs = (((int)x) - tabBase) / tabSize; + return tabBase + ((ntabs + 1f) * tabSize); + } + + + /** + * Actually paints the text area. Only lines that have been damaged are + * repainted. + * + * @param g The graphics context with which to paint. + * @param a The allocated region in which to render. + */ + @Override + public void paint(Graphics g, Shape a) { + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + + Rectangle alloc = a.getBounds(); + + tabBase = alloc.x; + host = (RSyntaxTextArea)getContainer(); + + Rectangle clip = g.getClipBounds(); + // An attempt to speed things up for files with long lines. Note that + // this will actually slow things down a bit for the common case of + // regular-length lines, but it doesn't make a perceivable difference. + clipStart = clip.x; + clipEnd = clipStart + clip.width; + + lineHeight = host.getLineHeight(); + ascent = host.getMaxAscent();//metrics.getAscent(); + int heightAbove = clip.y - alloc.y; + int linesAbove = Math.max(0, heightAbove / lineHeight); + + FoldManager fm = host.getFoldManager(); + linesAbove += fm.getHiddenLineCountAbove(linesAbove, true); + Rectangle lineArea = lineToRect(a, linesAbove); + int y = lineArea.y + ascent; + int x = lineArea.x; + Element map = getElement(); + int lineCount = map.getElementCount(); + + // Whether token styles should always be painted, even in selections + int selStart = host.getSelectionStart(); + int selEnd = host.getSelectionEnd(); + + RSyntaxTextAreaHighlighter h = + (RSyntaxTextAreaHighlighter)host.getHighlighter(); + + Graphics2D g2d = (Graphics2D)g; + Token token; + //System.err.println("Painting lines: " + linesAbove + " to " + (endLine-1)); + + TokenPainter painter = host.getTokenPainter(); + int line = linesAbove; + //int count = 0; + while (y=selEnd || + endOffset alloc.y + alloc.height) { + return host.getLastVisibleOffset(); + } + + // They're asking about a position within the coverage of this view + // vertically. So, we figure out which line the point corresponds to. + // If the line is greater than the number of lines contained, then + // simply use the last line as it represents the last possible place + // we can position to. + else { + + Element map = doc.getDefaultRootElement(); + lineHeight = host!=null ? host.getLineHeight() : lineHeight; + int lineIndex = Math.abs((y - alloc.y) / lineHeight);//metrics.getHeight() ); + FoldManager fm = host.getFoldManager(); + //System.out.print("--- " + lineIndex); + lineIndex += fm.getHiddenLineCountAbove(lineIndex, true); + //System.out.println(" => " + lineIndex); + if (lineIndex >= map.getElementCount()) { + return host.getLastVisibleOffset(); + } + + Element line = map.getElement(lineIndex); + + // If the point is to the left of the line... + if (x < alloc.x) { + return line.getStartOffset(); + } + else if (x > alloc.x + alloc.width) { + return line.getEndOffset() - 1; + } + else { + // Determine the offset into the text + int p0 = line.getStartOffset(); + Token tokenList = doc.getTokenListForLine(lineIndex); + tabBase = alloc.x; + int offs = tokenList.getListOffset( + (RSyntaxTextArea)getContainer(), + this, tabBase, x); + return offs!=-1 ? offs : p0; + } + + } // End of else. + + } + + + @Override + public int yForLine(Rectangle alloc, int line) throws BadLocationException { + + //Rectangle lineArea = lineToRect(alloc, lineIndex); + updateMetrics(); + if (metrics != null) { + // NOTE: lineHeight is not initially set here, leading to the + // current line not being highlighted when a document is first + // opened. So, we set it here just in case. + lineHeight = host!=null ? host.getLineHeight() : lineHeight; + if (host != null) { + FoldManager fm = host.getFoldManager(); + if (!fm.isLineHidden(line)) { + line -= fm.getHiddenLineCountAbove(line); + return alloc.y + line * lineHeight; + } + } + } + + return -1; + + } + + + @Override + public int yForLineContaining(Rectangle alloc, int offs) + throws BadLocationException { + Element map = getElement(); + int line = map.getElementIndex(offs); + return yForLine(alloc, line); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java old mode 100644 new mode 100755 index 0d8baa94e..a6ba192c1 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TextEditorPane.java @@ -3,679 +3,749 @@ * * TextEditorPane.java - A syntax highlighting text area that has knowledge of * the file it is editing on disk. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; -import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; -import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; + +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; import org.fife.io.UnicodeReader; import org.fife.io.UnicodeWriter; -import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rtextarea.RTextAreaEditorKit; /** - * An extension of {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea} that adds information about the file being - * edited, such as: - * + * An extension of {@link org.fife.ui.rsyntaxtextarea.RSyntaxTextArea} + * that adds information about the file being edited, such as: + * *
      - *
    • Its name and location. - *
    • Is it dirty? - *
    • Is it read-only? - *
    • The last time it was loaded or saved to disk (local files only). - *
    • The file's encoding on disk. - *
    • Easy access to the line separator. + *
    • Its name and location. + *
    • Is it dirty? + *
    • Is it read-only? + *
    • The last time it was loaded or saved to disk (local files only). + *
    • The file's encoding on disk. + *
    • Easy access to the line separator. *
    - * - * Loading and saving is also built into the editor. - *

    - * Both local and remote files (e.g. ftp) are supported. See the {@link FileLocation} class for more information. - * + * + * Loading and saving is also built into the editor.

    + * + * When saving UTF-8 files, whether or not a BOM is written is controlled by + * the {@link UnicodeWriter} class. + * Use {@link UnicodeWriter#setWriteUtf8BOM(boolean)} to toggle writing BOMs + * for UTF-8 files.

    + * + * Both local and remote files (e.g. ftp) are supported. See the + * {@link FileLocation} class for more information. + * * @author Robert Futrell * @version 1.0 * @see FileLocation */ public class TextEditorPane extends RSyntaxTextArea implements - DocumentListener { - - private static final long serialVersionUID = 1L; - - public static final String FULL_PATH_PROPERTY = "TextEditorPane.fileFullPath"; - public static final String DIRTY_PROPERTY = "TextEditorPane.dirty"; - public static final String READ_ONLY_PROPERTY = "TextEditorPane.readOnly"; - - /** - * The location of the file being edited. - */ - private FileLocation loc; - - /** - * The charset to use when reading or writing this file. - */ - private String charSet; - - /** - * Whether the file should be treated as read-only. - */ - private boolean readOnly; - - /** - * Whether the file is dirty. - */ - private boolean dirty; - - /** - * The last time this file was modified on disk, for local files. For remote files, this value should always be - * {@link #LAST_MODIFIED_UNKNOWN}. - */ - private long lastSaveOrLoadTime; - - /** - * The value returned by {@link #getLastSaveOrLoadTime()} for remote files. - */ - public static final long LAST_MODIFIED_UNKNOWN = 0; - - /** - * The default name given to files if none is specified in a constructor. - */ - private static final String DEFAULT_FILE_NAME = "Untitled.txt"; - - /** - * Constructor. The file will be given a default name. - */ - public TextEditorPane() { - this(INSERT_MODE); - } - - /** - * Constructor. The file will be given a default name. - * - * @param textMode - * Either INSERT_MODE or OVERWRITE_MODE. - */ - public TextEditorPane(int textMode) { - this(textMode, false); - } - - /** - * Creates a new TextEditorPane. The file will be given a default name. - * - * @param textMode - * Either INSERT_MODE or OVERWRITE_MODE. - * @param wordWrapEnabled - * Whether or not to use word wrap in this pane. - */ - public TextEditorPane(int textMode, boolean wordWrapEnabled) { - super(textMode); - setLineWrap(wordWrapEnabled); - try { - init(null, null); - } catch (IOException ioe) { // Never happens - ioe.printStackTrace(); - } - } - - /** - * Creates a new TextEditorPane. - * - * @param textMode - * Either INSERT_MODE or OVERWRITE_MODE. - * @param wordWrapEnabled - * Whether or not to use word wrap in this pane. - * @param loc - * The location of the text file being edited. If this value is null, a file named - * "Untitled.txt" in the current directory is used. - * @throws IOException - * If an IO error occurs reading the file at loc. This of course won't happen if - * loc is null. - */ - public TextEditorPane(int textMode, boolean wordWrapEnabled, - FileLocation loc) throws IOException { - this(textMode, wordWrapEnabled, loc, null); - } - - /** - * Creates a new TextEditorPane. - * - * @param textMode - * Either INSERT_MODE or OVERWRITE_MODE. - * @param wordWrapEnabled - * Whether or not to use word wrap in this pane. - * @param loc - * The location of the text file being edited. If this value is null, a file named - * "Untitled.txt" in the current directory is used. This file is displayed as empty even if it actually - * exists. - * @param defaultEnc - * The default encoding to use when opening the file, if the file is not Unicode. If this value is - * null, a system default value is used. - * @throws IOException - * If an IO error occurs reading the file at loc. This of course won't happen if - * loc is null. - */ - public TextEditorPane(int textMode, boolean wordWrapEnabled, - FileLocation loc, String defaultEnc) throws IOException { - super(textMode); - setLineWrap(wordWrapEnabled); - init(loc, defaultEnc); - } - - /** - * Callback for when styles in the current document change. This method is never called. - * - * @param e - * The document event. - */ - public void changedUpdate(DocumentEvent e) { - } - - /** - * Returns the default encoding for this operating system. - * - * @return The default encoding. - */ - private static final String getDefaultEncoding() { - // TODO: Change to "Charset.defaultCharset().name()" when 1.4 support - // is no longer needed. - // NOTE: The "file.encoding" property is not guaranteed to be set by - // the spec, so we cannot rely on it. - String encoding = System.getProperty("file.encoding"); - if (encoding == null) { - try { - File f = File.createTempFile("rsta", null); - FileWriter w = new FileWriter(f); - encoding = w.getEncoding(); - w.close(); - f.deleteOnExit();// delete(); Keep FindBugs happy - } catch (IOException ioe) { - encoding = "US-ASCII"; - } - } - return encoding; - } - - /** - * Returns the encoding to use when reading or writing this file. - * - * @return The encoding. - * @see #setEncoding(String) - */ - public String getEncoding() { - return charSet; - } - - /** - * Returns the full path to this document. - * - * @return The full path to the document. - */ - public String getFileFullPath() { - return loc.getFileFullPath(); - } - - /** - * Returns the file name of this document. - * - * @return The file name. - */ - public String getFileName() { - return loc.getFileName(); - } - - /** - * Returns the timestamp for when this file was last loaded or saved by this editor pane. If the file has - * been modified on disk by another process after it was loaded into this editor pane, this method will not return - * the actual file's last modified time. - *

    - * - * For remote files, this method will always return {@link #LAST_MODIFIED_UNKNOWN}. - * - * @return The timestamp when this file was last loaded or saved by this editor pane, if it is a local file, or - * {@link #LAST_MODIFIED_UNKNOWN} if it is a remote file. - * @see #isModifiedOutsideEditor() - */ - public long getLastSaveOrLoadTime() { - return lastSaveOrLoadTime; - } - - /** - * Returns the line separator used when writing this file (e.g. "\n", "\r\n", or " - * \r"). - *

    - * - * Note that this value is an Object and not a String as that is the way the - * {@link Document} interface defines its property values. If you always use {@link #setLineSeparator(String)} to - * modify this value, then the value returned from this method will always be a String. - * - * @return The line separator. If this value is null, then the system default line separator is used - * (usually the value of System.getProperty("line.separator")). - * @see #setLineSeparator(String) - * @see #setLineSeparator(String, boolean) - */ - public Object getLineSeparator() { - return getDocument().getProperty( - RTextAreaEditorKit.EndOfLineStringProperty); - } - - /** - * Initializes this editor with the specified file location. - * - * @param loc - * The file location. If this is null, a default location is used and an empty file is - * displayed. - * @param defaultEnc - * The default encoding to use when opening the file, if the file is not Unicode. If this value is - * null, a system default value is used. - * @throws IOException - * If an IO error occurs reading from loc. If loc is null, this - * cannot happen. - */ - private void init(FileLocation loc, String defaultEnc) throws IOException { - - if (loc == null) { - // Don't call load() just in case Untitled.txt actually exists, - // just to ensure there is no chance of an IOException being thrown - // in the default case. - this.loc = FileLocation.create(DEFAULT_FILE_NAME); - charSet = defaultEnc == null ? getDefaultEncoding() : defaultEnc; - // Ensure that line separator always has a value, even if the file - // does not exist (or is the "default" file). This makes life - // easier for host applications that want to display this value. - setLineSeparator(System.getProperty("line.separator")); - } - else { - load(loc, defaultEnc); // Sets this.loc - } - - if (this.loc.isLocalAndExists()) { - File file = new File(this.loc.getFileFullPath()); - lastSaveOrLoadTime = file.lastModified(); - setReadOnly(!file.canWrite()); - } - else { - lastSaveOrLoadTime = LAST_MODIFIED_UNKNOWN; - setReadOnly(false); - } - - setDirty(false); - - } - - /** - * Callback for when text is inserted into the document. - * - * @param e - * Information on the insertion. - */ - public void insertUpdate(DocumentEvent e) { - if (!dirty) { - setDirty(true); - } - } - - /** - * Returns whether or not the text in this editor has unsaved changes. - * - * @return Whether or not the text has unsaved changes. - */ - public boolean isDirty() { - return dirty; - } - - /** - * Returns whether this file is a local file. - * - * @return Whether this is a local file. - */ - public boolean isLocal() { - return loc.isLocal(); - } - - /** - * Returns whether this is a local file that already exists. - * - * @return Whether this is a local file that already exists. - */ - public boolean isLocalAndExists() { - return loc.isLocalAndExists(); - } - - /** - * Returns whether the text file has been modified outside of this editor since the last load or save operation. - * Note that if this is a remote file, this method will always return false. - *

    - * - * This method may be used by applications to implement a reloading feature, where the user is prompted to reload a - * file if it has been modified since their last open or save. - * - * @return Whether the text file has been modified outside of this editor. - * @see #getLastSaveOrLoadTime() - */ - public boolean isModifiedOutsideEditor() { - return loc.getActualLastModified() > getLastSaveOrLoadTime(); - } - - /** - * Returns whether or not the text area should be treated as read-only. - * - * @return Whether or not the text area should be treated as read-only. - * @see #setReadOnly(boolean) - */ - public boolean isReadOnly() { - return readOnly; - } - - /** - * Loads the specified file in this editor. - * - * @param loc - * The location of the file to load. This cannot be null. - * @param defaultEnc - * The encoding to use when loading/saving the file. This encoding will only be used if the file is not - * Unicode. If this value is null, the system default encoding is used. - * @throws IOException - * If an IO error occurs. - * @see #save() - * @see #saveAs(FileLocation) - */ - public void load(FileLocation loc, String defaultEnc) throws IOException { - - this.loc = loc; - - // For new local files, just go with it. - if (loc.isLocal() && !loc.isLocalAndExists()) { - this.charSet = defaultEnc != null ? defaultEnc : getDefaultEncoding(); - return; - } - - // Old local files and remote files, load 'em up. UnicodeReader will - // check for BOMs and handle them correctly in all cases, then pass - // rest of stream down to InputStreamReader. - UnicodeReader ur = new UnicodeReader(loc.getInputStream(), defaultEnc); - charSet = ur.getEncoding(); - - // Remove listener so dirty flag doesn't get set when loading a file. - Document doc = getDocument(); - doc.removeDocumentListener(this); - BufferedReader r = new BufferedReader(ur); - try { - read(r, null); - } finally { - doc.addDocumentListener(this); - r.close(); - } - - } - - /** - * Reloads this file from disk. The file must exist for this operation to not throw an exception. - *

    - * - * The file's "dirty" state will be set to false after this operation. If this is a local file, its - * "last modified" time is updated to reflect that of the actual file. - *

    - * - * Note that if the file has been modified on disk, and is now a Unicode encoding when before it wasn't (or if it is - * a different Unicode now), this will cause this {@link TextEditorPane}'s encoding to change. Otherwise, the file's - * encoding will stay the same. - * - * @throws IOException - * If the file does not exist, or if an IO error occurs reading the file. - * @see #isLocalAndExists() - */ - public void reload() throws IOException { - String oldEncoding = getEncoding(); - UnicodeReader ur = new UnicodeReader(loc.getInputStream(), oldEncoding); - String encoding = ur.getEncoding(); - BufferedReader r = new BufferedReader(ur); - try { - read(r, null); // Dumps old contents. - } finally { - r.close(); - } - setEncoding(encoding); - setDirty(false); - syncLastSaveOrLoadTimeToActualFile(); - discardAllEdits(); // Prevent user from being able to undo the reload - } - - /** - * Called whenever text is removed from this editor. - * - * @param e - * The document event. - */ - public void removeUpdate(DocumentEvent e) { - if (!dirty) { - setDirty(true); - } - } - - /** - * Saves the file in its current encoding. - *

    - * - * The text area's "dirty" state is set to false, and if this is a local file, its "last modified" time - * is updated. - * - * @throws IOException - * If an IO error occurs. - * @see #saveAs(FileLocation) - * @see #load(FileLocation, String) - */ - public void save() throws IOException { - saveImpl(loc); - setDirty(false); - syncLastSaveOrLoadTimeToActualFile(); - } - - /** - * Saves this file in a new local location. This method fires a property change event of type - * {@link #FULL_PATH_PROPERTY}. - * - * @param loc - * The location to save to. - * @throws IOException - * If an IO error occurs. - * @see #save() - * @see #load(FileLocation, String) - */ - public void saveAs(FileLocation loc) throws IOException { - saveImpl(loc); - // No exception thrown - we can "rename" the file. - String old = getFileFullPath(); - this.loc = loc; - setDirty(false); - lastSaveOrLoadTime = loc.getActualLastModified(); - firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); - } - - /** - * Saves the text in this editor to the specified location. - * - * @param loc - * The location to save to. - * @throws IOException - * If an IO error occurs. - */ - private void saveImpl(FileLocation loc) throws IOException { - OutputStream out = loc.getOutputStream(); - PrintWriter w = new PrintWriter( - new BufferedWriter(new UnicodeWriter(out, getEncoding()))); - try { - write(w); - } finally { - w.close(); - } - } - - /** - * Sets whether or not this text in this editor has unsaved changes. This fires a property change event of type - * {@link #DIRTY_PROPERTY}. - * - * @param dirty - * Whether or not the text has beeen modified. - * @see #isDirty() - */ - private void setDirty(boolean dirty) { - if (this.dirty != dirty) { - this.dirty = dirty; - firePropertyChange(DIRTY_PROPERTY, !dirty, dirty); - } - } - - /** - * Sets the document for this editor. - * - * @param doc - * The new document. - */ - public void setDocument(Document doc) { - Document old = getDocument(); - if (old != null) { - old.removeDocumentListener(this); - } - super.setDocument(doc); - doc.addDocumentListener(this); - } - - /** - * Sets the encoding to use when reading or writing this file. This method sets the editor's dirty flag when the - * encoding is changed. - * - * @param encoding - * The new encoding. - * @throws UnsupportedCharsetException - * If the encoding is not supported. - * @throws NullPointerException - * If encoding is null. - * @see #getEncoding() - */ - public void setEncoding(String encoding) { - if (encoding == null) { - throw new NullPointerException("encoding cannot be null"); - } - else if (!Charset.isSupported(encoding)) { - throw new UnsupportedCharsetException(encoding); - } - if (charSet == null || !charSet.equals(encoding)) { - charSet = encoding; - setDirty(true); - } - } - - /** - * Sets the line separator sequence to use when this file is saved (e.g. "\n", "\r\n" or " - * \r"). - * - * Besides parameter checking, this method is preferred over getDocument().putProperty() because it - * sets the editor's dirty flag when the line separator is changed. - * - * @param separator - * The new line separator. - * @throws NullPointerException - * If separator is null. - * @throws IllegalArgumentException - * If separator is not one of "\n", "\r\n" or "\r". - * @see #getLineSeparator() - */ - public void setLineSeparator(String separator) { - setLineSeparator(separator, true); - } - - /** - * Sets the line separator sequence to use when this file is saved (e.g. "\n", "\r\n" or " - * \r"). - * - * Besides parameter checking, this method is preferred over getDocument().putProperty() because can - * set the editor's dirty flag when the line separator is changed. - * - * @param separator - * The new line separator. - * @param setDirty - * Whether the dirty flag should be set if the line separator is changed. - * @throws NullPointerException - * If separator is null. - * @throws IllegalArgumentException - * If separator is not one of "\n", "\r\n" or "\r". - * @see #getLineSeparator() - */ - public void setLineSeparator(String separator, boolean setDirty) { - if (separator == null) { - throw new NullPointerException("terminator cannot be null"); - } - if (!"\r\n".equals(separator) && !"\n".equals(separator) && - !"\r".equals(separator)) { - throw new IllegalArgumentException("Invalid line terminator"); - } - Document doc = getDocument(); - Object old = doc.getProperty( - RTextAreaEditorKit.EndOfLineStringProperty); - if (!separator.equals(old)) { - doc.putProperty(RTextAreaEditorKit.EndOfLineStringProperty, - separator); - if (setDirty) { - setDirty(true); - } - } - } - - /** - * Sets whether or not this text area should be treated as read-only. This fires a property change event of type - * {@link #READ_ONLY_PROPERTY}. - * - * @param readOnly - * Whether or not the document is read-only. - * @see #isReadOnly() - */ - public void setReadOnly(boolean readOnly) { - if (this.readOnly != readOnly) { - this.readOnly = readOnly; - firePropertyChange(READ_ONLY_PROPERTY, !readOnly, readOnly); - } - } - - /** - * Syncs this text area's "last saved or loaded" time to that of the file being edited, if that file is local and - * exists. If the file is remote or is local but does not yet exist, nothing happens. - *

    - * - * You normally do not have to call this method, as the "last saved or loaded" time for {@link TextEditorPane}s is - * kept up-to-date internally during such operations as {@link #save()}, {@link #reload()}, etc. - * - * @see #getLastSaveOrLoadTime() - * @see #isModifiedOutsideEditor() - */ - public void syncLastSaveOrLoadTimeToActualFile() { - if (loc.isLocalAndExists()) { - lastSaveOrLoadTime = loc.getActualLastModified(); - } - } - -} \ No newline at end of file + DocumentListener { + + private static final long serialVersionUID = 1L; + + /** + * Property change event fired when the file path this text area references + * is updated. + * + * @see #load(FileLocation, String) + * @see #saveAs(FileLocation) + */ + public static final String FULL_PATH_PROPERTY = "TextEditorPane.fileFullPath"; + + /** + * Property change event fired when the text area's dirty flag changes. + * + * @see #setDirty(boolean) + */ + public static final String DIRTY_PROPERTY = "TextEditorPane.dirty"; + + /** + * Property change event fired when the text area should be treated as + * read-only, and previously it should not, or vice-versa. + * + * @see #setReadOnly(boolean) + */ + public static final String READ_ONLY_PROPERTY = "TextEditorPane.readOnly"; + + /** + * Property change event fired when the text area's encoding changes. + * + * @see #setEncoding(String) + */ + public static final String ENCODING_PROPERTY = "TextEditorPane.encoding"; + + /** + * The location of the file being edited. + */ + private FileLocation loc; + + /** + * The charset to use when reading or writing this file. + */ + private String charSet; + + /** + * Whether the file should be treated as read-only. + */ + private boolean readOnly; + + /** + * Whether the file is dirty. + */ + private boolean dirty; + + /** + * The last time this file was modified on disk, for local files. + * For remote files, this value should always be + * {@link #LAST_MODIFIED_UNKNOWN}. + */ + private long lastSaveOrLoadTime; + + /** + * The value returned by {@link #getLastSaveOrLoadTime()} for remote files. + */ + public static final long LAST_MODIFIED_UNKNOWN = 0; + + /** + * The default name given to files if none is specified in a constructor. + */ + private static final String DEFAULT_FILE_NAME = "Untitled.txt"; + + + /** + * Constructor. The file will be given a default name. + */ + public TextEditorPane() { + this(INSERT_MODE); + } + + + /** + * Constructor. The file will be given a default name. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + */ + public TextEditorPane(int textMode) { + this(textMode, false); + } + + + /** + * Creates a new TextEditorPane. The file will be given + * a default name. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled) { + super(textMode); + setLineWrap(wordWrapEnabled); + try { + init(null, null); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + } + + + /** + * Creates a new TextEditorPane. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + * @param loc The location of the text file being edited. If this value + * is null, a file named "Untitled.txt" in the current + * directory is used. + * @throws IOException If an IO error occurs reading the file at + * loc. This of course won't happen if + * loc is null. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled, + FileLocation loc) throws IOException { + this(textMode, wordWrapEnabled, loc, null); + } + + + /** + * Creates a new TextEditorPane. + * + * @param textMode Either INSERT_MODE or + * OVERWRITE_MODE. + * @param wordWrapEnabled Whether or not to use word wrap in this pane. + * @param loc The location of the text file being edited. If this value + * is null, a file named "Untitled.txt" in the current + * directory is used. This file is displayed as empty even if it + * actually exists. + * @param defaultEnc The default encoding to use when opening the file, + * if the file is not Unicode. If this value is null, + * a system default value is used. + * @throws IOException If an IO error occurs reading the file at + * loc. This of course won't happen if + * loc is null. + */ + public TextEditorPane(int textMode, boolean wordWrapEnabled, + FileLocation loc, String defaultEnc) throws IOException { + super(textMode); + setLineWrap(wordWrapEnabled); + init(loc, defaultEnc); + } + + + /** + * Callback for when styles in the current document change. + * This method is never called. + * + * @param e The document event. + */ + @Override + public void changedUpdate(DocumentEvent e) { + } + + + + /** + * Returns the default encoding for this operating system. + * + * @return The default encoding. + */ + private static String getDefaultEncoding() { + // NOTE: The "file.encoding" system property is not guaranteed to be + // set by the spec, so we cannot rely on it. + return Charset.defaultCharset().name(); + } + + + /** + * Returns the encoding to use when reading or writing this file. + * + * @return The encoding. + * @see #setEncoding(String) + */ + public String getEncoding() { + return charSet; + } + + + /** + * Returns the full path to this document. + * + * @return The full path to the document. + */ + public String getFileFullPath() { + return loc==null ? null : loc.getFileFullPath(); + } + + + /** + * Returns the file name of this document. + * + * @return The file name. + */ + public String getFileName() { + return loc==null ? null : loc.getFileName(); + } + + + /** + * Returns the timestamp for when this file was last loaded or saved + * by this editor pane. If the file has been modified on disk by + * another process after it was loaded into this editor pane, this method + * will not return the actual file's last modified time.

    + * + * For remote files, this method will always return + * {@link #LAST_MODIFIED_UNKNOWN}. + * + * @return The timestamp when this file was last loaded or saved by this + * editor pane, if it is a local file, or + * {@link #LAST_MODIFIED_UNKNOWN} if it is a remote file. + * @see #isModifiedOutsideEditor() + */ + public long getLastSaveOrLoadTime() { + return lastSaveOrLoadTime; + } + + + /** + * Returns the line separator used when writing this file (e.g. + * "\n", "\r\n", or "\r").

    + * + * Note that this value is an Object and not a + * String as that is the way the {@link Document} interface + * defines its property values. If you always use + * {@link #setLineSeparator(String)} to modify this value, then the value + * returned from this method will always be a String. + * + * @return The line separator. If this value is null, then + * the system default line separator is used (usually the value + * of System.getProperty("line.separator")). + * @see #setLineSeparator(String) + * @see #setLineSeparator(String, boolean) + */ + public Object getLineSeparator() { + return getDocument().getProperty( + RTextAreaEditorKit.EndOfLineStringProperty); + } + + + /** + * Initializes this editor with the specified file location. + * + * @param loc The file location. If this is null, a default + * location is used and an empty file is displayed. + * @param defaultEnc The default encoding to use when opening the file, + * if the file is not Unicode. If this value is null, + * a system default value is used. + * @throws IOException If an IO error occurs reading from loc. + * If loc is null, this cannot happen. + */ + private void init(FileLocation loc, String defaultEnc) throws IOException { + + if (loc==null) { + // Don't call load() just in case Untitled.txt actually exists, + // just to ensure there is no chance of an IOException being thrown + // in the default case. + this.loc = FileLocation.create(DEFAULT_FILE_NAME); + charSet = defaultEnc==null ? getDefaultEncoding() : defaultEnc; + // Ensure that line separator always has a value, even if the file + // does not exist (or is the "default" file). This makes life + // easier for host applications that want to display this value. + setLineSeparator(System.getProperty("line.separator")); + } + else { + load(loc, defaultEnc); // Sets this.loc + } + + if (this.loc.isLocalAndExists()) { + File file = new File(this.loc.getFileFullPath()); + lastSaveOrLoadTime = file.lastModified(); + setReadOnly(!file.canWrite()); + } + else { + lastSaveOrLoadTime = LAST_MODIFIED_UNKNOWN; + setReadOnly(false); + } + + setDirty(false); + + } + + + /** + * Callback for when text is inserted into the document. + * + * @param e Information on the insertion. + */ + @Override + public void insertUpdate(DocumentEvent e) { + if (!dirty) { + setDirty(true); + } + } + + + /** + * Returns whether or not the text in this editor has unsaved changes. + * + * @return Whether or not the text has unsaved changes. + * @see #setDirty(boolean) + */ + public boolean isDirty() { + return dirty; + } + + + /** + * Returns whether this file is a local file. + * + * @return Whether this is a local file. + */ + public boolean isLocal() { + return loc.isLocal(); + } + + + /** + * Returns whether this is a local file that already exists. + * + * @return Whether this is a local file that already exists. + */ + public boolean isLocalAndExists() { + return loc.isLocalAndExists(); + } + + + /** + * Returns whether the text file has been modified outside of this editor + * since the last load or save operation. Note that if this is a remote + * file, this method will always return false.

    + * + * This method may be used by applications to implement a reloading + * feature, where the user is prompted to reload a file if it has been + * modified since their last open or save. + * + * @return Whether the text file has been modified outside of this + * editor. + * @see #getLastSaveOrLoadTime() + */ + public boolean isModifiedOutsideEditor() { + return loc.getActualLastModified()>getLastSaveOrLoadTime(); + } + + + /** + * Returns whether or not the text area should be treated as read-only. + * + * @return Whether or not the text area should be treated as read-only. + * @see #setReadOnly(boolean) + */ + public boolean isReadOnly() { + return readOnly; + } + + + /** + * Loads the specified file in this editor. This method fires a property + * change event of type {@link #FULL_PATH_PROPERTY}. + * + * @param loc The location of the file to load. This cannot be + * null. + * @param defaultEnc The encoding to use when loading/saving the file. + * This encoding will only be used if the file is not Unicode. + * If this value is null, the system default encoding + * is used. + * @throws IOException If an IO error occurs. + * @see #save() + * @see #saveAs(FileLocation) + */ + public void load(FileLocation loc, String defaultEnc) throws IOException { + + // For new local files, just go with it. + if (loc.isLocal() && !loc.isLocalAndExists()) { + this.charSet = defaultEnc!=null ? defaultEnc : getDefaultEncoding(); + this.loc = loc; + setText(null); + discardAllEdits(); + setDirty(false); + return; + } + + // Old local files and remote files, load 'em up. UnicodeReader will + // check for BOMs and handle them correctly in all cases, then pass + // rest of stream down to InputStreamReader. + UnicodeReader ur = new UnicodeReader(loc.getInputStream(), defaultEnc); + + // Remove listener so dirty flag doesn't get set when loading a file. + Document doc = getDocument(); + doc.removeDocumentListener(this); + try (BufferedReader r = new BufferedReader(ur)) { + read(r, null); + } finally { + doc.addDocumentListener(this); + } + + // No IOException thrown, so we can finally change the location. + charSet = ur.getEncoding(); + String old = getFileFullPath(); + this.loc = loc; + setDirty(false); + setCaretPosition(0); + discardAllEdits(); + firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); + + } + + + /** + * Reloads this file from disk. The file must exist for this operation + * to not throw an exception.

    + * + * The file's "dirty" state will be set to false after this + * operation. If this is a local file, its "last modified" time is + * updated to reflect that of the actual file.

    + * + * Note that if the file has been modified on disk, and is now a Unicode + * encoding when before it wasn't (or if it is a different Unicode now), + * this will cause this {@link TextEditorPane}'s encoding to change. + * Otherwise, the file's encoding will stay the same. + * + * @throws IOException If the file does not exist, or if an IO error + * occurs reading the file. + * @see #isLocalAndExists() + */ + public void reload() throws IOException { + String oldEncoding = getEncoding(); + UnicodeReader ur = new UnicodeReader(loc.getInputStream(), oldEncoding); + String encoding = ur.getEncoding(); + try (BufferedReader r = new BufferedReader(ur)) { + read(r, null); // Dumps old contents. + } + setEncoding(encoding); + setDirty(false); + syncLastSaveOrLoadTimeToActualFile(); + discardAllEdits(); // Prevent user from being able to undo the reload + } + + + /** + * Called whenever text is removed from this editor. + * + * @param e The document event. + */ + @Override + public void removeUpdate(DocumentEvent e) { + if (!dirty) { + setDirty(true); + } + } + + + /** + * Saves the file in its current encoding.

    + * + * The text area's "dirty" state is set to false, and if + * this is a local file, its "last modified" time is updated. + * + * @throws IOException If an IO error occurs. + * @see #saveAs(FileLocation) + * @see #load(FileLocation, String) + */ + public void save() throws IOException { + saveImpl(loc); + setDirty(false); + syncLastSaveOrLoadTimeToActualFile(); + } + + + /** + * Saves this file in a new local location. This method fires a property + * change event of type {@link #FULL_PATH_PROPERTY}. + * + * @param loc The location to save to. + * @throws IOException If an IO error occurs. + * @see #save() + * @see #load(FileLocation, String) + */ + public void saveAs(FileLocation loc) throws IOException { + saveImpl(loc); + // No exception thrown - we can "rename" the file. + String old = getFileFullPath(); + this.loc = loc; + setDirty(false); + lastSaveOrLoadTime = loc.getActualLastModified(); + firePropertyChange(FULL_PATH_PROPERTY, old, getFileFullPath()); + } + + + /** + * Saves the text in this editor to the specified location. + * + * @param loc The location to save to. + * @throws IOException If an IO error occurs. + */ + private void saveImpl(FileLocation loc) throws IOException { + OutputStream out = loc.getOutputStream(); + try (BufferedWriter w = new BufferedWriter( + new UnicodeWriter(out, getEncoding()))) { + write(w); + } + } + + + /** + * Sets whether or not this text in this editor has unsaved changes. + * This fires a property change event of type {@link #DIRTY_PROPERTY}.

    + * + * Applications will usually have no need to call this method directly; the + * only time you might have a need to call this method directly is if you + * have to initialize an instance of TextEditorPane with content that does + * not come from a file. TextEditorPane automatically sets its + * own dirty flag when its content is edited, when its encoding is changed, + * or when its line ending property is changed. It is cleared whenever + * load(), reload(), save(), or + * saveAs() are called. + * + * @param dirty Whether or not the text has been modified. + * @see #isDirty() + */ + public void setDirty(boolean dirty) { + if (this.dirty!=dirty) { + this.dirty = dirty; + firePropertyChange(DIRTY_PROPERTY, !dirty, dirty); + } + } + + + /** + * Sets the document for this editor. + * + * @param doc The new document. + */ + @Override + public void setDocument(Document doc) { + Document old = getDocument(); + if (old!=null) { + old.removeDocumentListener(this); + } + super.setDocument(doc); + doc.addDocumentListener(this); + } + + + /** + * Sets the encoding to use when reading or writing this file. This + * method sets the editor's dirty flag when the encoding is changed, and + * fires a property change event of type {@link #ENCODING_PROPERTY}. + * + * @param encoding The new encoding. + * @throws UnsupportedCharsetException If the encoding is not supported. + * @throws NullPointerException If encoding is + * null. + * @see #getEncoding() + */ + public void setEncoding(String encoding) { + if (encoding==null) { + throw new NullPointerException("encoding cannot be null"); + } + else if (!Charset.isSupported(encoding)) { + throw new UnsupportedCharsetException(encoding); + } + if (charSet==null || !charSet.equals(encoding)) { + String oldEncoding = charSet; + charSet = encoding; + firePropertyChange(ENCODING_PROPERTY, oldEncoding, charSet); + setDirty(true); + } + } + + + /** + * Sets the line separator sequence to use when this file is saved (e.g. + * "\n", "\r\n" or "\r"). + * + * Besides parameter checking, this method is preferred over + * getDocument().putProperty() because it sets the editor's + * dirty flag when the line separator is changed. + * + * @param separator The new line separator. + * @throws NullPointerException If separator is + * null. + * @throws IllegalArgumentException If separator is not one + * of "\n", "\r\n" or "\r". + * @see #getLineSeparator() + */ + public void setLineSeparator(String separator) { + setLineSeparator(separator, true); + } + + + /** + * Sets the line separator sequence to use when this file is saved (e.g. + * "\n", "\r\n" or "\r"). + * + * Besides parameter checking, this method is preferred over + * getDocument().putProperty() because can set the editor's + * dirty flag when the line separator is changed. + * + * @param separator The new line separator. + * @param setDirty Whether the dirty flag should be set if the line + * separator is changed. + * @throws NullPointerException If separator is + * null. + * @throws IllegalArgumentException If separator is not one + * of "\n", "\r\n" or "\r". + * @see #getLineSeparator() + */ + public void setLineSeparator(String separator, boolean setDirty) { + if (separator==null) { + throw new NullPointerException("terminator cannot be null"); + } + if (!"\r\n".equals(separator) && !"\n".equals(separator) && + !"\r".equals(separator)) { + throw new IllegalArgumentException("Invalid line terminator"); + } + Document doc = getDocument(); + Object old = doc.getProperty( + RTextAreaEditorKit.EndOfLineStringProperty); + if (!separator.equals(old)) { + doc.putProperty(RTextAreaEditorKit.EndOfLineStringProperty, + separator); + if (setDirty) { + setDirty(true); + } + } + } + + + /** + * Sets whether or not this text area should be treated as read-only. + * This fires a property change event of type {@link #READ_ONLY_PROPERTY}. + * + * @param readOnly Whether or not the document is read-only. + * @see #isReadOnly() + */ + public void setReadOnly(boolean readOnly) { + if (this.readOnly!=readOnly) { + this.readOnly = readOnly; + firePropertyChange(READ_ONLY_PROPERTY, !readOnly, readOnly); + } + } + + + /** + * Syncs this text area's "last saved or loaded" time to that of the file + * being edited, if that file is local and exists. If the file is + * remote or is local but does not yet exist, nothing happens.

    + * + * You normally do not have to call this method, as the "last saved or + * loaded" time for {@link TextEditorPane}s is kept up-to-date internally + * during such operations as {@link #save()}, {@link #reload()}, etc. + * + * @see #getLastSaveOrLoadTime() + * @see #isModifiedOutsideEditor() + */ + public void syncLastSaveOrLoadTimeToActualFile() { + if (loc.isLocalAndExists()) { + lastSaveOrLoadTime = loc.getActualLastModified(); + } + } + + + public static void main(String[] args) throws Exception { + try { + TextEditorPane textArea = new TextEditorPane(); + textArea.load(FileLocation.create("d:/temp/test.txt"), "UTF-8"); + JPanel cp = new JPanel(); + cp.setPreferredSize(new java.awt.Dimension(300, 300)); + cp.setLayout(new java.awt.BorderLayout()); + cp.add(new JScrollPane(textArea)); + JFrame frame = new JFrame(); + frame.setContentPane(cp); + frame.pack(); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.setLocationByPlatform(true); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Theme.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Theme.java new file mode 100755 index 000000000..2c4e5906a --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Theme.java @@ -0,0 +1,882 @@ +/* + * 10/30/2011 + * + * Theme.java - A color theme for RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.SystemColor; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.lang.reflect.Field; + +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; +import javax.swing.text.StyleContext; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.fife.io.UnicodeWriter; +import org.fife.ui.rtextarea.Gutter; +import org.fife.ui.rtextarea.RTextArea; +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; + + +/** + * A theme is a set of fonts and colors to use to style RSyntaxTextArea and + * RTextScrollPane. Themes are defined in XML files that are validated against + * org/fife/ui/rsyntaxtextarea/themes/theme.dtd. This provides + * applications and other consumers with an easy way to style RSyntaxTextArea + * without having to use the API.

    + * + * Sample themes are included in the source tree in the + * org.fife.ui.rsyntaxtextarea.themes package, and can be loaded + * via getClass().getResourceAsStream(...).

    + * + * All fields are public to facilitate programmatic manipulation, but typically + * you won't need to reference any fields directly, rather using the + * load(), save(), and apply() methods + * for various tasks.

    + * + * Note that to save a Theme via {@link #save(OutputStream)}, + * you must currently create a Theme from a text area wrapped in + * an RTextScrollPane, so that the color information for the + * gutter can be retrieved. + * + * @author Robert Futrell + * @version 1.0 + */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) +public class Theme { + + public Font baseFont; + public Color bgColor; + public Color caretColor; + public boolean useSelctionFG; + public Color selectionFG; + public Color selectionBG; + public boolean selectionRoundedEdges; + public Color currentLineHighlight; + public boolean fadeCurrentLineHighlight; + public Color marginLineColor; + public Color markAllHighlightColor; + public Color markOccurrencesColor; + public boolean markOccurrencesBorder; + public Color matchedBracketFG; + public Color matchedBracketBG; + public boolean matchedBracketHighlightBoth; + public boolean matchedBracketAnimate; + public Color hyperlinkFG; + public Color[] secondaryLanguages; + + public SyntaxScheme scheme; + + public Color gutterBackgroundColor; + public Color gutterBorderColor; + public Color activeLineRangeColor; + public boolean iconRowHeaderInheritsGutterBG; + public Color lineNumberColor; + public String lineNumberFont; + public int lineNumberFontSize; + public Color foldIndicatorFG; + public Color foldBG; + public Color armedFoldBG; + + + /** + * Private constructor, used when loading from a stream. + * + * @param baseFont The default font to use for any "base font" properties + * not specified in the theme XML. If this is null, + * a default monospaced font will be used. + */ + private Theme(Font baseFont) { + // Optional fields that require a default value. + this.baseFont = baseFont!=null ? baseFont : RTextArea.getDefaultFont(); + secondaryLanguages = new Color[3]; + activeLineRangeColor = Gutter.DEFAULT_ACTIVE_LINE_RANGE_COLOR; + } + + + /** + * Creates a theme from an RSyntaxTextArea. It should be contained in + * an RTextScrollPane to get all gutter color information. + * + * @param textArea The text area. + */ + public Theme(RSyntaxTextArea textArea) { + + baseFont = textArea.getFont(); + bgColor = textArea.getBackground(); + caretColor = textArea.getCaretColor(); + useSelctionFG = textArea.getUseSelectedTextColor(); + selectionFG = textArea.getSelectedTextColor(); + selectionBG = textArea.getSelectionColor(); + selectionRoundedEdges = textArea.getRoundedSelectionEdges(); + currentLineHighlight = textArea.getCurrentLineHighlightColor(); + fadeCurrentLineHighlight = textArea.getFadeCurrentLineHighlight(); + marginLineColor = textArea.getMarginLineColor(); + markAllHighlightColor = textArea.getMarkAllHighlightColor(); + markOccurrencesColor = textArea.getMarkOccurrencesColor(); + markOccurrencesBorder = textArea.getPaintMarkOccurrencesBorder(); + matchedBracketBG = textArea.getMatchedBracketBGColor(); + matchedBracketFG = textArea.getMatchedBracketBorderColor(); + matchedBracketHighlightBoth = textArea.getPaintMatchedBracketPair(); + matchedBracketAnimate = textArea.getAnimateBracketMatching(); + hyperlinkFG = textArea.getHyperlinkForeground(); + + int count = textArea.getSecondaryLanguageCount(); + secondaryLanguages = new Color[count]; + for (int i=0; i0 ? lineNumberFontSize : + baseFont.getSize(); + Font font = getFont(fontName, Font.PLAIN, fontSize); + gutter.setLineNumberFont(font); + gutter.setFoldIndicatorForeground(foldIndicatorFG); + gutter.setFoldBackground(foldBG); + gutter.setArmedFoldBackground(armedFoldBG); + } + + } + + + private static String colorToString(Color c) { + int color = c.getRGB() & 0xffffff; + StringBuilder stringBuilder = new StringBuilder(Integer.toHexString(color)); + while (stringBuilder.length()<6) { + stringBuilder.insert(0, "0"); + } + return stringBuilder.toString(); + } + + + /** + * Returns the default selection background color to use if "default" is + * specified in a theme. + * + * @return The default selection background to use. + * @see #getDefaultSelectionFG() + */ + private static Color getDefaultBG() { + Color c = UIManager.getColor("nimbusLightBackground"); + if (c==null) { + // Don't search for "text", as Nimbus defines that as the text + // component "text" color, but Basic LAFs use it for text + // component backgrounds! Nimbus also defines TextArea.background + // as too dark, not what it actually uses for text area backgrounds + c = UIManager.getColor("TextArea.background"); + if (c==null) { + c = new ColorUIResource(SystemColor.text); + } + } + return c; + } + + + /** + * Returns the default selection background color to use if "default" is + * specified in a theme. + * + * @return The default selection background to use. + * @see #getDefaultSelectionFG() + */ + private static Color getDefaultSelectionBG() { + Color c = UIManager.getColor("TextArea.selectionBackground"); + if (c==null) { + c = UIManager.getColor("textHighlight"); + if (c==null) { + c = UIManager.getColor("nimbusSelectionBackground"); + if (c==null) { + c = new ColorUIResource(SystemColor.textHighlight); + } + } + } + return c; + } + + + /** + * Returns the default "selected text" color to use if "default" is + * specified in a theme. + * + * @return The default selection foreground color to use. + * @see #getDefaultSelectionBG() + */ + private static Color getDefaultSelectionFG() { + Color c = UIManager.getColor("TextArea.selectionForeground"); + if (c==null) { + c = UIManager.getColor("textHighlightText"); + if (c==null) { + c = UIManager.getColor("nimbusSelectedText"); + if (c==null) { + c = new ColorUIResource(SystemColor.textHighlightText); + } + } + } + return c; + } + + + /** + * Returns the specified font. + * + * @param family The font family. + * @param style The style of font. + * @param size The size of the font. + * @return The font. + */ + private static Font getFont(String family, int style, int size) { + // Use StyleContext to get a composite font for Asian glyphs. + StyleContext sc = StyleContext.getDefaultStyleContext(); + return sc.getFont(family, style, size); + } + + + /** + * Loads a theme. + * + * @param in The input stream to read from. This will be closed when this + * method returns. + * @return The theme. + * @throws IOException If an IO error occurs. + * @see #save(OutputStream) + */ + public static Theme load(InputStream in) throws IOException { + return load(in, null); + } + + + /** + * Loads a theme. + * + * @param in The input stream to read from. This will be closed when this + * method returns. + * @param baseFont The default font to use for any "base font" properties + * not specified in the theme XML. If this is null, + * a default monospaced font will be used. + * @return The theme. + * @throws IOException If an IO error occurs. + * @see #save(OutputStream) + */ + public static Theme load(InputStream in, Font baseFont) throws IOException { + + Theme theme = new Theme(baseFont); + + try (BufferedInputStream bin = new BufferedInputStream(in)) { + XmlHandler.load(theme, bin); + } + + return theme; + } + + + /** + * Saves this theme to an output stream. + * + * @param out The output stream to write to. + * @throws IOException If an IO error occurs. + * @see #load(InputStream) + */ + public void save(OutputStream out) throws IOException { + + try (BufferedOutputStream bout = new BufferedOutputStream(out)) { + + DocumentBuilder db = DocumentBuilderFactory.newInstance(). + newDocumentBuilder(); + DOMImplementation impl = db.getDOMImplementation(); + + Document doc = impl.createDocument(null, "RSyntaxTheme", null); + Element root = doc.getDocumentElement(); + root.setAttribute("version", "1.0"); + + Element elem = doc.createElement("baseFont"); + if (!baseFont.getFamily().equals( + RSyntaxTextArea.getDefaultFont().getFamily())) { + elem.setAttribute("family", baseFont.getFamily()); + } + elem.setAttribute("size", Integer.toString(baseFont.getSize())); + root.appendChild(elem); + + elem = doc.createElement("background"); + elem.setAttribute("color", colorToString(bgColor)); + root.appendChild(elem); + + elem = doc.createElement("caret"); + elem.setAttribute("color", colorToString(caretColor)); + root.appendChild(elem); + + elem = doc.createElement("selection"); + elem.setAttribute("useFG", Boolean.toString(useSelctionFG)); + elem.setAttribute("fg", colorToString(selectionFG)); + elem.setAttribute("bg", colorToString(selectionBG)); + elem.setAttribute("roundedEdges", Boolean.toString(selectionRoundedEdges)); + root.appendChild(elem); + + elem = doc.createElement("currentLineHighlight"); + elem.setAttribute("color", colorToString(currentLineHighlight)); + elem.setAttribute("fade", Boolean.toString(fadeCurrentLineHighlight)); + root.appendChild(elem); + + elem = doc.createElement("marginLine"); + elem.setAttribute("fg", colorToString(marginLineColor)); + root.appendChild(elem); + + elem = doc.createElement("markAllHighlight"); + elem.setAttribute("color", colorToString(markAllHighlightColor)); + root.appendChild(elem); + + elem = doc.createElement("markOccurrencesHighlight"); + elem.setAttribute("color", colorToString(markOccurrencesColor)); + elem.setAttribute("border", Boolean.toString(markOccurrencesBorder)); + root.appendChild(elem); + + elem = doc.createElement("matchedBracket"); + elem.setAttribute("fg", colorToString(matchedBracketFG)); + elem.setAttribute("bg", colorToString(matchedBracketBG)); + elem.setAttribute("highlightBoth", Boolean.toString(matchedBracketHighlightBoth)); + elem.setAttribute("animate", Boolean.toString(matchedBracketAnimate)); + root.appendChild(elem); + + elem = doc.createElement("hyperlinks"); + elem.setAttribute("fg", colorToString(hyperlinkFG)); + root.appendChild(elem); + + elem = doc.createElement("secondaryLanguages"); + for (int i = 0; i < secondaryLanguages.length; i++) { + Color color = secondaryLanguages[i]; + Element elem2 = doc.createElement("language"); + elem2.setAttribute("index", Integer.toString(i + 1)); + elem2.setAttribute("bg", color == null ? "" : colorToString(color)); + elem.appendChild(elem2); + } + root.appendChild(elem); + + elem = doc.createElement("gutterBackground"); + elem.setAttribute("color", colorToString(gutterBackgroundColor)); + root.appendChild(elem); + + elem = doc.createElement("gutterBorder"); + elem.setAttribute("color", colorToString(gutterBorderColor)); + root.appendChild(elem); + + elem = doc.createElement("lineNumbers"); + elem.setAttribute("fg", colorToString(lineNumberColor)); + if (lineNumberFont != null) { + elem.setAttribute("fontFamily", lineNumberFont); + } + if (lineNumberFontSize > 0) { + elem.setAttribute("fontSize", + Integer.toString(lineNumberFontSize)); + } + root.appendChild(elem); + + elem = doc.createElement("foldIndicator"); + elem.setAttribute("fg", colorToString(foldIndicatorFG)); + elem.setAttribute("iconBg", colorToString(foldBG)); + elem.setAttribute("iconArmedBg", colorToString(armedFoldBG)); + root.appendChild(elem); + + elem = doc.createElement("iconRowHeader"); + elem.setAttribute("activeLineRange", colorToString(activeLineRangeColor)); + elem.setAttribute("inheritsGutterBG", Boolean.toString(iconRowHeaderInheritsGutterBG)); + root.appendChild(elem); + + elem = doc.createElement("tokenStyles"); + Field[] fields = TokenTypes.class.getFields(); + for (Field field : fields) { + int value = field.getInt(null); + if (value != TokenTypes.DEFAULT_NUM_TOKEN_TYPES) { + Style style = scheme.getStyle(value); + if (style != null) { + Element elem2 = doc.createElement("style"); + elem2.setAttribute("token", field.getName()); + Color fg = style.foreground; + if (fg != null) { + elem2.setAttribute("fg", colorToString(fg)); + } + Color bg = style.background; + if (bg != null) { + elem2.setAttribute("bg", colorToString(bg)); + } + Font font = style.font; + if (font != null) { + if (!font.getFamily().equals( + baseFont.getFamily())) { + elem2.setAttribute("fontFamily", font.getFamily()); + } + if (font.getSize() != baseFont.getSize()) { + elem2.setAttribute("fontSize", Integer.toString(font.getSize())); + } + if (font.isBold()) { + elem2.setAttribute("bold", "true"); + } + if (font.isItalic()) { + elem2.setAttribute("italic", "true"); + } + } + if (style.underline) { + elem2.setAttribute("underline", "true"); + } + elem.appendChild(elem2); + } + } + } + root.appendChild(elem); + + DOMSource source = new DOMSource(doc); + // Use a writer instead of OutputStream to allow pretty printing. + // See http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6337981 + StreamResult result = new StreamResult(new PrintWriter( + new UnicodeWriter(bout, "UTF-8"))); + TransformerFactory transFac = TransformerFactory.newInstance(); + Transformer transformer = transFac.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, "theme.dtd"); + transformer.transform(source, result); + + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + throw new IOException("Error generating XML: " + e.getMessage(), e); + } + + } + + + /** + * Returns the color represented by a string. The input is expected to + * be a 6-digit hex string, optionally prefixed by a '$'. For example, + * either of the following: + *

    +	 * "$00ff00"
    +	 * "00ff00"
    +	 * 
    + * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @return The color. + */ + private static Color stringToColor(String s) { + return stringToColor(s, null); + } + + + /** + * Returns the color represented by a string. The input is expected to + * be a 6-digit hex string, optionally prefixed by a '$'. For example, + * either of the following: + *
    +	 * "$00ff00"
    +	 * "00ff00"
    +	 * 
    + * will return new Color(0, 255, 0). + * + * @param s The string to evaluate. + * @param defaultVal The color to use if s is + * "default". + * @return The color. + */ + private static Color stringToColor(String s, Color defaultVal) { + if (s==null || "default".equalsIgnoreCase(s)) { + return defaultVal; + } + if (s.length()==6 || s.length()==7) { + if (s.charAt(0)=='$') { + s = s.substring(1); + } + return new Color(Integer.parseInt(s, 16)); + } + return null; + } + + + /** + * Loads a SyntaxScheme from an XML file. + */ + private static class XmlHandler extends DefaultHandler { + + private Theme theme; + + @Override + public void error(SAXParseException e) throws SAXException { + throw e; + } + + @Override + public void fatalError(SAXParseException e) throws SAXException { + throw e; + } + + public static void load(Theme theme, InputStream in) throws IOException { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(true); + try { + SAXParser parser = spf.newSAXParser(); + XMLReader reader = parser.getXMLReader(); + XmlHandler handler = new XmlHandler(); + handler.theme = theme; + reader.setEntityResolver(handler); + reader.setContentHandler(handler); + reader.setDTDHandler(handler); + reader.setErrorHandler(handler); + InputSource is = new InputSource(in); + is.setEncoding("UTF-8"); + reader.parse(is); + } catch (/*SAX|ParserConfiguration*/Exception se) { + throw new IOException(se.toString()); + } + } + + private static int parseInt(Attributes attrs, String attr, + int def) { + int value = def; + String temp = attrs.getValue(attr); + if (temp != null) { + try { + value = Integer.parseInt(temp); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + } + } + return value; + } + + @Override + public InputSource resolveEntity(String publicID, String systemID) { + return new InputSource(getClass(). + getResourceAsStream("themes/theme.dtd")); + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attrs) { + + if ("background".equals(qName)) { + + String color = attrs.getValue("color"); + if (color!=null) { + theme.bgColor = stringToColor(color, getDefaultBG()); + theme.gutterBackgroundColor = theme.bgColor; + } + else { + String img = attrs.getValue("image"); + if (img!=null) { + throw new IllegalArgumentException("Not yet implemented"); + } + } + } + + // The base font to use in the editor. + else if ("baseFont".equals(qName)) { + int size = theme.baseFont.getSize(); + String sizeStr = attrs.getValue("size"); + if (sizeStr!=null) { + size = Integer.parseInt(sizeStr); + } + String family = attrs.getValue("family"); + if (family!=null) { + theme.baseFont = getFont(family, Font.PLAIN, size); + } + else if (sizeStr!=null) { + // No family specified, keep original family + theme.baseFont = theme.baseFont.deriveFont(size*1f); + } + } + + else if ("caret".equals(qName)) { + String color = attrs.getValue("color"); + theme.caretColor = stringToColor(color); + } + + else if ("currentLineHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.currentLineHighlight = stringToColor(color); + String fadeStr = attrs.getValue("fade"); + boolean fade = Boolean.parseBoolean(fadeStr); + theme.fadeCurrentLineHighlight = fade; + } + + else if ("foldIndicator".equals(qName)) { + String color = attrs.getValue("fg"); + theme.foldIndicatorFG = stringToColor(color); + color = attrs.getValue("iconBg"); + theme.foldBG = stringToColor(color); + color = attrs.getValue("iconArmedBg"); + theme.armedFoldBG = stringToColor(color); + } + + else if ("gutterBackground".equals(qName)) { + String color = attrs.getValue("color"); + if (color!=null) { + theme.gutterBackgroundColor = stringToColor(color); + } + } + + else if ("gutterBorder".equals(qName)) { + String color = attrs.getValue("color"); + theme.gutterBorderColor = stringToColor(color); + } + + else if ("iconRowHeader".equals(qName)) { + String color = attrs.getValue("activeLineRange"); + theme.activeLineRangeColor = stringToColor(color); + String inheritBGStr = attrs.getValue("inheritsGutterBG"); + theme.iconRowHeaderInheritsGutterBG = + Boolean.parseBoolean(inheritBGStr); + } + + else if ("lineNumbers".equals(qName)) { + String color = attrs.getValue("fg"); + theme.lineNumberColor = stringToColor(color); + theme.lineNumberFont = attrs.getValue("fontFamily"); + theme.lineNumberFontSize = parseInt(attrs, "fontSize", -1); + } + + else if ("marginLine".equals(qName)) { + String color = attrs.getValue("fg"); + theme.marginLineColor = stringToColor(color); + } + + else if ("markAllHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.markAllHighlightColor = stringToColor(color); + } + + else if ("markOccurrencesHighlight".equals(qName)) { + String color = attrs.getValue("color"); + theme.markOccurrencesColor = stringToColor(color); + String border = attrs.getValue("border"); + theme.markOccurrencesBorder = Boolean.parseBoolean(border); + } + + else if ("matchedBracket".equals(qName)) { + String fg = attrs.getValue("fg"); + theme.matchedBracketFG = stringToColor(fg); + String bg = attrs.getValue("bg"); + theme.matchedBracketBG = stringToColor(bg); + String highlightBoth = attrs.getValue("highlightBoth"); + theme.matchedBracketHighlightBoth = Boolean.parseBoolean(highlightBoth); + String animate = attrs.getValue("animate"); + theme.matchedBracketAnimate = Boolean.parseBoolean(animate); + } + + else if ("hyperlinks".equals(qName)) { + String fg = attrs.getValue("fg"); + theme.hyperlinkFG = stringToColor(fg); + } + + else if ("language".equals(qName)) { + String indexStr = attrs.getValue("index"); + int index = Integer.parseInt(indexStr) - 1; + if (theme.secondaryLanguages.length>index) { // Sanity + Color bg = stringToColor(attrs.getValue("bg")); + theme.secondaryLanguages[index] = bg; + } + } + + else if ("selection".equals(qName)) { + String useStr = attrs.getValue("useFG"); + theme.useSelctionFG = Boolean.parseBoolean(useStr); + String color = attrs.getValue("fg"); + theme.selectionFG = stringToColor(color, + getDefaultSelectionFG()); + //System.out.println(theme.selectionFG); + color = attrs.getValue("bg"); + theme.selectionBG = stringToColor(color, + getDefaultSelectionBG()); + String roundedStr = attrs.getValue("roundedEdges"); + theme.selectionRoundedEdges = Boolean.parseBoolean(roundedStr); + } + + // Start of the syntax scheme definition + else if ("tokenStyles".equals(qName)) { + theme.scheme = new SyntaxScheme(theme.baseFont, false); + } + + // A style in the syntax scheme + else if ("style".equals(qName)) { + + String type = attrs.getValue("token"); + Field field = null; + try { + field = Token.class.getField(type); + } catch (RuntimeException re) { + throw re; // FindBugs + } catch (Exception e) { + System.err.println("Invalid token type: " + type); + return; + } + + if (field.getType()==int.class) { + + int index = 0; + try { + index = field.getInt(theme.scheme); + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + return; + } + + String fgStr = attrs.getValue("fg"); + Color fg = stringToColor(fgStr); + theme.scheme.getStyle(index).foreground = fg; + + String bgStr = attrs.getValue("bg"); + Color bg = stringToColor(bgStr); + theme.scheme.getStyle(index).background = bg; + + Font font = theme.baseFont; + String familyName = attrs.getValue("fontFamily"); + if (familyName!=null) { + font = getFont(familyName, font.getStyle(), + font.getSize()); + } + String sizeStr = attrs.getValue("fontSize"); + if (sizeStr!=null) { + try { + float size = Float.parseFloat(sizeStr); + size = Math.max(size, 1f); + font = font.deriveFont(size); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + } + } + theme.scheme.getStyle(index).font = font; + + boolean styleSpecified = false; + boolean bold = false; + boolean italic = false; + String boldStr = attrs.getValue("bold"); + if (boldStr!=null) { + bold = Boolean.parseBoolean(boldStr); + styleSpecified = true; + } + String italicStr = attrs.getValue("italic"); + if (italicStr!=null) { + italic = Boolean.parseBoolean(italicStr); + styleSpecified = true; + } + if (styleSpecified) { + int style = 0; + if (bold) { + style |= Font.BOLD; + } + if (italic) { + style |= Font.ITALIC; + } + Font orig = theme.scheme.getStyle(index).font; + theme.scheme.getStyle(index).font = + orig.deriveFont(style); + } + + String ulineStr = attrs.getValue("underline"); + if (ulineStr!=null) { + boolean uline = Boolean.parseBoolean(ulineStr); + theme.scheme.getStyle(index).underline = uline; + } + + } + + } + + } + + @Override + public void warning(SAXParseException e) throws SAXException { + throw e; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java old mode 100644 new mode 100755 index 3290d9154..8ac6429ea --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/Token.java @@ -2,837 +2,566 @@ * 02/21/2004 * * Token.java - A token used in syntax highlighting. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.awt.Color; -import java.awt.Font; -import java.awt.FontMetrics; -import java.awt.Graphics2D; import java.awt.Rectangle; -import java.awt.geom.Rectangle2D; + import javax.swing.text.TabExpander; + /** - * A generic token that functions as a node in a linked list of syntax highlighted tokens for some language. - *

    - * - * A Token is a piece of text representing some logical token in source code for a programming language. - * For example, the line of C code: - *

    - * + * A generic token that functions as a node in a linked list of syntax + * highlighted tokens for some language.

    + * + * A Token is a piece of text representing some logical token in + * source code for a programming language. For example, the line of C code:

    *

      * int i = 0;
      * 
    - * - * would be broken into 8 Tokens: the first representing int, the second whitespace, the third - * i, the fourth whitespace, the fifth =, etc. - *

    - * + * would be broken into 8 Tokens: the first representing + * int, the second whitespace, the third i, the fourth + * whitespace, the fifth =, etc.

    + * + * Note: The tokens returned by {@link RSyntaxDocument}s are pooled and + * should always be treated as immutable. Modifying tokens you did not create + * yourself can and will result in rendering issues and/or runtime exceptions. + * You have been warned! + * * @author Robert Futrell * @version 0.3 */ -public abstract class Token { - - /** - * The text this token represents. This is implemented as a segment so we can point directly to the text in the - * document without having to make a copy of it. - */ - public char[] text; - public int textOffset; - public int textCount; - - /** - * The offset into the document at which this token resides. - */ - public int offset; - - /** - * The type of token this is; for example, {@link #FUNCTION}. - */ - public int type; - - /** - * Whether this token is a hyperlink. - */ - private boolean hyperlink; - - /** - * The next token in this linked list. - */ - private Token nextToken; - - /** - * Rectangle used for filling token backgrounds. - */ - private Rectangle2D.Float bgRect; - - // NOTE: All valid token types are >= 0, so extensions of the TokenMaker - // class are free to internally use all ints < 0 ONLY for "end-of-line" - // style markers; they are ignored by painting implementations. - - public static final int NULL = 0; // Marks EOL with no multiline token at end. - - public static final int COMMENT_EOL = 1; - public static final int COMMENT_MULTILINE = 2; - public static final int COMMENT_DOCUMENTATION = 3; - - public static final int RESERVED_WORD = 4; - - public static final int FUNCTION = 5; - - public static final int LITERAL_BOOLEAN = 6; - public static final int LITERAL_NUMBER_DECIMAL_INT = 7; - public static final int LITERAL_NUMBER_FLOAT = 8; - public static final int LITERAL_NUMBER_HEXADECIMAL = 9; - public static final int LITERAL_STRING_DOUBLE_QUOTE = 10; - public static final int LITERAL_CHAR = 11; // Char or single-quote string. - public static final int LITERAL_BACKQUOTE = 12; // Used in UNIX/Perl scripts. - - public static final int DATA_TYPE = 13; - - public static final int VARIABLE = 14; - - public static final int IDENTIFIER = 15; - - public static final int WHITESPACE = 16; - - public static final int SEPARATOR = 17; - - public static final int OPERATOR = 18; - - public static final int PREPROCESSOR = 19; - - public static final int MARKUP_TAG_DELIMITER = 20; - public static final int MARKUP_TAG_NAME = 21; - public static final int MARKUP_TAG_ATTRIBUTE = 22; - - public static final int ERROR_IDENTIFIER = 23; - public static final int ERROR_NUMBER_FORMAT = 24; - public static final int ERROR_STRING_DOUBLE = 25; - public static final int ERROR_CHAR = 26; // Char or single-quote string. - - public static final int NUM_TOKEN_TYPES = 27; - - /** - * Creates a "null token." The token itself is not null; rather, it signifies that it is the last token in a linked - * list of tokens and that it is not part of a "multi-line token." - */ - public Token() { - this.text = null; - this.textOffset = -1; - this.textCount = -1; - this.type = NULL; - offset = -1; - hyperlink = false; - nextToken = null; - bgRect = new Rectangle2D.Float(); - } - - /** - * Constructor. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param startOffset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public Token(final char[] line, final int beg, final int end, - final int startOffset, final int type) { - this(); - set(line, beg, end, startOffset, type); - } - - /** - * Creates this token as a deep copy of the passed-in token. - * - * @param t2 - * The token from which to make a copy. - */ - public Token(Token t2) { - this(); - copyFrom(t2); - } - - /** - * Appends HTML code for painting this token, using the given text area's color scheme. - * - * @param sb - * The buffer to append to. - * @param textArea - * The text area whose color scheme to use. - * @param fontFamily - * Whether to include the font family in the HTML for this token. You can pass false for - * this parameter if, for example, you are making all your HTML be monospaced, and don't want any crazy - * fonts being used in the editor to be reflected in your HTML. - * @return The buffer appended to. - * @see #getHTMLRepresentation(RSyntaxTextArea) - */ - public StringBuffer appendHTMLRepresentation(StringBuffer sb, - RSyntaxTextArea textArea, - boolean fontFamily) { - - SyntaxScheme colorScheme = textArea.getSyntaxScheme(); - Style scheme = colorScheme.styles[type]; - Font font = textArea.getFontForTokenType(type);// scheme.font; - - if (font.isBold()) - sb.append(""); - if (font.isItalic()) - sb.append(""); - if (scheme.underline) - sb.append(""); - - sb.append(""); - - // NOTE: Don't use getLexeme().trim() because whitespace tokens will - // be turned into NOTHING. - appendHtmlLexeme(sb);// sb.append(getHtmlLexeme()); - - sb.append(""); - if (scheme.underline) - sb.append(""); - if (font.isItalic()) - sb.append(""); - if (font.isBold()) - sb.append(""); - - return sb; - - } - - /** - * Appends an HTML version of the lexeme of this token (i.e. no style HTML, but replacing chars such as - * \t, < and > with their escapes). - * - * @param sb - * The buffer to append to. - * @return The same buffer. - */ - private final StringBuffer appendHtmlLexeme(StringBuffer sb) { - int i = textOffset; - int lastI = i; - while (i < textOffset + textCount) { - char ch = text[i]; - switch (ch) { - case '\t': - sb.append(text, lastI, i - lastI); - lastI = i + 1; - sb.append(" "); - break; - case '<': - sb.append(text, lastI, i - lastI); - lastI = i + 1; - sb.append("<"); - break; - case '>': - sb.append(text, lastI, i - lastI); - lastI = i + 1; - sb.append(">"); - break; - } - i++; - } - if (lastI < textOffset + textCount) { - sb.append(text, lastI, textOffset + textCount - lastI); - } - return sb; - } - - /** - * Returns whether the token straddles the specified position in the document. - * - * @param pos - * The position in the document to check. - * @return Whether the specified position is straddled by this token. - */ - public boolean containsPosition(int pos) { - return pos >= offset && pos < offset + textCount; - } - - /** - * Makes one token point to the same text segment, and have the same value as another token. - * - * @param t2 - * The token from which to copy. - */ - public void copyFrom(Token t2) { - text = t2.text; - textOffset = t2.textOffset; - textCount = t2.textCount; - offset = t2.offset; - type = t2.type; - nextToken = t2.nextToken; - } - - /** - * Returns the position in the token's internal char array corresponding to the specified document position. - *

    - * Note that this method does NOT do any bounds checking; you can pass in a document position that does not - * correspond to a position in this token, and you will not receive an Exception or any other notification; it is up - * to the caller to ensure valid input. - * - * @param pos - * A position in the document that is represented by this token. - * @return The corresponding token position >= textOffset and < textOffset+textCount. - * @see #tokenToDocument - */ - public int documentToToken(int pos) { - return pos + (textOffset - offset); - } - - /** - * Returns a String of the form "#xxxxxx" good for use in HTML, representing the given color. - * - * @param color - * The color to get a string for. - * @return The HTML form of the color. If color is null, #000000 is returned. - */ - private static final String getHTMLFormatForColor(Color color) { - if (color == null) { - return "black"; - } - String hexRed = Integer.toHexString(color.getRed()); - if (hexRed.length() == 1) - hexRed = "0" + hexRed; - String hexGreen = Integer.toHexString(color.getGreen()); - if (hexGreen.length() == 1) - hexGreen = "0" + hexGreen; - String hexBlue = Integer.toHexString(color.getBlue()); - if (hexBlue.length() == 1) - hexBlue = "0" + hexBlue; - return "#" + hexRed + hexGreen + hexBlue; - } - - /** - * Returns a String containing HTML code for painting this token, using the given text area's color - * scheme. - * - * @param textArea - * The text area whose color scheme to use. - * @return The HTML representation of the token. - * @see #appendHTMLRepresentation(StringBuffer, RSyntaxTextArea, boolean) - */ - public String getHTMLRepresentation(RSyntaxTextArea textArea) { - StringBuffer buf = new StringBuffer(); - appendHTMLRepresentation(buf, textArea, true); - return buf.toString(); - } - - /** - * Returns the last token in this list that is not whitespace or a comment. - * - * @return The last non-comment, non-whitespace token, or null if there isn't one. - */ - public Token getLastNonCommentNonWhitespaceToken() { - - Token last = null; - - for (Token t = this; t != null && t.isPaintable(); t = t.nextToken) { - switch (t.type) { - case COMMENT_DOCUMENTATION: - case COMMENT_EOL: - case COMMENT_MULTILINE: - case WHITESPACE: - break; - default: - last = t; - break; - } - } - - return last; - - } - - /** - * Returns the last paintable token in this token list, or null if there is no paintable token. - * - * @return The last paintable token in this token list. - */ - public Token getLastPaintableToken() { - Token t = this; - while (t.isPaintable()) { - if (t.nextToken == null || !t.nextToken.isPaintable()) { - return t; - } - t = t.nextToken; - } - return null; - } - - /** - * Returns the text of this token, as a string. - *

    - * - * Note that this method isn't used much by the rsyntaxtextarea package internally, as it tries to - * limit memory allocation. - * - * @return The text of this token. - */ - public String getLexeme() { - return new String(text, textOffset, textCount); - } - - /** - * Determines the offset into this token list (i.e., into the document) that covers pixel location x if - * the token list starts at pixel location x0 - *

    - * . This method will return the document position "closest" to the x-coordinate (i.e., if they click on the - * "right-half" of the w in awe, the caret will be placed in between the w - * and e; similarly, clicking on the left-half places the caret between the a and - * w). This makes it useful for methods such as viewToModel found in - * javax.swing.text.View subclasses. - *

    - * - * This method is abstract so subclasses who paint themselves differently (i.e., {@link VisibleWhitespaceToken} is - * painted a tad differently than {@link DefaultToken} when rendering hints are enabled) can still return accurate - * results. - * - * @param textArea - * The text area from which the token list was derived. - * @param e - * How to expand tabs. - * @param x0 - * The pixel x-location that is the beginning of tokenList. - * @param x - * The pixel-position for which you want to get the corresponding offset. - * @return The position (in the document, NOT into the token list!) that covers the pixel location. If - * tokenList is null or has type Token.NULL, then -1endBeforeX-startX pixels. For example, if you're using a monospaced 8-pixel-per-character font, have - * the token "while" and startX is 0 and endBeforeX is 30, this - * method will return the document position of the "i" in "while", because the "i" ends at pixel 24, - * while the "l" ends at 32. If not even the first character fits in endBeforeX-startX, - * the first character's position is still returned so calling methods don't go into infinite loops. - * - * @param textArea - * The text area in which this token is being painted. - * @param e - * How to expand tabs. - * @param startX - * The x-coordinate at which the token will be painted. This is needed because of tabs. - * @param endBeforeX - * The x-coordinate for which you want to find the last character of t which comes before - * it. - * @return The last document position that will fit in the specified amount of pixels. - */ - /* - * @see #getTokenListOffsetBeforeX FIXME: This method does not compute correctly! It needs to be abstract and - * implemented by subclasses. - */ - public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, - float startX, float endBeforeX) { - - FontMetrics fm = textArea.getFontMetricsForTokenType(type); - int i = textOffset; - int stop = i + textCount; - float x = startX; - - while (i < stop) { - if (text[i] == '\t') - x = e.nextTabStop(x, 0); - else - x += fm.charWidth(text[i]); - if (x > endBeforeX) { - // If not even the first character fits into the space, go - // ahead and say the first char does fit so we don't go into - // an infinite loop. - int intoToken = Math.max(i - textOffset, 1); - return offset + intoToken; - } - i++; - } - - // If we got here, the whole token fit in (endBeforeX-startX) pixels. - return offset + textCount - 1; - - } - - /** - * Returns the width of this token given the specified parameters. - * - * @param textArea - * The text area in which the token is being painted. - * @param e - * Describes how to expand tabs. This parameter cannot be null. - * @param x0 - * The pixel-location at which the token begins. This is needed because of tabs. - * @return The width of the token, in pixels. - * @see #getWidthUpTo - */ - public float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0) { - return getWidthUpTo(textCount, textArea, e, x0); - } - - /** - * Returns the width of a specified number of characters in this token. For example, for the token "while", - * specifying a value of 3 here returns the width of the "whi" portion of the token. - *

    - * - * This method is abstract so subclasses who paint themselves differently (i.e., {@link VisibleWhitespaceToken} is - * painted a tad differently than {@link DefaultToken} when rendering hints are enabled) can still return accurate - * results. - * - * @param numChars - * The number of characters for which to get the width. - * @param textArea - * The text area in which the token is being painted. - * @param e - * How to expand tabs. This value cannot be null. - * @param x0 - * The pixel-location at which this token begins. This is needed because of tabs. - * @return The width of the specified number of characters in this token. - * @see #getWidth - */ - public abstract float getWidthUpTo(int numChars, RSyntaxTextArea textArea, - TabExpander e, float x0); - - /** - * Returns whether this token is of the specified type, with the specified lexeme. - * - * @param type - * The type to check for. - * @param lexeme - * The lexeme to check for. - * @return Whether this token has that type and lexeme. - */ - public boolean is(int type, String lexeme) { - return this.type == type && textCount == lexeme.length() && - lexeme.equals(getLexeme()); - } - - /** - * Returns whether this token is a comment. - * - * @return Whether this token is a comment. - * @see #isWhitespace() - */ - public boolean isComment() { - return type >= Token.COMMENT_EOL && type <= Token.COMMENT_DOCUMENTATION; - } - - /** - * Returns whether this token is a hyperlink. - * - * @return Whether this token is a hyperlink. - * @see #setHyperlink(boolean) - */ - public boolean isHyperlink() { - return hyperlink; - } - - /** - * Returns whether this token is a {@link #SEPARATOR} representing a single left curly brace. - * - * @return Whether this token is a left curly brace. - * @see #isRightCurly() - */ - public boolean isLeftCurly() { - return type == SEPARATOR && isSingleChar('{'); - } - - /** - * Returns whether this token is a {@link #SEPARATOR} representing a single right curly brace. - * - * @return Whether this token is a right curly brace. - * @see #isLeftCurly() - */ - public boolean isRightCurly() { - return type == SEPARATOR && isSingleChar('}'); - } - - /** - * Returns whether or not this token is "paintable;" i.e., whether or not the type of this token is one such that it - * has an associated syntax style. What this boils down to is whether the token type is greater than - * Token.NULL. - * - * @return Whether or not this token is paintable. - */ - public boolean isPaintable() { - return type > Token.NULL; - } - - /** - * Returns whether this token is the specified single character. - * - * @param ch - * The character to check for. - * @return Whether this token's lexeme is the single character specified. - */ - public boolean isSingleChar(char ch) { - return textCount == 1 && text[textOffset] == ch; - } - - /** - * Returns whether or not this token is whitespace. - * - * @return true iff this token is whitespace. - * @see #isComment() - */ - public boolean isWhitespace() { - return type == WHITESPACE; - } - - /** - * Returns the bounding box for the specified document location. The location must be in the specified token list; - * if it isn't, null is returned. - * - * @param textArea - * The text area from which the token list was derived. - * @param e - * How to expand tabs. - * @param pos - * The position in the document for which to get the bounding box in the view. - * @param x0 - * The pixel x-location that is the beginning of tokenList. - * @param rect - * The rectangle in which we'll be returning the results. This object is reused to keep from frequent - * memory allocations. - * @return The bounding box for the specified position in the model. - */ - public abstract Rectangle listOffsetToView(RSyntaxTextArea textArea, - TabExpander e, int pos, int x0, - Rectangle rect); - - /** - * Makes this token start at the specified offset into the document. - * - * @param pos - * The offset into the document this token should start at. Note that this token must already contain - * this position; if it doesn't, an exception is thrown. - * @throws IllegalArgumentException - * If pos is not already contained by this token. - * @see #moveOffset(int) - */ - public void makeStartAt(int pos) { - if (pos < offset || pos >= (offset + textCount)) { - throw new IllegalArgumentException("pos " + pos + - " is not in range " + offset + "-" + (offset + textCount - 1)); - } - int shift = pos - offset; - offset = pos; - textOffset += shift; - textCount -= shift; - } - - /** - * Moves the starting offset of this token. - * - * @param amt - * The amount to move the starting offset. This should be between 0 and - * textCount, inclusive. - * @throws IllegalArgumentException - * If amt is an invalid value. - * @see #makeStartAt(int) - */ - public void moveOffset(int amt) { - if (amt < 0 || amt > textCount) { - throw new IllegalArgumentException("amt " + amt + - " is not in range 0-" + textCount); - } - offset += amt; - textOffset += amt; - textCount -= amt; - } - - /** - * Paints this token. - * - * @param g - * The graphics context in which to paint. - * @param x - * The x-coordinate at which to paint. - * @param y - * The y-coordinate at which to paint. - * @param host - * The text area this token is in. - * @param e - * How to expand tabs. - * @return The x-coordinate representing the end of the painted text. - */ - public final float paint(Graphics2D g, float x, float y, - RSyntaxTextArea host, TabExpander e) { - return paint(g, x, y, host, e, 0); - } - - /** - * Paints this token. - * - * @param g - * The graphics context in which to paint. - * @param x - * The x-coordinate at which to paint. - * @param y - * The y-coordinate at which to paint. - * @param host - * The text area this token is in. - * @param e - * How to expand tabs. - * @param clipStart - * The left boundary of the clip rectangle in which we're painting. This optimizes painting by allowing - * us to not paint paint when this token is "to the left" of the clip rectangle. - * @return The x-coordinate representing the end of the painted text. - */ - public abstract float paint(Graphics2D g, float x, float y, - RSyntaxTextArea host, - TabExpander e, float clipStart); - - /** - * Paints the background of a token. - * - * @param x - * The x-coordinate of the token. - * @param y - * The y-coordinate of the token. - * @param width - * The width of the token (actually, the width of the part of the token to paint). - * @param height - * The height of the token. - * @param g - * The graphics context with which to paint. - * @param fontAscent - * The ascent of the token's font. - * @param host - * The text area. - * @param color - * The color with which to paint. - */ - protected void paintBackground(float x, float y, float width, float height, - Graphics2D g, int fontAscent, - RSyntaxTextArea host, Color color) { - // RSyntaxTextArea's bg can be null, so we must check for this. - Color temp = host.getBackground(); - g.setXORMode(temp != null ? temp : Color.WHITE); - g.setColor(color); - bgRect.setRect(x, y - fontAscent, width, height); - g.fill(bgRect); - g.setPaintMode(); - } - - /** - * Sets the value of this token to a particular segment of a document. The "next token" value is cleared. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param offset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public void set(final char[] line, final int beg, final int end, - final int offset, final int type) { - this.text = line; - this.textOffset = beg; - this.textCount = end - beg + 1; - this.type = type; - this.offset = offset; - nextToken = null; - } - - /** - * Sets whether this token is a hyperlink. - * - * @param hyperlink - * Whether this token is a hyperlink. - * @see #isHyperlink() - */ - public void setHyperlink(boolean hyperlink) { - this.hyperlink = hyperlink; - } - - /** - * Sets the "next token" pointer of this token to point to the specified token. - * - * @param nextToken - * The new next token. - * @see #getNextToken - */ - public void setNextToken(Token nextToken) { - this.nextToken = nextToken; - } - - /** - * Returns the position in the document corresponding to the specified position in this token's internal char array - * (textOffset - textOffset+textCount-1). - *

    - * Note that this method does NOT do any bounds checking; you can pass in an invalid token position, and you will - * not receive an Exception or any other indication that the returned document position is invalid. It is up to the - * user to ensure valid input. - * - * @param pos - * A position in the token's internal char array (textOffset - - * textOffset+textCount). - * @return The corresponding position in the document. - * @see #documentToToken - */ - public int tokenToDocument(int pos) { - return pos + (offset - textOffset); - } - - /** - * Returns this token as a String, which is useful for debugging. - * - * @return A string describing this token. - */ - public String toString() { - return "[Token: " + - (type == Token.NULL ? "" : - "text: '" + - (text == null ? "" : getLexeme() + "'; " + - "offset: " + offset + "; type: " + type + "; " + - "isPaintable: " + isPaintable() + - "; nextToken==null: " + (nextToken == null))) + - "]"; - } - -} \ No newline at end of file +public interface Token extends TokenTypes { + + /** + * Appends HTML code for painting this token, using the given text area's + * color scheme. + * + * @param sb The buffer to append to. + * @param textArea The text area whose color scheme to use. + * @param fontFamily Whether to include the font family in the HTML for + * this token. You can pass false for this parameter + * if, for example, you are making all your HTML be monospaced, + * and don't want any crazy fonts being used in the editor to be + * reflected in your HTML. + * @return The buffer appended to. + * @see #getHTMLRepresentation(RSyntaxTextArea) + */ + StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, + boolean fontFamily); + + + /** + * Appends HTML code for painting this token, using the given text area's + * color scheme. + * + * @param sb The buffer to append to. + * @param textArea The text area whose color scheme to use. + * @param fontFamily Whether to include the font family in the HTML for + * this token. You can pass false for this parameter + * if, for example, you are making all your HTML be monospaced, + * and don't want any crazy fonts being used in the editor to be + * reflected in your HTML. + * @param tabsToSpaces Whether to convert tabs into spaces. + * @return The buffer appended to. + * @see #getHTMLRepresentation(RSyntaxTextArea) + */ + StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, boolean fontFamily, + boolean tabsToSpaces); + + + /** + * Returns the character at the specified offset in the token. + * + * @param index The index. This should be in the range + * 0-({@link #length()}-1). + * @return The character. + * @see #length() + */ + char charAt(int index); + + + /** + * Returns whether the token straddles the specified position in the + * document. + * + * @param pos The position in the document to check. + * @return Whether the specified position is straddled by this token. + */ + boolean containsPosition(int pos); + + + /** + * Returns the position in the token's internal char array corresponding + * to the specified document position.

    + * Note that this method does NOT do any bounds checking; you can pass in + * a document position that does not correspond to a position in this + * token, and you will not receive an Exception or any other notification; + * it is up to the caller to ensure valid input. + * + * @param pos A position in the document that is represented by this token. + * @return The corresponding token position >= textOffset + * and < textOffset+textCount. + * @see #tokenToDocument + */ + int documentToToken(int pos); + + + /** + * Returns whether this token's lexeme ends with the specified characters. + * + * @param ch The characters. + * @return Whether this token's lexeme ends with the specified characters. + * @see #startsWith(char[]) + */ + boolean endsWith(char[] ch); + + + /** + * Returns the end offset of this token in the document (exclusive). In + * other words, the token ranges from + * [getOffset(), getEndOffset()). + * + * @return The end offset of this token. + * @see #getOffset() + */ + int getEndOffset(); + + + /** + * Returns a String containing HTML code for painting this + * token, using the given text area's color scheme. + * + * @param textArea The text area whose color scheme to use. + * @return The HTML representation of the token. + * @see #appendHTMLRepresentation(StringBuilder, RSyntaxTextArea, boolean) + */ + String getHTMLRepresentation(RSyntaxTextArea textArea); + + + /** + * Returns the language index of this token. + * + * @return The language index. A value of 0 denotes the + * "main" language, any positive value denotes a specific secondary + * language. + * @see #setLanguageIndex(int) + */ + int getLanguageIndex(); + + + /** + * Returns the last token in this list that is not whitespace or a + * comment. + * + * @return The last non-comment, non-whitespace token, or null + * if there isn't one. + */ + Token getLastNonCommentNonWhitespaceToken(); + + + /** + * Returns the last paintable token in this token list, or null + * if there is no paintable token. + * + * @return The last paintable token in this token list. + */ + Token getLastPaintableToken(); + + + /** + * Returns the text of this token, as a string.

    + * + * Note that this method isn't used much by the + * ryntaxtextarea package internally, as it tries to limit + * memory allocation. + * + * @return The text of this token. + */ + String getLexeme(); + + + /** + * Determines the offset into this token list (i.e., into the + * document) that covers pixel location x if the token list + * starts at pixel location x0

    . + * This method will return the document position "closest" to the + * x-coordinate (i.e., if they click on the "right-half" of the + * w in awe, the caret will be placed in + * between the w and e; similarly, clicking on + * the left-half places the caret between the a and + * w). This makes it useful for methods such as + * viewToModel found in javax.swing.text.View + * subclasses. + * + * @param textArea The text area from which the token list was derived. + * @param e How to expand tabs. + * @param x0 The pixel x-location that is the beginning of + * tokenList. + * @param x The pixel-position for which you want to get the corresponding + * offset. + * @return The position (in the document, NOT into the token list!) that + * covers the pixel location. If tokenList is + * null or has type Token.NULL, then + * -1 is returned; the caller should recognize this and + * return the actual end position of the (empty) line. + */ + int getListOffset(RSyntaxTextArea textArea, TabExpander e, + float x0, float x); + + + /** + * Returns the token after this one in the linked list. + * + * @return The next token. + */ + Token getNextToken(); + + + /** + * Returns the offset into the document at which this token resides. + * + * @return The offset into the document. + * @see #getEndOffset() + */ + int getOffset(); + + + /** + * Returns the position in the document that represents the last character + * in the token that will fit into endBeforeX-startX pixels. + * For example, if you're using a monospaced 8-pixel-per-character font, + * have the token "while" and startX is 0 and + * endBeforeX is 30, this method will return the + * document position of the "i" in "while", because the "i" ends at pixel + * 24, while the "l" ends at 32. If not even the + * first character fits in endBeforeX-startX, the first + * character's position is still returned so calling methods don't go into + * infinite loops. + * + * @param textArea The text area in which this token is being painted. + * @param e How to expand tabs. + * @param startX The x-coordinate at which the token will be painted. This + * is needed because of tabs. + * @param endBeforeX The x-coordinate for which you want to find the last + * character of t which comes before it. + * @return The last document position that will fit in the specified amount + * of pixels. + */ + /* + * @see #getTokenListOffsetBeforeX + * FIXME: This method does not compute correctly! It needs to be abstract + * and implemented by subclasses. + */ + int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, + float startX, float endBeforeX); + + + /** + * Returns the character array backing the lexeme of this token. This + * value should be treated as read-only. + * + * @return A character array containing the lexeme of this token. + * @see #getTextOffset() + * @see #length() + */ + char[] getTextArray(); + + + /** + * Returns the offset into the character array of the lexeme in + * {@link #getTextArray()}. + * + * @return The offset of the lexeme in the character array. + * @see #getTextArray() + */ + int getTextOffset(); + + + /** + * Returns the type of this token. + * + * @return The type of this token. + * @see TokenTypes + * @see #setType(int) + */ + int getType(); + + + /** + * Returns the width of this token given the specified parameters. + * + * @param textArea The text area in which the token is being painted. + * @param e Describes how to expand tabs. This parameter cannot be + * null. + * @param x0 The pixel-location at which the token begins. This is needed + * because of tabs. + * @return The width of the token, in pixels. + * @see #getWidthUpTo + */ + float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0); + + + /** + * Returns the width of a specified number of characters in this token. + * For example, for the token "while", specifying a value of 3 + * here returns the width of the "whi" portion of the token. + * + * @param numChars The number of characters for which to get the width. + * @param textArea The text area in which the token is being painted. + * @param e How to expand tabs. This value cannot be null. + * @param x0 The pixel-location at which this token begins. This is needed + * because of tabs. + * @return The width of the specified number of characters in this token. + * @see #getWidth + */ + float getWidthUpTo(int numChars, RSyntaxTextArea textArea, + TabExpander e, float x0); + + + /** + * Returns whether this token's lexeme matches a specific character array. + * + * @param lexeme The lexeme to check for. + * @return Whether this token has that lexeme. + * @see #is(int, char[]) + * @see #is(int, String) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(char[] lexeme); + + + /** + * Returns whether this token is of the specified type, with the specified + * lexeme.

    + * This method is preferred over the other overload in performance-critical + * code where this operation may be called frequently, since it does not + * involve any String allocations. + * + * @param type The type to check for. + * @param lexeme The lexeme to check for. + * @return Whether this token has that type and lexeme. + * @see #is(int, String) + * @see #is(char[]) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(int type, char[] lexeme); + + + /** + * Returns whether this token is of the specified type, with the specified + * lexeme.

    + * The other overload of this method is preferred over this one in + * performance-critical code, as this one involves a String allocation + * while the other does not. + * + * @param type The type to check for. + * @param lexeme The lexeme to check for. + * @return Whether this token has that type and lexeme. + * @see #is(int, char[]) + * @see #isSingleChar(int, char) + * @see #startsWith(char[]) + */ + boolean is(int type, String lexeme); + + + /** + * Returns whether this token is a comment. + * + * @return Whether this token is a comment. + * @see #isWhitespace() + * @see #isCommentOrWhitespace() + */ + boolean isComment(); + + + /** + * Returns whether this token is a comment or whitespace. + * + * @return Whether this token is a comment or whitespace. + * @see #isComment() + * @see #isWhitespace() + */ + boolean isCommentOrWhitespace(); + + + /** + * Returns whether this token is a hyperlink. + * + * @return Whether this token is a hyperlink. + * @see #setHyperlink(boolean) + */ + boolean isHyperlink(); + + + /** + * Returns whether this token is an identifier. + * + * @return Whether this token is an identifier. + */ + boolean isIdentifier(); + + + /** + * Returns whether this token is a {@link #SEPARATOR} representing a single + * left curly brace. + * + * @return Whether this token is a left curly brace. + * @see #isRightCurly() + */ + boolean isLeftCurly(); + + + /** + * Returns whether this token is a {@link #SEPARATOR} representing a single + * right curly brace. + * + * @return Whether this token is a right curly brace. + * @see #isLeftCurly() + */ + boolean isRightCurly(); + + + /** + * Returns whether or not this token is "paintable;" i.e., whether or not + * the type of this token is one such that it has an associated syntax + * style. What this boils down to is whether the token type is greater + * than Token.NULL. + * + * @return Whether or not this token is paintable. + */ + boolean isPaintable(); + + + /** + * Returns whether this token is the specified single character. + * + * @param ch The character to check for. + * @return Whether this token's lexeme is the single character specified. + * @see #isSingleChar(int, char) + */ + boolean isSingleChar(char ch); + + + /** + * Returns whether this token is the specified single character, and of a + * specific type. + * + * @param type The token type. + * @param ch The character to check for. + * @return Whether this token is of the specified type, and with a lexeme + * Equaling the single character specified. + * @see #isSingleChar(char) + */ + boolean isSingleChar(int type, char ch); + + + /** + * Returns whether or not this token is whitespace. + * + * @return true iff this token is whitespace. + * @see #isComment() + * @see #isCommentOrWhitespace() + */ + boolean isWhitespace(); + + + /** + * Returns the length of this token. + * + * @return The length of this token. + * @see #getOffset() + */ + int length(); + + + /** + * Returns the bounding box for the specified document location. The + * location must be in the specified token list; if it isn't, + * null is returned. + * + * @param textArea The text area from which the token list was derived. + * @param e How to expand tabs. + * @param pos The position in the document for which to get the bounding + * box in the view. + * @param x0 The pixel x-location that is the beginning of + * tokenList. + * @param rect The rectangle in which we'll be returning the results. This + * object is reused to keep from frequent memory allocations. + * @return The bounding box for the specified position in the model. + */ + Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, + int pos, int x0, Rectangle rect); + + + /** + * Sets whether this token is a hyperlink. + * + * @param hyperlink Whether this token is a hyperlink. + * @see #isHyperlink() + */ + void setHyperlink(boolean hyperlink); + + + /** + * Sets the language index for this token. If this value is positive, it + * denotes a specific "secondary" language this token represents (such as + * JavaScript code or CSS embedded in an HTML file). If this value is + * 0, this token is in the "main" language being edited. + * Negative values are invalid and treated as 0. + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + void setLanguageIndex(int languageIndex); + + + /** + * Sets the type of this token. + * + * @param type The new token type. + * @see TokenTypes + * @see #getType() + */ + void setType(int type); + + + /** + * Returns whether this token starts with the specified characters. + * + * @param chars The characters. + * @return Whether this token starts with those characters. + * @see #endsWith(char[]) + * @see #is(int, char[]) + */ + boolean startsWith(char[] chars); + + + /** + * Returns the position in the document corresponding to the specified + * position in this token's internal char array (textOffset - + * textOffset+textCount-1).

    + * Note that this method does NOT do any bounds checking; you can pass in + * an invalid token position, and you will not receive an Exception or any + * other indication that the returned document position is invalid. It is + * up to the user to ensure valid input. + * + * @param pos A position in the token's internal char array + * (textOffset - textOffset+textCount). + * @return The corresponding position in the document. + * @see #documentToToken(int) + */ + int tokenToDocument(int pos); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java old mode 100644 new mode 100755 index 0d3923e04..fa74a1e92 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenFactory.java @@ -2,82 +2,64 @@ * 10/28/2004 * * TokenFactory.java - Interface for a class that generates tokens of some type. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; + /** * Interface for a class that generates tokens somehow. - * + * * @author Robert Futrell * @version 0.1 */ interface TokenFactory { - /** - * Returns a null token. - * - * @return A null token. - */ - public Token createToken(); - /** - * Returns a token. - * - * @param line - * The segment from which to get the token's text. - * @param beg - * The starting offset of the token's text in the segment. - * @param end - * The ending offset of the token's text in the segment. - * @param startOffset - * The offset in the document of the token. - * @param type - * The type of token. - * @return The token. - */ - public Token createToken(final Segment line, final int beg, - final int end, final int startOffset, final int type); + /** + * Returns a null token. + * + * @return A null token. + */ + TokenImpl createToken(); + + + /** + * Returns a token. + * + * @param line The segment from which to get the token's text. + * @param beg The starting offset of the token's text in the segment. + * @param end The ending offset of the token's text in the segment. + * @param startOffset The offset in the document of the token. + * @param type The type of token. + * @return The token. + */ + TokenImpl createToken(Segment line, int beg, int end, int startOffset, int type); + + + /** + * Returns a token. + * + * @param line The char array from which to get the token's text. + * @param beg The starting offset of the token's text in the char array. + * @param end The ending offset of the token's text in the char array. + * @param startOffset The offset in the document of the token. + * @param type The type of token. + * @return The token. + */ + TokenImpl createToken(char[] line, int beg, int end, int startOffset, int type); + - /** - * Returns a token. - * - * @param line - * The char array from which to get the token's text. - * @param beg - * The starting offset of the token's text in the char array. - * @param end - * The ending offset of the token's text in the char array. - * @param startOffset - * The offset in the document of the token. - * @param type - * The type of token. - * @return The token. - */ - public Token createToken(final char[] line, final int beg, - final int end, final int startOffset, final int type); + /** + * Resets the state of this token maker. This method should be called + * by the TokenMaker every time a token list is generated for + * a new line so the tokens can be reused. + */ + void resetAllTokens(); - /** - * Resets the state of this token maker, if necessary. FIXME: Improve documentation. - */ - public void resetAllTokens(); -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenImpl.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenImpl.java new file mode 100755 index 000000000..f7acd093f --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenImpl.java @@ -0,0 +1,956 @@ +/* + * 02/21/2004 + * + * Token.java - A token used in syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Rectangle; + +import javax.swing.text.Segment; +import javax.swing.text.TabExpander; +import javax.swing.text.Utilities; + + +/** + * The default implementation of {@link Token}.

    + * + * Note: The instances of Token returned by + * {@link RSyntaxDocument}s are pooled and should always be treated as + * immutable. They should not be cast to TokenImpl and modified. + * Modifying tokens you did not create yourself can and will result in + * rendering issues and/or runtime exceptions. You have been warned! + * + * @author Robert Futrell + * @version 0.3 + */ +@SuppressWarnings({ "checkstyle:visibilitymodifier" }) +public class TokenImpl implements Token { + + /** + * The text this token represents. This is implemented as a segment so we + * can point directly to the text in the document without having to make a + * copy of it. + */ + public char[] text; + public int textOffset; + public int textCount; + + /** + * The offset into the document at which this token resides. + */ + private int offset; + + /** + * The type of token this is; for example, {@link #FUNCTION}. + */ + private int type; + + /** + * Whether this token is a hyperlink. + */ + private boolean hyperlink; + + /** + * The next token in this linked list. + */ + private Token nextToken; + + /** + * The language this token is in, >= 0. + */ + private int languageIndex; + + + /** + * Creates a "null" token. The token itself is not null; rather, it + * signifies that it is the last token in a linked list of tokens and + * that it is not part of a "multi-line token." + */ + public TokenImpl() { + this.text = null; + this.textOffset = -1; + this.textCount = -1; + this.setType(NULL); + setOffset(-1); + hyperlink = false; + nextToken = null; + } + + + /** + * Constructor. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param startOffset The offset into the document at which this + * token begins. + * @param type A token type listed as "generic" above. + * @param languageIndex The language index for this token. + */ + public TokenImpl(Segment line, int beg, int end, int startOffset, int type, + int languageIndex) { + this(line.array, beg,end, startOffset, type, languageIndex); + } + + + /** + * Constructor. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param startOffset The offset into the document at which this + * token begins. + * @param type A token type listed as "generic" above. + * @param languageIndex The language index for this token. + */ + public TokenImpl(char[] line, int beg, int end, int startOffset, int type, + int languageIndex) { + this(); + set(line, beg,end, startOffset, type); + setLanguageIndex(languageIndex); + } + + + /** + * Creates this token as a copy of the passed-in token. + * + * @param t2 The token from which to make a copy. + */ + public TokenImpl(Token t2) { + this(); + copyFrom(t2); + } + + + @Override + public StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, + boolean fontFamily) { + return appendHTMLRepresentation(sb, textArea, fontFamily, false); + } + + + @Override + public StringBuilder appendHTMLRepresentation(StringBuilder sb, + RSyntaxTextArea textArea, boolean fontFamily, + boolean tabsToSpaces) { + + SyntaxScheme colorScheme = textArea.getSyntaxScheme(); + Style scheme = colorScheme.getStyle(getType()); + Font font = textArea.getFontForTokenType(getType());//scheme.font; + + if (font.isBold()) { + sb.append(""); + } + if (font.isItalic()) { + sb.append(""); + } + if (scheme.underline || isHyperlink()) { + sb.append(""); + } + + boolean needsFontTag = fontFamily || !isWhitespace(); + if (needsFontTag) { + sb.append("'); + } + + // NOTE: Don't use getLexeme().trim() because whitespace tokens will + // be turned into NOTHING. + appendHtmlLexeme(textArea, sb, tabsToSpaces); + + if (needsFontTag) { + sb.append(""); + } + if (scheme.underline || isHyperlink()) { + sb.append(""); + } + if (font.isItalic()) { + sb.append(""); + } + if (font.isBold()) { + sb.append(""); + } + + return sb; + + } + + + /** + * Appends an HTML version of the lexeme of this token (i.e. no style + * HTML, but replacing chars such as \t, < + * and > with their escapes). + * + * @param textArea The text area. + * @param sb The buffer to append to. + * @param tabsToSpaces Whether to convert tabs into spaces. + * @return The same buffer. + */ + private StringBuilder appendHtmlLexeme(RSyntaxTextArea textArea, + StringBuilder sb, boolean tabsToSpaces) { + + boolean lastWasSpace = false; + int i = textOffset; + int lastI = i; + String tabStr = null; + + while (i': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append(">"); + lastWasSpace = false; + break; + case '\'': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("'"); + lastWasSpace = false; + break; + case '"': + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("""); + lastWasSpace = false; + break; + case '/': // OWASP-recommended to escape even though unnecessary + sb.append(text, lastI, i-lastI); + lastI = i+1; + sb.append("/"); + lastWasSpace = false; + break; + default: + lastWasSpace = false; + break; + } + i++; + } + if (lastI=getOffset() && postextCount) { + return false; + } + final int start = textOffset + textCount - ch.length; + for (int i=0; iString of the form "#xxxxxx" good for use + * in HTML, representing the given color. + * + * @param color The color to get a string for. + * @return The HTML form of the color. If color is + * null, #000000 is returned. + */ + private static String getHTMLFormatForColor(Color color) { + if (color==null) { + return "black"; + } + String hexRed = Integer.toHexString(color.getRed()); + if (hexRed.length()==1) { + hexRed = "0" + hexRed; + } + String hexGreen = Integer.toHexString(color.getGreen()); + if (hexGreen.length()==1) { + hexGreen = "0" + hexGreen; + } + String hexBlue = Integer.toHexString(color.getBlue()); + if (hexBlue.length()==1) { + hexBlue = "0" + hexBlue; + } + return "#" + hexRed + hexGreen + hexBlue; + } + + + @Override + public String getHTMLRepresentation(RSyntaxTextArea textArea) { + StringBuilder buf = new StringBuilder(); + appendHTMLRepresentation(buf, textArea, true); + return buf.toString(); + } + + + @Override + public int getLanguageIndex() { + return languageIndex; + } + + + @Override + public Token getLastNonCommentNonWhitespaceToken() { + + Token last = null; + + for (Token t=this; t!=null && t.isPaintable(); t=t.getNextToken()) { + switch (t.getType()) { + case COMMENT_DOCUMENTATION: + case COMMENT_EOL: + case COMMENT_MULTILINE: + case COMMENT_KEYWORD: + case COMMENT_MARKUP: + case WHITESPACE: + break; + default: + last = t; + break; + } + } + + return last; + + } + + + @Override + public Token getLastPaintableToken() { + Token t = this; + while (t.isPaintable()) { + Token next = t.getNextToken(); + if (next==null || !next.isPaintable()) { + return t; + } + t = next; + } + return null; + } + + + @Override + public String getLexeme() { + if (text == null) { + return null; + } + return isPaintable() ? new String(text, textOffset, textCount) : null; + } + + + @Override + public int getListOffset(RSyntaxTextArea textArea, TabExpander e, + float x0, float x) { + + // If the coordinate in question is before this line's start, quit. + if (x0 >= x) { + return getOffset(); + } + + float currX = x0; // x-coordinate of current char. + float nextX = x0; // x-coordinate of next char. + float stableX = x0; // Cached ending x-coord. of last tab or token. + TokenImpl token = this; + int last = getOffset(); + FontMetrics fm = null; + + while (token != null && token.isPaintable()) { + + fm = textArea.getFontMetricsForTokenType(token.getType()); + char[] text = token.text; + int start = token.textOffset; + int end = start + token.textCount; + + for (int i = start; i < end; i++) { + currX = nextX; + if (text[i] == '\t') { + nextX = e.nextTabStop(nextX, 0); + stableX = nextX; // Cache ending x-coord. of tab. + start = i + 1; // Do charsWidth() from next char. + } + else { + nextX = stableX + fm.charsWidth(text, start, i - start + 1); + } + if (x >= currX && x < nextX) { + if ((x - currX) < (nextX - x)) { + return last + i - token.textOffset; + } + return last + i + 1 - token.textOffset; + } + } + + stableX = nextX; // Cache ending x-coordinate of token. + last += token.textCount; + token = (TokenImpl)token.getNextToken(); + + } + + // If we didn't find anything, return the end position of the text. + return last; + + } + + + @Override + public Token getNextToken() { + return nextToken; + } + + + @Override + public int getOffset() { + return offset; + } + + + @Override + public int getOffsetBeforeX(RSyntaxTextArea textArea, TabExpander e, + float startX, float endBeforeX) { + + FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); + int i = textOffset; + int stop = i + textCount; + float x = startX; + + while (iendBeforeX) { + // If not even the first character fits into the space, go + // ahead and say the first char does fit so we don't go into + // an infinite loop. + int intoToken = Math.max(i-textOffset, 1); + return getOffset() + intoToken; + } + i++; + } + + // If we got here, the whole token fit in (endBeforeX-startX) pixels. + return getOffset() + textCount - 1; + + } + + + @Override + public char[] getTextArray() { + return text; + } + + + @Override + public int getTextOffset() { + return textOffset; + } + + + @Override + public int getType() { + return type; + } + + + @Override + public float getWidth(RSyntaxTextArea textArea, TabExpander e, float x0) { + return getWidthUpTo(textCount, textArea, e, x0); + } + + + @Override + public float getWidthUpTo(int numChars, RSyntaxTextArea textArea, + TabExpander e, float x0) { + float width = x0; + FontMetrics fm = textArea.getFontMetricsForTokenType(getType()); + if (fm != null) { + int w; + int currentStart = textOffset; + int endBefore = textOffset + numChars; + for (int i = currentStart; i < endBefore; i++) { + if (text[i] == '\t') { + // Since TokenMaker implementations usually group all + // adjacent whitespace into a single token, there + // aren't usually any characters to compute a width + // for here, so we check before calling. + w = i - currentStart; + if (w > 0) { + width += fm.charsWidth(text, currentStart, w); + } + currentStart = i + 1; + width = e.nextTabStop(width, 0); + } + } + // Most (non-whitespace) tokens will have characters at this + // point to get the widths for, so we don't check for w>0 (mini- + // optimization). + w = endBefore - currentStart; + width += fm.charsWidth(text, currentStart, w); + } + return width - x0; + } + + + @Override + public int hashCode() { + return offset + (getLexeme()==null ? 0 : getLexeme().hashCode()); + } + + + @Override + public boolean is(char[] lexeme) { + if (textCount==lexeme.length) { + for (int i=0; i=Token.COMMENT_EOL && getType()<=Token.COMMENT_MARKUP; + } + + + @Override + public boolean isCommentOrWhitespace() { + return isComment() || isWhitespace(); + } + + + @Override + public boolean isHyperlink() { + return hyperlink; + } + + + @Override + public boolean isIdentifier() { + return getType()==IDENTIFIER; + } + + + @Override + public boolean isLeftCurly() { + return getType()==SEPARATOR && isSingleChar('{'); + } + + + @Override + public boolean isRightCurly() { + return getType()==SEPARATOR && isSingleChar('}'); + } + + + @Override + public boolean isPaintable() { + return getType()>Token.NULL; + } + + + @Override + public boolean isSingleChar(char ch) { + return textCount==1 && text[textOffset]==ch; + } + + + @Override + public boolean isSingleChar(int type, char ch) { + return this.getType()==type && isSingleChar(ch); + } + + + @Override + public boolean isWhitespace() { + return getType()==WHITESPACE; + } + + + @Override + public int length() { + return textCount; + } + + + @Override + public Rectangle listOffsetToView(RSyntaxTextArea textArea, TabExpander e, + int pos, int x0, Rectangle rect) { + + int stableX = x0; // Cached ending x-coord. of last tab or token. + TokenImpl token = this; + FontMetrics fm = null; + Segment s = new Segment(); + + while (token != null && token.isPaintable()) { + + fm = textArea.getFontMetricsForTokenType(token.getType()); + if (fm == null) { + return rect; // Don't return null as things'll error. + } + char[] text = token.text; + int start = token.textOffset; + int end = start + token.textCount; + + // If this token contains the position for which to get the + // bounding box... + if (token.containsPosition(pos)) { + + s.array = token.text; + s.offset = token.textOffset; + s.count = pos - token.getOffset(); + + // Must use this (actually fm.charWidth()), and not + // fm.charsWidth() for returned value to match up with where + // text is actually painted on OS X! + int w = Utilities.getTabbedTextWidth(s, fm, stableX, e, + token.getOffset()); + rect.x = stableX + w; + end = token.documentToToken(pos); + + if (text[end] == '\t') { + rect.width = fm.charWidth(' '); + } + else { + rect.width = fm.charWidth(text[end]); + } + + return rect; + + } + + // If this token does not contain the position for which to get + // the bounding box... + else { + s.array = token.text; + s.offset = token.textOffset; + s.count = token.textCount; + stableX += Utilities.getTabbedTextWidth(s, fm, stableX, e, + token.getOffset()); + } + + token = (TokenImpl)token.getNextToken(); + + } + + // If we didn't find anything, we're at the end of the line. Return + // a width of 1 (so selection highlights don't extend way past line's + // text). A ConfigurableCaret will know to paint itself with a larger + // width. + rect.x = stableX; + rect.width = 1; + return rect; + + } + + + /** + * Makes this token start at the specified offset into the document.

    + * + * Note: You should not modify Token instances you + * did not create yourself (e.g., came from an + * RSyntaxDocument). If you do, rendering issues and/or + * runtime exceptions will likely occur. You have been warned! + * + * @param pos The offset into the document this token should start at. + * Note that this token must already contain this position; if + * it doesn't, an exception is thrown. + * @throws IllegalArgumentException If pos is not already contained by + * this token. + * @see #moveOffset(int) + */ + public void makeStartAt(int pos) { + if (pos=(getOffset()+textCount)) { + throw new IllegalArgumentException("pos " + pos + + " is not in range " + getOffset() + "-" + (getOffset()+textCount-1)); + } + int shift = pos - getOffset(); + setOffset(pos); + textOffset += shift; + textCount -= shift; + } + + + /** + * Moves the starting offset of this token.

    + * + * Note: You should not modify Token instances you + * did not create yourself (e.g., came from an + * RSyntaxDocument). If you do, rendering issues and/or + * runtime exceptions will likely occur. You have been warned! + * + * @param amt The amount to move the starting offset. This should be + * between 0 and textCount, inclusive. + * @throws IllegalArgumentException If amt is an invalid value. + * @see #makeStartAt(int) + */ + public void moveOffset(int amt) { + if (amt<0 || amt>textCount) { + throw new IllegalArgumentException("amt " + amt + + " is not in range 0-" + textCount); + } + setOffset(getOffset() + amt); + textOffset += amt; + textCount -= amt; + } + + + /** + * Sets the value of this token to a particular segment of a document. + * The "next token" value is cleared. + * + * @param line The segment from which to get the token. + * @param beg The first character's position in line. + * @param end The last character's position in line. + * @param offset The offset into the document at which this token begins. + * @param type A token type listed as "generic" above. + */ + public void set(final char[] line, final int beg, final int end, + final int offset, final int type) { + this.text = line; + this.textOffset = beg; + this.textCount = end - beg + 1; + this.setType(type); + this.setOffset(offset); + nextToken = null; + } + + + /** + * Sets whether this token is a hyperlink. + * + * @param hyperlink Whether this token is a hyperlink. + * @see #isHyperlink() + */ + @Override + public void setHyperlink(boolean hyperlink) { + this.hyperlink = hyperlink; + } + + + /** + * Sets the language index for this token. If this value is positive, it + * denotes a specific "secondary" language this token represents (such as + * JavaScript code or CSS embedded in an HTML file). If this value is + * 0, this token is in the "main" language being edited. + * Negative values are invalid and treated as 0. + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + @Override + public void setLanguageIndex(int languageIndex) { + this.languageIndex = languageIndex; + } + + + /** + * Sets the "next token" pointer of this token to point to the specified + * token. + * + * @param nextToken The new next token. + * @see #getNextToken() + */ + public void setNextToken(Token nextToken) { + this.nextToken = nextToken; + } + + + /** + * Sets the offset into the document at which this token resides. + * + * @param offset The new offset into the document. + * @see #getOffset() + */ + public void setOffset(int offset) { + this.offset = offset; + } + + + @Override + public void setType(int type) { + this.type = type; + } + + + @Override + public boolean startsWith(char[] chars) { + if (chars.length<=textCount){ + for (int i=0; iString, which is useful for + * debugging. + * + * @return A string describing this token. + */ + @Override + public String toString() { + return "[Token: " + + (getType()==Token.NULL ? "" : + "text: '" + + (text==null ? "" : getLexeme() + "'; " + + "offset: " + getOffset() + "; type: " + getType() + "; " + + "isPaintable: " + isPaintable() + + "; nextToken==null: " + (nextToken==null))) + + "]"; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenIterator.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenIterator.java new file mode 100755 index 000000000..ac67e2a47 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenIterator.java @@ -0,0 +1,127 @@ +/* + * 08/28/2013 + * + * TokenIterator.java - An iterator over the Tokens in an RSyntaxDocument. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.util.Iterator; + + +/** + * Allows you to iterate through all paintable tokens in an + * RSyntaxDocument. + * + * @author Robert Futrell + * @version 1.0 + */ +class TokenIterator implements Iterator { + + private RSyntaxDocument doc; + private int curLine; + private Token token; + + + /** + * Constructor. + * + * @param doc The document whose tokens we should iterate over. + */ + TokenIterator(RSyntaxDocument doc) { + this.doc = doc; + loadTokenListForCurLine(); + int lineCount = getLineCount(); + while ((token==null || !token.isPaintable()) && curLineToken removal is not supported. + * + * @throws UnsupportedOperationException always. + */ + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java old mode 100644 new mode 100755 index a7b4b6796..580db9f5a --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMaker.java @@ -3,151 +3,188 @@ * * TokenMaker.java - An object that can take a chunk of text and return a * linked list of Tokens representing it. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.Action; import javax.swing.text.Segment; + /** - * An implementation of TokenMaker is a class that turns text into a linked list of Tokens for - * syntax highlighting in a particular language. - * + * An implementation of TokenMaker is a class that turns text into + * a linked list of Tokens for syntax highlighting + * in a particular language. + * * @see Token * @see AbstractTokenMaker - * + * * @author Robert Futrell * @version 0.2 */ public interface TokenMaker { - /** - * Adds a null token to the end of the current linked list of tokens. This should be put at the end of the linked - * list whenever the last token on the current line is NOT a multiline token. - */ - public void addNullToken(); - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array from which to get the text. - * @param start - * Start offset in segment of token. - * @param end - * End offset in segment of token. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset); - - /** - * Returns whether this programming language uses curly braces ('{' and '}') to denote code - * blocks. - * - * @return Whether curly braces denote code blocks. - */ - public boolean getCurlyBracesDenoteCodeBlocks(); - - /** - * Returns the last token on this line's type if the token is "unfinished", or {@link Token#NULL} if it was - * finished. For example, if C-style syntax highlighting is being implemented, and text contained a - * line of code that contained the beginning of a comment but no end-comment marker ("*\/"), then this method would - * return {@link Token#COMMENT_MULTILINE} for that line. This is useful for doing syntax highlighting. - * - * @param text - * The line of tokens to examine. - * @param initialTokenType - * The token type to start with (i.e., the value of getLastTokenTypeOnLine for the line - * before text). - * @return The last token on this line's type, or {@link Token#NULL} if the line was completed. - */ - public int getLastTokenTypeOnLine(Segment text, int initialTokenType); - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. A null value for either - * means there is no string to add for that part. A value of null for the array means this - * language does not support commenting/uncommenting lines. - */ - public String[] getLineCommentStartAndEnd(); - - /** - * Returns an action to handle "insert break" key presses (i.e. Enter). - * - * @return The action, or null if the default action should be used. - */ - public Action getInsertBreakAction(); - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type); - - /** - * If a line ends in the specified token, this method returns whether a new line inserted after that line should be - * indented. - * - * @param token - * The token the previous line ends with. - * @return Whether the next line should be indented. - */ - public boolean getShouldIndentNextLineAfter(Token token); - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, - int startOffset); - - /** - * Returns whether this language is a markup language. - * - * @return Whether this language is markup. - */ - public boolean isMarkupLanguage(); - - /** - * Sets whether tokens are generated that "show" whitespace. - * - * @param visible - * Whether whitespace should be visible. - */ - public void setWhitespaceVisible(boolean visible, RSyntaxTextArea textArea); - -} \ No newline at end of file + + /** + * Adds a null token to the end of the current linked list of tokens. + * This should be put at the end of the linked list whenever the last + * token on the current line is NOT a multi-line token. + */ + void addNullToken(); + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array from which to get the text. + * @param start Start offset in segment of token. + * @param end End offset in segment of token. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + void addToken(char[] array, int start, int end, int tokenType, + int startOffset); + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + * + * @param type The token type. + * @return The closest "standard" token type. If a mapping is not defined + * for this language, then type is returned. + */ + int getClosestStandardTokenTypeForInternalType(int type); + + + /** + * Returns whether this programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + boolean getCurlyBracesDenoteCodeBlocks(int languageIndex); + + + /** + * Returns the last token on this line's type if the token is "unfinished", + * or {@link Token#NULL} if it was finished. For example, if C-style + * syntax highlighting is being implemented, and text + * contained a line of code that contained the beginning of a comment but + * no end-comment marker ("*\/"), then this method would return + * {@link Token#COMMENT_MULTILINE} for that line. This is useful + * for doing syntax highlighting. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return The last token on this line's type, or {@link Token#NULL} + * if the line was completed. + */ + int getLastTokenTypeOnLine(Segment text, int initialTokenType); + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in this programming language. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return The start and end strings to add to a line to "comment" + * it out. A null value for either means there + * is no string to add for that part. A value of + * null for the array means this language + * does not support commenting/uncommenting lines. + */ + String[] getLineCommentStartAndEnd(int languageIndex); + + + /** + * Returns an action to handle "insert break" key presses (i.e. Enter). + * + * @return The action, or null if the default action should + * be used. + */ + Action getInsertBreakAction(); + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + boolean getMarkOccurrencesOfTokenType(int type); + + + /** + * Returns the object in charge of marking all occurrences of the token + * at the current caret position, if it is a relevant token. If + * null is returned, a default OccurrenceMarker + * is used. + * + * @return The occurrence marker for this language, or null + * for none. + */ + OccurrenceMarker getOccurrenceMarker(); + + + /** + * If a line ends in the specified token, this method returns whether + * a new line inserted after that line should be indented. + * + * @param token The token the previous line ends with. + * @return Whether the next line should be indented. + */ + boolean getShouldIndentNextLineAfter(Token token); + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + Token getTokenList(Segment text, int initialTokenType, + int startOffset); + + + /** + * Returns whether a character could be part of an "identifier" token + * in a specific language. This is used to identify such things as the + * bounds of the "word" to select on double-clicking. + * + * @param languageIndex The language index the character was found in. + * @param ch The character. + * @return Whether the character could be part of an "identifier" token. + */ + boolean isIdentifierChar(int languageIndex, char ch); + + + /** + * Returns whether this language is a markup language. + * + * @return Whether this language is markup. + */ + boolean isMarkupLanguage(); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java old mode 100644 new mode 100755 index dcb332eb5..bbba1b94e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerBase.java @@ -2,239 +2,339 @@ * 08/26/2004 * * TokenMakerBase.java - A base class for token makers. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.Action; import javax.swing.text.Segment; + /** * Base class for token makers. - * + * * @author Robert Futrell * @version 1.0 */ -abstract class TokenMakerBase implements TokenMaker { - - /** - * The first token in the returned linked list. - */ - protected Token firstToken; - - /** - * Used in the creation of the linked list. - */ - protected Token currentToken; - - /** - * Used in the creation of the linked list. - */ - protected Token previousToken; - - /** - * The factory that gives us our tokens to use. - */ - private TokenFactory tokenFactory; - - /** - * Constructor. - */ - public TokenMakerBase() { - firstToken = currentToken = previousToken = null; - tokenFactory = new DefaultTokenFactory(); - } - - /** - * {@inheritDoc} - */ - public void addNullToken() { - if (firstToken == null) { - firstToken = tokenFactory.createToken(); - currentToken = firstToken; - } - else { - currentToken.setNextToken(tokenFactory.createToken()); - previousToken = currentToken; - currentToken = currentToken.getNextToken(); - } - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param segment - * Segment to get text from. - * @param start - * Start offset in segment of token. - * @param end - * End offset in segment of token. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(Segment segment, int start, int end, int tokenType, - int startOffset) { - addToken(segment.array, start, end, tokenType, startOffset); - } - - /** - * {@inheritDoc} - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset) { - addToken(array, start, end, tokenType, startOffset, false); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - - if (firstToken == null) { - firstToken = tokenFactory.createToken(array, start, end, - startOffset, tokenType); - currentToken = firstToken; // previous token is still null. - } - else { - currentToken.setNextToken(tokenFactory.createToken(array, - start, end, startOffset, tokenType)); - previousToken = currentToken; - currentToken = currentToken.getNextToken(); - } - - currentToken.setHyperlink(hyperlink); - - } - - /** - * Returns whether this programming language uses curly braces ('{' and '}') to denote code - * blocks. - *

    - * - * The default implementation returns false; subclasses can override this method if necessary. - * - * @return Whether curly braces denote code blocks. - */ - public boolean getCurlyBracesDenoteCodeBlocks() { - return false; - } - - /** - * Returns an action to handle "insert break" key presses (i.e. Enter). The default implementation returns - * null. Subclasses can override. - * - * @return The default implementation always returns null. - */ - public Action getInsertBreakAction() { - return null; - } - - /** - * {@inheritDoc} - */ - public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { - - // Last parameter doesn't matter if we're not painting. - Token t = getTokenList(text, initialTokenType, 0); - - while (t.getNextToken() != null) - t = t.getNextToken(); - - return t.type; - - } - - /** - * {@inheritDoc} - */ - public String[] getLineCommentStartAndEnd() { - return null; - } - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. The default implementation returns true if type is {@link Token#IDENTIFIER}. Subclasses can - * override this method to support other token types, such as {@link Token#VARIABLE}. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return type == Token.IDENTIFIER; - } - - /** - * The default implementation returns false always. Languages that wish to better support - * auto-indentation can override this method. - * - * @param token - * The token the previous line ends with. - * @return Whether the next line should be indented. - */ - public boolean getShouldIndentNextLineAfter(Token token) { - return false; - } - - /** - * The default implementation returns false always. Subclasses that are highlighting a markup language - * should override this method to return true. - * - * @return false always. - */ - public boolean isMarkupLanguage() { - return false; - } - - /** - * Deletes the linked list of tokens so we can begin anew. This should never have to be called by the programmer, as - * it is automatically called whenever the user calls {@link #getLastTokenTypeOnLine(Segment, int)} or - * {@link #getTokenList(Segment, int, int)}. - */ - protected void resetTokenList() { - firstToken = currentToken = previousToken = null; - tokenFactory.resetAllTokens(); - } - - /** - * {@inheritDoc} - */ - public void setWhitespaceVisible(boolean visible, RSyntaxTextArea textArea) { - // FIXME: Initialize with the proper sizes. - tokenFactory = visible ? new VisibleWhitespaceTokenFactory() : - new DefaultTokenFactory(); - } - -} \ No newline at end of file +public abstract class TokenMakerBase implements TokenMaker { + + /** + * The first token in the returned linked list. + */ + protected TokenImpl firstToken; + + /** + * Used in the creation of the linked list. + */ + protected TokenImpl currentToken; + + /** + * Used in the creation of the linked list. + */ + protected TokenImpl previousToken; + + /** + * The factory that gives us our tokens to use. + */ + private TokenFactory tokenFactory; + + /** + * Highlights occurrences of the current token in the editor, if it is + * relevant. + */ + private OccurrenceMarker occurrenceMarker; + + /** + * "0" implies this is the "main" language being highlighted. Positive + * values imply various "secondary" or "embedded" languages, such as CSS + * or JavaScript in HTML. While this value is non-zero, tokens will be + * generated with this language index so they can (possibly) be painted + * differently, so "embedded" languages can be rendered with a special + * background. + */ + private int languageIndex; + + + /** + * Constructor. + */ + public TokenMakerBase() { + firstToken = currentToken = previousToken = null; + tokenFactory = new DefaultTokenFactory(); + } + + + /** + * {@inheritDoc} + */ + @Override + public void addNullToken() { + if (firstToken==null) { + firstToken = tokenFactory.createToken(); + currentToken = firstToken; + } + else { + TokenImpl next = tokenFactory.createToken(); + currentToken.setNextToken(next); + previousToken = currentToken; + currentToken = next; + } + currentToken.setLanguageIndex(languageIndex); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param segment Segment to get text from. + * @param start Start offset in segment of token. + * @param end End offset in segment of token. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + public void addToken(Segment segment, int start, int end, int tokenType, + int startOffset) { + addToken(segment.array, start,end, tokenType, startOffset); + } + + + /** + * {@inheritDoc} + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset) { + addToken(array, start, end, tokenType, startOffset, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + + if (firstToken==null) { + firstToken = tokenFactory.createToken(array, start, end, + startOffset, tokenType); + currentToken = firstToken; // previous token is still null. + } + else { + TokenImpl next = tokenFactory.createToken(array, start,end, + startOffset, tokenType); + currentToken.setNextToken(next); + previousToken = currentToken; + currentToken = next; + } + + currentToken.setLanguageIndex(languageIndex); + currentToken.setHyperlink(hyperlink); + + } + + + /** + * Returns the occurrence marker to use for this token maker. Subclasses + * can override to use different implementations. + * + * @return The occurrence marker to use. + */ + protected OccurrenceMarker createOccurrenceMarker() { + return new DefaultOccurrenceMarker(); + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0).

    + * + * The default implementation returns type always, which + * denotes that a mapping from internal token types to standard token types + * is not defined; subclasses can override. + * + * @param type The token type. + * @return The closest "standard" token type. + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + return type; + } + + + /** + * Returns whether this programming language uses curly braces + * ('{' and '}') to denote code blocks. + * + * The default implementation returns false; subclasses can + * override this method if necessary. + * + * @param languageIndex The language index at the offset in question. + * Since some TokenMakers effectively have nested + * languages (such as JavaScript in HTML), this parameter tells the + * TokenMaker what sub-language to look at. + * @return Whether curly braces denote code blocks. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return false; + } + + + /** + * Returns an action to handle "insert break" key presses (i.e. Enter). + * The default implementation returns null. Subclasses + * can override. + * + * @return The default implementation always returns null. + */ + @Override + public Action getInsertBreakAction() { + return null; + } + + + /** + * Returns the current language index. + * + * @return The current language index. + * @see #setLanguageIndex(int) + */ + protected int getLanguageIndex() { + return languageIndex; + } + + + /** + * {@inheritDoc} + */ + @Override + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + + // Last parameter doesn't matter if we're not painting. + Token t = getTokenList(text, initialTokenType, 0); + + while (t.getNextToken()!=null) { + t = t.getNextToken(); + } + + return t.getType(); + + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. The default + * implementation returns true if type is {@link Token#IDENTIFIER}. + * Subclasses can override this method to support other token types, such + * as {@link Token#VARIABLE}. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER; + } + + + /** + * {@inheritDoc} + */ + @Override + public OccurrenceMarker getOccurrenceMarker() { + if (occurrenceMarker==null) { + occurrenceMarker = createOccurrenceMarker(); + } + return occurrenceMarker; + } + + + /** + * The default implementation returns false always. Languages + * that wish to better support auto-indentation can override this method. + * + * @param token The token the previous line ends with. + * @return Whether the next line should be indented. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + return false; + } + + + /** + * Returns whether a character could be part of an "identifier" token + * in a specific language. The default implementation returns + * true for letters, numbers, and certain symbols. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='_' || ch=='$'; + } + + + /** + * The default implementation returns false always. + * Subclasses that are highlighting a markup language should override this + * method to return true. + * + * @return false always. + */ + @Override + public boolean isMarkupLanguage() { + return false; + } + + + /** + * Deletes the linked list of tokens so we can begin anew. This should + * never have to be called by the programmer, as it is automatically + * called whenever the user calls + * {@link #getLastTokenTypeOnLine(Segment, int)} or + * {@link #getTokenList(Segment, int, int)}. + */ + protected void resetTokenList() { + firstToken = currentToken = previousToken = null; + tokenFactory.resetAllTokens(); + } + + + /** + * Sets the language index to assign to tokens moving forward. This + * property is used to designate tokens as being in "secondary" languages + * (such as CSS or JavaScript in HTML). + * + * @param languageIndex The new language index. A value of + * 0 denotes the "main" language, any positive value + * denotes a specific secondary language. Negative values will + * be treated as 0. + * @see #getLanguageIndex() + */ + protected void setLanguageIndex(int languageIndex) { + this.languageIndex = Math.max(0, languageIndex); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java old mode 100644 new mode 100755 index 0b89e792e..cbb30174f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMakerFactory.java @@ -2,141 +2,123 @@ * 12/12/2008 * * TokenMakerFactory.java - A factory for TokenMakers. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.util.Map; import java.util.Set; import org.fife.ui.rsyntaxtextarea.modes.PlainTextTokenMaker; + /** - * A factory that maps syntax styles to {@link TokenMaker}s capable of splitting text into tokens for those syntax - * styles. - * + * A factory that maps syntax styles to {@link TokenMaker}s capable of splitting + * text into tokens for those syntax styles. + * * @author Robert Futrell * @version 1.0 */ public abstract class TokenMakerFactory { - /** - * If this system property is set, a custom TokenMakerFactory of the specified class will be used as - * the default token maker factory. - */ - public static final String PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY = - "TokenMakerFactory"; - - /** - * The singleton default TokenMakerFactory instance. - */ - private static TokenMakerFactory DEFAULT_INSTANCE; - - /** - * Creates and returns a mapping from keys to the names of {@link TokenMaker} implementation classes. When - * {@link #getTokenMaker(String)} is called with a key defined in this map, a TokenMaker of the - * corresponding type is returned. - * - * @return The map. - */ - protected abstract Map createTokenMakerKeyToClassNameMap(); - - /** - * Returns the default TokenMakerFactory instance. This is the factory used by all - * {@link RSyntaxDocument}s by default. - * - * @return The factory. - * @see #setDefaultInstance(TokenMakerFactory) - */ - public static synchronized TokenMakerFactory getDefaultInstance() { - if (DEFAULT_INSTANCE == null) { - String clazz = null; - try { - clazz = System.getProperty(PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY); - } catch (java.security.AccessControlException ace) { - clazz = null; // We're in an applet; take default. - } - if (clazz == null) { - clazz = "org.fife.ui.rsyntaxtextarea.DefaultTokenMakerFactory"; - } - try { - DEFAULT_INSTANCE = (TokenMakerFactory) Class.forName(clazz). - newInstance(); - } catch (RuntimeException re) { // FindBugs - throw re; - } catch (Exception e) { - e.printStackTrace(); - throw new InternalError("Cannot find TokenMakerFactory: " + - clazz); - } - } - return DEFAULT_INSTANCE; - } - - /** - * Returns a {@link TokenMaker} for the specified key. - * - * @param key - * The key. - * @return The corresponding TokenMaker, or {@link PlainTextTokenMaker} if none matches the specified - * key. - */ - public final TokenMaker getTokenMaker(String key) { - TokenMaker tm = getTokenMakerImpl(key); - if (tm == null) { - tm = new PlainTextTokenMaker(); - } - return tm; - } - - /** - * Returns a {@link TokenMaker} for the specified key. - * - * @param key - * The key. - * @return The corresponding TokenMaker, or null if none matches the specified key. - */ - protected abstract TokenMaker getTokenMakerImpl(String key); - - /** - * Returns the set of keys that this factory maps to token makers. - * - * return The set of keys. - */ - public abstract Set keySet(); - - /** - * Sets the default TokenMakerFactory instance. This is the factory used by all future - * {@link RSyntaxDocument}s by default. RSyntaxDocuments that have already been created are not - * affected. - * - * @param tmf - * The factory. - * @throws IllegalArgumentException - * If tmf is null. - * @see #getDefaultInstance() - */ - public static synchronized void setDefaultInstance(TokenMakerFactory tmf) { - if (tmf == null) { - throw new IllegalArgumentException("tmf cannot be null"); - } - DEFAULT_INSTANCE = tmf; - } - -} \ No newline at end of file + /** + * If this system property is set, a custom TokenMakerFactory + * of the specified class will be used as the default token maker factory. + */ + public static final String PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY = + "TokenMakerFactory"; + + /** + * The singleton default TokenMakerFactory instance. + */ + private static TokenMakerFactory DEFAULT_INSTANCE; + + + /** + * Returns the default TokenMakerFactory instance. This is + * the factory used by all {@link RSyntaxDocument}s by default. + * + * @return The factory. + * @see #setDefaultInstance(TokenMakerFactory) + */ + public static synchronized TokenMakerFactory getDefaultInstance() { + if (DEFAULT_INSTANCE==null) { + String clazz; + try { + clazz= System.getProperty(PROPERTY_DEFAULT_TOKEN_MAKER_FACTORY); + } catch (java.security.AccessControlException ace) { + clazz = null; // We're in an applet; take default. + } + if (clazz==null) { + clazz = "org.fife.ui.rsyntaxtextarea.DefaultTokenMakerFactory"; + } + try { + DEFAULT_INSTANCE = (TokenMakerFactory)Class.forName(clazz). + getDeclaredConstructor().newInstance(); + } catch (RuntimeException re) { // FindBugs + throw re; + } catch (Exception e) { + e.printStackTrace(); + throw new InternalError("Cannot find TokenMakerFactory: " + + clazz); + } + } + return DEFAULT_INSTANCE; + } + + + /** + * Returns a {@link TokenMaker} for the specified key. + * + * @param key The key. + * @return The corresponding TokenMaker, or + * {@link PlainTextTokenMaker} if none matches the specified key. + */ + public final TokenMaker getTokenMaker(String key) { + TokenMaker tm = getTokenMakerImpl(key); + if (tm==null) { + tm = new PlainTextTokenMaker(); + } + return tm; + } + + + /** + * Returns a {@link TokenMaker} for the specified key. + * + * @param key The key. + * @return The corresponding TokenMaker, or null + * if none matches the specified key. + */ + protected abstract TokenMaker getTokenMakerImpl(String key); + + + /** + * Returns the set of keys that this factory maps to token makers. + * + * @return The set of keys. + */ + public abstract Set keySet(); + + + /** + * Sets the default TokenMakerFactory instance. This is + * the factory used by all future {@link RSyntaxDocument}s by default. + * RSyntaxDocuments that have already been created are not + * affected. + * + * @param tmf The factory. + * @throws IllegalArgumentException If tmf is + * null. + * @see #getDefaultInstance() + */ + public static synchronized void setDefaultInstance(TokenMakerFactory tmf) { + if (tmf==null) { + throw new IllegalArgumentException("tmf cannot be null"); + } + DEFAULT_INSTANCE = tmf; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java old mode 100644 new mode 100755 index a2ec6d758..9bf82b7fc --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenMap.java @@ -3,283 +3,277 @@ * * TokenMap.java - Similar to a Map in Java, only designed specifically for * org.fife.ui.rsyntaxtextarea.Tokens. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; import javax.swing.text.Segment; + /** - * A hash table for reserved words, etc. defined by a {@link TokenMaker}. This class is designed for the quick lookup of - * tokens, as it can compare Segments without the need to allocate a new string. - *

    - * - * The org.fife.ui.rsyntaxtextarea package uses this class to help identify reserved words in programming - * languages. An instance of {@link TokenMaker} will create and initialize an instance of this class containing all - * reserved words, data types, and all other words that need to be syntax-highlighted for that particular language. When - * the token maker parses a line and identifies an individual token, it is looked up in the TokenMap to see - * if it should be syntax-highlighted. - * + * A hash table for reserved words, etc. defined by a {@link TokenMaker}. + * This class is designed for the quick lookup of tokens, as it can compare + * Segments without the need to allocate a new string.

    + * + * The org.fife.ui.rsyntaxtextarea package uses this class to help + * identify reserved words in programming languages. An instance of + * {@link TokenMaker} will create and initialize an instance of this class + * containing all reserved words, data types, and all other words that need to + * be syntax-highlighted for that particular language. When the token maker + * parses a line and identifies an individual token, it is looked up in the + * TokenMap to see if it should be syntax-highlighted. + * * @author Robert Futrell * @version 0.6 */ public class TokenMap { - private int size; - private TokenMapToken[] tokenMap; - private boolean ignoreCase; - - private static final int DEFAULT_TOKEN_MAP_SIZE = 52; - - /** - * Constructs a new token map that is case-sensitive. - */ - public TokenMap() { - this(DEFAULT_TOKEN_MAP_SIZE); - } - - /** - * Constructs a new token map that is case-sensitive. - * - * @param size - * The size of the token map. - */ - public TokenMap(int size) { - this(size, false); - } - - /** - * Constructs a new token map. - * - * @param ignoreCase - * Whether or not this token map should ignore case when comparing tokens. - */ - public TokenMap(boolean ignoreCase) { - this(DEFAULT_TOKEN_MAP_SIZE, ignoreCase); - } - - /** - * Constructs a new token map. - * - * @param size - * The size of the token map. - * @param ignoreCase - * Whether or not this token map should ignore case when comparing tokens. - */ - public TokenMap(int size, boolean ignoreCase) { - this.size = size; - tokenMap = new TokenMapToken[size]; - this.ignoreCase = ignoreCase; - } - - /** - * Adds a token to a specified bucket in the token map. - * - * @param bucket - * The bucket in which to add the token. - * @param token - * The token to add. - */ - private void addTokenToBucket(int bucket, TokenMapToken token) { - token.nextToken = tokenMap[bucket]; - tokenMap[bucket] = token; - } - - /** - * Returns the token type associated with the given text, if the given text is in this token map. If it isn't, - * -1 is returned. - * - * @param text - * The segment from which to get the text to compare. - * @param start - * The starting index in the segment of the text. - * @param end - * The ending index in the segment of the text. - * @return The token type associated with the given text, or -1 if this token was not specified in this - * map. - */ - public int get(Segment text, int start, int end) { - return get(text.array, start, end); - } - - /** - * Returns the token type associated with the given text, if the given text is in this token map. If it isn't, - * -1 is returned. - * - * @param array1 - * An array of characters containing the text. - * @param start - * The starting index in the array of the text. - * @param end - * The ending index in the array of the text. - * @return The token type associated with the given text, or -1 if this token was not specified in this - * map. - */ - public int get(char[] array1, int start, int end) { - - int length1 = end - start + 1; - - int hash = getHashCode(array1, start, length1); - TokenMapToken token = tokenMap[hash]; - - char[] array2; - int offset2; - int offset1; - int length; - - /* - * We check whether or not to ignore case before doing any looping to minimize the number of extraneous - * comparisons we do. This makes for slightly redundant code, but it'll be a little more efficient. - */ - - // If matches are case-sensitive (C, C++, Java, etc.)... - if (ignoreCase == false) { - - mainLoop: while (token != null) { - if (token.length == length1) { - array2 = token.text; - offset2 = token.offset; - offset1 = start; - length = length1; - while (length-- > 0) { - if (array1[offset1++] != array2[offset2++]) { - token = token.nextToken; - continue mainLoop; - } - } - return token.tokenType; - } - token = token.nextToken; - } - - } - - // If matches are NOT case-sensitive (HTML)... - // Note that all tokens saved in this map were converted to - // lower-case already. - else { - - mainLoop2: while (token != null) { - if (token.length == length1) { - array2 = token.text; - offset2 = token.offset; - offset1 = start; - length = length1; - while (length-- > 0) { - if (RSyntaxUtilities.toLowerCase( - array1[offset1++]) != array2[offset2++]) { - token = token.nextToken; - continue mainLoop2; - } - } - return token.tokenType; - } - token = token.nextToken; - } - - } - - // Didn't match any of the tokens in the bucket. - return -1; - - } - - /** - * Returns the hash code for a given string. - * - * @param text - * The text to hash. - * @param offset - * The offset into the text at which to start hashing. - * @param length - * The last character in the text to hash. - * @return The hash code. - */ - private final int getHashCode(char[] text, int offset, int length) { - return (RSyntaxUtilities.toLowerCase(text[offset]) + - RSyntaxUtilities.toLowerCase(text[offset + length - 1])) % size; - } - - /** - * Returns whether this token map ignores case when checking for tokens. This property is set in the constructor and - * cannot be changed, as this is an intrinsic property of a particular programming language. - * - * @return Whether or not this token maker is ignoring case. - */ - protected boolean isIgnoringCase() { - return ignoreCase; - } - - /** - * Adds a string to this token map. - * - * @param string - * The string to add. - * @param tokenType - * The type of token the string is. - */ - public void put(final String string, final int tokenType) { - if (isIgnoringCase()) - put(string.toLowerCase().toCharArray(), tokenType); - else - put(string.toCharArray(), tokenType); - } - - /** - * Adds a string to this token map. The char array passed-in will be used as the actual data for the token, so it - * may well be modified (such as lower-casing it if ignoreCase is true). This shouldn't be - * an issue though as this method is only called from the public put method, which allocates a new char - * array. - * - * @param string - * The string to add. - * @param tokenType - * The type of token the string is. - */ - private void put(char[] string, int tokenType) { - int hashCode = getHashCode(string, 0, string.length); - addTokenToBucket(hashCode, new TokenMapToken(string, tokenType)); - } - - /** - * The "token" used by a token map. Note that this isn't the same thing as the {@link Token} class, but it's - * basically a 1-1 correspondence for reserved words, etc. - */ - private static class TokenMapToken { - - char[] text; - int offset; - int length; - int tokenType; - TokenMapToken nextToken; - - TokenMapToken(char[] text, int tokenType) { - this.text = text; - this.offset = 0; - this.length = text.length; - this.tokenType = tokenType; - } - - public String toString() { - return "[TokenMapToken: " + new String(text, offset, length) + "]"; - } - - } - -} \ No newline at end of file + private int size; + private TokenMapToken[] tokenMap; + private boolean ignoreCase; + + private static final int DEFAULT_TOKEN_MAP_SIZE = 52; + + + /** + * Constructs a new token map that is case-sensitive. + */ + public TokenMap() { + this(DEFAULT_TOKEN_MAP_SIZE); + } + + + /** + * Constructs a new token map that is case-sensitive. + * + * @param size The size of the token map. + */ + public TokenMap(int size) { + this(size, false); + } + + + /** + * Constructs a new token map. + * + * @param ignoreCase Whether or not this token map should ignore case + * when comparing tokens. + */ + public TokenMap(boolean ignoreCase) { + this(DEFAULT_TOKEN_MAP_SIZE, ignoreCase); + } + + + /** + * Constructs a new token map. + * + * @param size The size of the token map. + * @param ignoreCase Whether or not this token map should ignore case + * when comparing tokens. + */ + public TokenMap(int size, boolean ignoreCase) { + this.size = size; + tokenMap = new TokenMapToken[size]; + this.ignoreCase = ignoreCase; + } + + + /** + * Adds a token to a specified bucket in the token map. + * + * @param bucket The bucket in which to add the token. + * @param token The token to add. + */ + private void addTokenToBucket(int bucket, TokenMapToken token) { + TokenMapToken old = tokenMap[bucket]; + token.nextToken = old; + tokenMap[bucket] = token; + } + + + /** + * Returns the token type associated with the given text, if the given + * text is in this token map. If it isn't, -1 is returned. + * + * @param text The segment from which to get the text to compare. + * @param start The starting index in the segment of the text. + * @param end The ending index in the segment of the text. + * @return The token type associated with the given text, or + * -1 if this token was not specified in this map. + */ + public int get(Segment text, int start, int end) { + return get(text.array, start, end); + } + + + /** + * Returns the token type associated with the given text, if the given + * text is in this token map. If it isn't, -1 is returned. + * + * @param array1 An array of characters containing the text. + * @param start The starting index in the array of the text. + * @param end The ending index in the array of the text. + * @return The token type associated with the given text, or + * -1 if this token was not specified in this map. + */ + public int get(char[] array1, int start, int end) { + + int length1 = end - start + 1; + + int hash = getHashCode(array1, start, length1); + TokenMapToken token = tokenMap[hash]; + + char[] array2; + int offset2; + int offset1; + int length; + + /* We check whether or not to ignore case before doing any looping to + * minimize the number of extraneous comparisons we do. This makes + * for slightly redundant code, but it'll be a little more efficient. + */ + + // If matches are case-sensitive (C, C++, Java, etc.)... + if (!ignoreCase) { + + mainLoop: + while (token!=null) { + if (token.length==length1) { + array2 = token.text; + offset2 = token.offset; + offset1 = start; + length = length1; + while (length-- > 0) { + if (array1[offset1++]!=array2[offset2++]) { + token = token.nextToken; + continue mainLoop; + } + } + return token.tokenType; + } + token = token.nextToken; + } + + } + + // If matches are NOT case-sensitive (HTML)... + // Note that all tokens saved in this map were converted to + // lower-case already. + else { + + mainLoop2: + while (token!=null) { + if (token.length==length1) { + array2 = token.text; + offset2 = token.offset; + offset1 = start; + length = length1; + while (length-- > 0) { + if (RSyntaxUtilities.toLowerCase( + array1[offset1++]) != array2[offset2++]) { + token = token.nextToken; + continue mainLoop2; + } + } + return token.tokenType; + } + token = token.nextToken; + } + + } + + // Didn't match any of the tokens in the bucket. + return -1; + + } + + + /** + * Returns the hash code for a given string. + * + * @param text The text to hash. + * @param offset The offset into the text at which to start hashing. + * @param length The last character in the text to hash. + * @return The hash code. + */ + private int getHashCode(char[] text, int offset, int length) { + return (RSyntaxUtilities.toLowerCase(text[offset]) + + RSyntaxUtilities.toLowerCase(text[offset+length-1])) % size; + } + + + /** + * Returns whether this token map ignores case when checking for tokens. + * This property is set in the constructor and cannot be changed, as this + * is an intrinsic property of a particular programming language. + * + * @return Whether or not this token maker is ignoring case. + */ + protected boolean isIgnoringCase() { + return ignoreCase; + } + + + /** + * Adds a string to this token map. + * + * @param string The string to add. + * @param tokenType The type of token the string is. + */ + public void put(final String string, final int tokenType) { + if (isIgnoringCase()) { + put(string.toLowerCase().toCharArray(), tokenType); + } + else { + put(string.toCharArray(), tokenType); + } + } + + + /** + * Adds a string to this token map. The char array passed-in will be used + * as the actual data for the token, so it may well be modified (such as + * lower-casing it if ignoreCase is true). This + * shouldn't be an issue though as this method is only called from the + * public put method, which allocates a new char array. + * + * @param string The string to add. + * @param tokenType The type of token the string is. + */ + private void put(char[] string, int tokenType) { + int hashCode = getHashCode(string, 0, string.length); + addTokenToBucket(hashCode, new TokenMapToken(string, tokenType)); + } + + + /** + * The "token" used by a token map. Note that this isn't the same thing + * as the {@link Token} class, but it's basically a 1-1 correspondence + * for reserved words, etc. + */ + private static final class TokenMapToken { + + private char[] text; + private int offset; + private int length; + private int tokenType; + private TokenMapToken nextToken; + + private TokenMapToken(char[] text, int tokenType) { + this.text = text; + this.offset = 0; + this.length = text.length; + this.tokenType = tokenType; + } + + @Override + public String toString() { + return "[TokenMapToken: " + new String(text,offset,length) + "]"; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java old mode 100644 new mode 100755 index 038959e87..b4991db10 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenOrientedView.java @@ -3,64 +3,59 @@ * * TokenOrientedView.java - An interface for the syntax-highlighting token- * oriented views for token-oriented methods. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; + /** - * An interface for the syntax-highlighting token oriented views for token-oriented methods. This way callers won't need - * to know what specific class a view is an instance of to access its tokens. - *

    - * - * Currently, this interface is only useful for obtaining token lists for "physical lines" (i.e., a word-wrapped view's - * logical lines may be represented as several physical lines, thus getting the "physical line" above a given position - * may prove complicated). - * + * An interface for the syntax-highlighting token oriented views for + * token-oriented methods. This way callers won't need to know what specific + * class a view is an instance of to access its tokens.

    + * + * Currently, this interface is only useful for obtaining token lists for + * "physical lines" (i.e., a word-wrapped view's logical lines may be + * represented as several physical lines, thus getting the "physical line" above + * a given position may prove complicated). + * * @author Robert Futrell * @version 0.1 */ public interface TokenOrientedView { - /** - * Returns a token list for the physical line above the physical line containing the specified offset into - * the document. Note that for a plain (non-wrapped) view, this is simply the token list for the logical line above - * the line containing offset, since lines are not wrapped. For a wrapped view, this may or may not be - * tokens from the same line. - * - * @param offset - * The offset in question. - * @return A token list for the physical (and in this view, logical) line before this one. If no physical line is - * above the one containing offset, null is returned. - */ - public Token getTokenListForPhysicalLineAbove(int offset); - /** - * Returns a token list for the physical line below the physical line containing the specified offset into - * the document. Note that for a plain (non-wrapped) view, this is simply the token list for the logical line below - * the line containing offset, since lines are not wrapped. For a wrapped view, this may or may not be - * tokens from the same line. - * - * @param offset - * The offset in question. - * @return A token list for the physical (and in this view, logical) line after this one. If no physical line is - * after the one containing offset, null is returned. - */ - public Token getTokenListForPhysicalLineBelow(int offset); + /** + * Returns a token list for the physical line above the physical + * line containing the specified offset into the document. Note that for + * a plain (non-wrapped) view, this is simply the token list for the + * logical line above the line containing offset, since lines + * are not wrapped. For a wrapped view, this may or may not be tokens from + * the same line. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * before this one. If no physical line is above the one + * containing offset, null is returned. + */ + Token getTokenListForPhysicalLineAbove(int offset); + + + /** + * Returns a token list for the physical line below the physical + * line containing the specified offset into the document. Note that for + * a plain (non-wrapped) view, this is simply the token list for the + * logical line below the line containing offset, since lines + * are not wrapped. For a wrapped view, this may or may not be tokens from + * the same line. + * + * @param offset The offset in question. + * @return A token list for the physical (and in this view, logical) line + * after this one. If no physical line is after the one + * containing offset, null is returned. + */ + Token getTokenListForPhysicalLineBelow(int offset); + -} \ No newline at end of file +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenPainter.java new file mode 100755 index 000000000..628555c5a --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenPainter.java @@ -0,0 +1,120 @@ +/* + * 03/16/2013 + * + * TokenPainter - Renders tokens in an instance of RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Graphics2D; + +import javax.swing.text.TabExpander; + + +/** + * Renders tokens in an instance of {@link RSyntaxTextArea}. One instance + * may render tokens "regularly," another may render visible whitespace, for + * example. + * + * @author Robert Futrell + * @version 1.0 + */ +interface TokenPainter { + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e); + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart); + + + /** + * Paints this token. + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @param paintBG Whether to paint the background. + * @return The x-coordinate representing the end of the painted text. + */ + float paint(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean paintBG); + + + /** + * Paints this token as it should appear in a selected region of text + * (assuming painting with a selection-foreground color is enabled in the + * parent RSyntaxTextArea). + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param useSTC Whether to use the text area's "selected text color." + * @return The x-coordinate representing the end of the painted text. + */ + float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, boolean useSTC); + + + /** + * Paints this token as it should appear in a selected region of text + * (assuming painting with a selection-foreground color is enabled in the + * parent RSyntaxTextArea). + * + * @param token The token to render. + * @param g The graphics context in which to paint. + * @param x The x-coordinate at which to paint. + * @param y The y-coordinate at which to paint. + * @param host The text area this token is in. + * @param e How to expand tabs. + * @param clipStart The left boundary of the clip rectangle in which we're + * painting. This optimizes painting by allowing us to not paint + * paint when this token is "to the left" of the clip rectangle. + * @param useSTC Whether to use the text area's "selected text color." + * @return The x-coordinate representing the end of the painted text. + */ + float paintSelected(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean useSTC); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenTypes.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenTypes.java new file mode 100755 index 000000000..35bf7d6da --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenTypes.java @@ -0,0 +1,85 @@ +/* + * 12/04/2011 + * + * TokenTypes.java - All token types supported by RSyntaxTextArea. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + + +/** + * All token types supported by RSyntaxTextArea.

    + * + * Note that all valid token types are >= 0, so extensions of the TokenMaker + * class are free to internally use all ints < 0 ONLY for "end-of-line" + * style markers; they are ignored by painting implementations. + * + * @author Robert Futrell + * @version 1.0 + */ +public interface TokenTypes { + + /** + * Tokens of type NULL mark the end of lines with no + * multi-line token at the end (such as a block comment in C++). + */ + int NULL = 0; + + int COMMENT_EOL = 1; + int COMMENT_MULTILINE = 2; + int COMMENT_DOCUMENTATION = 3; + int COMMENT_KEYWORD = 4; + int COMMENT_MARKUP = 5; + + int RESERVED_WORD = 6; + int RESERVED_WORD_2 = 7; + + int FUNCTION = 8; + + int LITERAL_BOOLEAN = 9; + int LITERAL_NUMBER_DECIMAL_INT = 10; + int LITERAL_NUMBER_FLOAT = 11; + int LITERAL_NUMBER_HEXADECIMAL = 12; + int LITERAL_STRING_DOUBLE_QUOTE = 13; + int LITERAL_CHAR = 14; + int LITERAL_BACKQUOTE = 15; + + int DATA_TYPE = 16; + + int VARIABLE = 17; + + int REGEX = 18; + + int ANNOTATION = 19; + + int IDENTIFIER = 20; + + int WHITESPACE = 21; + + int SEPARATOR = 22; + + int OPERATOR = 23; + + int PREPROCESSOR = 24; + + int MARKUP_TAG_DELIMITER = 25; + int MARKUP_TAG_NAME = 26; + int MARKUP_TAG_ATTRIBUTE = 27; + int MARKUP_TAG_ATTRIBUTE_VALUE = 28; + int MARKUP_COMMENT = 29; + int MARKUP_DTD = 30; + int MARKUP_PROCESSING_INSTRUCTION = 31; + int MARKUP_CDATA_DELIMITER = 32; + int MARKUP_CDATA = 33; + int MARKUP_ENTITY_REFERENCE = 34; + + int ERROR_IDENTIFIER = 35; + int ERROR_NUMBER_FORMAT = 36; + int ERROR_STRING_DOUBLE = 37; + int ERROR_CHAR = 38; + + int DEFAULT_NUM_TOKEN_TYPES = 39; + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenUtils.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenUtils.java new file mode 100755 index 000000000..d1c7853f2 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/TokenUtils.java @@ -0,0 +1,203 @@ +package org.fife.ui.rsyntaxtextarea; + +import javax.swing.text.TabExpander; +import java.awt.*; + + +/** + * Utility methods for dealing with tokens. + * + * @author Robert Futrell + * @version 1.0 + */ +public final class TokenUtils { + + + private TokenUtils() { + // Do nothing (comment for Sonar) + } + + + /** + * Modifies the passed-in token list to start at the specified offset. + * For example, if the token list covered positions 20-60 in the document + * (inclusive) like so: + *

    +	 *   [token1] -> [token2] -> [token3] -> [token4]
    +	 *   20     30   31     40   41     50   51     60
    +	 * 
    + * and you used this method to make the token list start at position 44, + * then the token list would be modified to be the following: + *
    +	 *   [part-of-old-token3] -> [token4]
    +	 *   44                 50   51     60
    +	 * 
    + * Tokens that come before the specified position are forever lost, and + * the token containing that position is made to begin at that position if + * necessary. All token types remain the same as they were originally.

    + * + * This method can be useful if you are only interested in part of a token + * list (i.e., the line it represents), but you don't want to modify the + * token list yourself. + * + * @param tokenList The list to make start at the specified position. + * This parameter is modified. + * @param pos The position at which the new token list is to start. If + * this position is not in the passed-in token list, + * returned token list will either be null or the + * unpaintable token(s) at the end of the passed-in token list. + * @param e How to expand tabs. + * @param textArea The text area from which the token list came. + * @param x0 The initial x-pixel position of the old token list. + * @return Information about the "sub" token list. This will be + * null if pos was not a valid offset + * into the token list. + * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float, TokenImpl) + */ + public static TokenSubList getSubTokenList(Token tokenList, int pos, + TabExpander e, + final RSyntaxTextArea textArea, + float x0) { + return getSubTokenList(tokenList, pos, e, textArea, x0, null); + } + + + /** + * Modifies the passed-in token list to start at the specified offset. + * For example, if the token list covered positions 20-60 in the document + * (inclusive) like so: + *

    +	 *   [token1] -> [token2] -> [token3] -> [token4]
    +	 *   20     30   31     40   41     50   51     60
    +	 * 
    + * and you used this method to make the token list start at position 44, + * then the token list would be modified to be the following: + *
    +	 *   [part-of-old-token3] -> [token4]
    +	 *   44                 50   51     60
    +	 * 
    + * Tokens that come before the specified position are forever lost, and + * the token containing that position is made to begin at that position if + * necessary. All token types remain the same as they were originally.

    + * + * This method can be useful if you are only interested in part of a token + * list (i.e., the line it represents), but you don't want to modify the + * token list yourself. + * + * @param tokenList The list to make start at the specified position. + * This parameter is modified. + * @param pos The position at which the new token list is to start. If + * this position is not in the passed-in token list, + * returned token list will either be null or the + * unpaintable token(s) at the end of the passed-in token list. + * @param e How to expand tabs. + * @param textArea The text area from which the token list came. + * @param x0 The initial x-pixel position of the old token list. + * @param tempToken A temporary token to use when creating the token list + * result. This may be null but callers can pass in + * a "buffer" token for performance if desired. + * @return Information about the "sub" token list. This will be + * null if pos was not a valid offset + * into the token list. + * @see #getSubTokenList(Token, int, TabExpander, RSyntaxTextArea, float) + */ + public static TokenSubList getSubTokenList(Token tokenList, int pos, + TabExpander e, + final RSyntaxTextArea textArea, + float x0, + TokenImpl tempToken) { + + if (tempToken==null) { + tempToken = new TokenImpl(); + } + Token t = tokenList; + + // Loop through the token list until you find the one that contains + // pos. Remember the cumulative width of all of these tokens. + while (t!=null && t.isPaintable() && !t.containsPosition(pos)) { + x0 += t.getWidth(textArea, e, x0); + t = t.getNextToken(); + } + + // Make the token that contains pos start at pos. + if (t!=null && t.isPaintable()) { + + if (t.getOffset()!=pos) { + // Number of chars between p0 and token start. + int difference = pos - t.getOffset(); + x0 += t.getWidthUpTo(t.length()-difference+1, textArea, e, x0); + tempToken.copyFrom(t); + tempToken.makeStartAt(pos); + + return new TokenSubList(tempToken, x0); + + } + else { // t.getOffset()==pos + return new TokenSubList(t, x0); + } + + } + + // This could be a null token, so we need to just return it. + return new TokenSubList(tokenList, x0); + //return null; + + } + + + /** + * Generates HTML that renders a token with the style used in an RSTA instance. + * Note this HTML is not concise. It is a straightforward implementation to be + * used to generate markup used in copy/paste and dnd scenarios. + * + * @param textArea The text area whose styles to use. + * @param token The token to get equivalent HTML for. + * @return The HTML. + */ + public static String tokenToHtml(RSyntaxTextArea textArea, Token token) { + + StringBuilder style = new StringBuilder(); + + Font font = textArea.getFontForTokenType(token.getType()); + if (font.isBold()) { + style.append("font-weight: bold;\n"); + } + if (font.isItalic()) { + style.append("font-style: italic;\n"); + } + + Color c = textArea.getForegroundForToken(token); + style.append("color: ").append(HtmlUtil.getHexString(c)).append(";\n"); + + return "" + + HtmlUtil.escapeForHtml(token.getLexeme(), "\n", true) + + ""; + } + + + /** + * A sub-list of tokens. + */ + @SuppressWarnings({ "checkstyle:visibilitymodifier" }) + public static class TokenSubList { + + /** + * The "sub" token list. + */ + public Token tokenList; + + /** + * The width, in pixels, of the part of the token list "removed from + * the front." This way, you know the x-offset of the "new" token list. + */ + public float x; + + public TokenSubList(Token tokenList, float x) { + this.tokenList = tokenList; + this.x = x; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java old mode 100644 new mode 100755 index 205ff9308..e83046934 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/URLFileLocation.java @@ -2,23 +2,9 @@ * 11/13/2008 * * URLFileLocation.java - The location of a file at a (remote) URL. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; @@ -27,140 +13,148 @@ import java.io.OutputStream; import java.net.URL; + /** * The location of a file at a (remote) URL. - * + * * @author Robert Futrell * @version 1.0 */ class URLFileLocation extends FileLocation { - /** - * URL of the remote file. - */ - private URL url; - - /** - * A prettied-up full path of the URL (password removed, etc.). - */ - private String fileFullPath; - - /** - * A prettied-up filename (leading slash, and possibly "%2F", removed). - */ - private String fileName; - - /** - * Constructor. - * - * @param url - * The URL of the file. - */ - URLFileLocation(URL url) { - this.url = url; - fileFullPath = createFileFullPath(); - fileName = createFileName(); - } - - /** - * Creates a "prettied-up" URL to use. This will be stripped of sensitive information such as passwords. - * - * @return The full path to use. - */ - private String createFileFullPath() { - String fullPath = url.toString(); - fullPath = fullPath.replaceFirst("://([^:]+)(?:.+)@", "://$1@"); - return fullPath; - } - - /** - * Creates the "prettied-up" filename to use. - * - * @return The base name of the file of this URL. - */ - private String createFileName() { - String fileName = url.getPath(); - if (fileName.startsWith("/%2F/")) { // Absolute path - fileName = fileName.substring(4); - } - else if (fileName.startsWith("/")) { // All others - fileName = fileName.substring(1); - } - return fileName; - } - - /** - * Returns the last time this file was modified, or {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value - * cannot be computed (such as for a remote file). - * - * @return The last time this file was modified. This will always be {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} - * for URL's. - */ - protected long getActualLastModified() { - return TextEditorPane.LAST_MODIFIED_UNKNOWN; - } - - /** - * Returns the full path of the URL. This will be stripped of sensitive information such as passwords. - * - * @return The full path of the URL. - * @see #getFileName() - */ - public String getFileFullPath() { - return fileFullPath; - } - - /** - * Returns the name of the file. - * - * @return The name of the file. - * @see #getFileFullPath() - */ - public String getFileName() { - return fileName; - } - - /** - * Opens an input stream for reading from this file. - * - * @return The input stream. - * @throws IOException - * If the file does not exist, or some other IO error occurs. - */ - protected InputStream getInputStream() throws IOException { - return url.openStream(); - } - - /** - * Opens an output stream for writing this file. - * - * @return An output stream. - * @throws IOException - * If an IO error occurs. - */ - protected OutputStream getOutputStream() throws IOException { - return url.openConnection().getOutputStream(); - } - - /** - * Returns whether this file location is a local file. - * - * @return Whether this is a local file. - * @see #isLocalAndExists() - */ - public boolean isLocal() { - return "file".equalsIgnoreCase(url.getProtocol()); - } - - /** - * Returns whether this file location is a local file and already exists. This method always returns - * false since we cannot check this value easily. - * - * @return false always. - * @see #isLocal() - */ - public boolean isLocalAndExists() { - return false; - } - -} \ No newline at end of file + /** + * URL of the remote file. + */ + private URL url; + + /** + * A prettied-up full path of the URL (password removed, etc.). + */ + private String fileFullPath; + + /** + * A prettied-up filename (leading slash, and possibly "%2F", + * removed). + */ + private String fileName; + + + /** + * Constructor. + * + * @param url The URL of the file. + */ + URLFileLocation(URL url) { + this.url = url; + fileFullPath = createFileFullPath(); + fileName = createFileName(); + } + + + /** + * Creates a "prettied-up" URL to use. This will be stripped of + * sensitive information such as passwords. + * + * @return The full path to use. + */ + private String createFileFullPath() { + String fullPath = url.toString(); + fullPath = fullPath.replaceFirst("://([^:]+)(?:.+)@", "://$1@"); + return fullPath; + } + + + /** + * Creates the "prettied-up" filename to use. + * + * @return The base name of the file of this URL. + */ + private String createFileName() { + String fileName = url.getPath(); + if (fileName.startsWith("/%2F/")) { // Absolute path + fileName = fileName.substring(4); + } + else if (fileName.startsWith("/")) { // All others + fileName = fileName.substring(1); + } + return fileName; + } + + + /** + * Returns the last time this file was modified, or + * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} if this value cannot be + * computed (such as for a remote file). + * + * @return The last time this file was modified. This will always be + * {@link TextEditorPane#LAST_MODIFIED_UNKNOWN} for URL's. + */ + @Override + protected long getActualLastModified() { + return TextEditorPane.LAST_MODIFIED_UNKNOWN; + } + + + /** + * {@inheritDoc} + */ + @Override + public String getFileFullPath() { + return fileFullPath; + } + + + /** + * {@inheritDoc} + */ + @Override + public String getFileName() { + return fileName; + } + + + /** + * {@inheritDoc} + */ + @Override + protected InputStream getInputStream() throws IOException { + return url.openStream(); + } + + + /** + * {@inheritDoc} + */ + @Override + protected OutputStream getOutputStream() throws IOException { + return url.openConnection().getOutputStream(); + } + + + /** + * Returns whether this file location is a local file. + * + * @return Whether this is a local file. + * @see #isLocalAndExists() + */ + @Override + public boolean isLocal() { + return "file".equalsIgnoreCase(url.getProtocol()); + } + + + /** + * Returns whether this file location is a local file and already + * exists. This method always returns false since we + * cannot check this value easily. + * + * @return false always. + * @see #isLocal() + */ + @Override + public boolean isLocalAndExists() { + return false; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceToken.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceToken.java deleted file mode 100644 index 4bf998650..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceToken.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * 10/28/2004 - * - * VisibleWhitespaceToken.java - Token that paints special symbols for its - * whitespace characters (space and tab). - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -import java.awt.Color; -import java.awt.FontMetrics; -import java.awt.Graphics2D; -import java.awt.geom.Rectangle2D; -import javax.swing.text.Segment; -import javax.swing.text.TabExpander; - -/** - * This token class paints spaces and tabs with special symbols so the user can see the whitespace in his document. - * Rendering hints are honored. - *

    - * - * The current implementation paints as follows: - *

      - *
    • The first tab or space, if any, is found in the token.
    • - *
    • If a tab was found, all characters up to it are painted as a group.
    • - *
    • If a space was found, all characters up to and including it are painted (it is painted with a special symbol to - * denote it as a space).
    • - *
    • If neither a tab nor a whitespace was found, all characters in the token are painted.
    • - *
    • Repeat until all characters are painted.
    • - *
    - * This means that rendering hints are applied to all groups of characters within a token, excluding whitespace and - * tabs. - *

    - * - * A problem with this implementation is that FontMetrics.charsWidth() is still used to calculate the width of a group - * of chars painted. Thus, the group of characters will be painted with the rendering hints specified, but the following - * tab (or group of characters if the current group was the end of a token) will not necessarily be painted at the - * proper x-coordinate (as FontMetrics.charsWidth() returns an int and not a float). The way - * around this would be to calculate the token's width in such a way that a float is returned (Font.getStringBounds()?). - * - * @author Robert Futrell - * @version 0.5 - * @see Token - * @see DefaultToken - */ -public class VisibleWhitespaceToken extends DefaultToken { - - private Rectangle2D.Float dotRect; - - /** - * Creates a "null token." The token itself is not null; rather, it signifies that it is the last token in a linked - * list of tokens and that it is not part of a "multi-line token." - */ - public VisibleWhitespaceToken() { - super(); - dotRect = new Rectangle2D.Float(0, 0, 1, 1); - } - - /** - * Constructor. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param startOffset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public VisibleWhitespaceToken(final Segment line, final int beg, - final int end, final int startOffset, final int type) { - this(line.array, beg, end, startOffset, type); - } - - /** - * Constructor. - * - * @param line - * The segment from which to get the token. - * @param beg - * The first character's position in line. - * @param end - * The last character's position in line. - * @param startOffset - * The offset into the document at which this token begins. - * @param type - * A token type listed as "generic" above. - */ - public VisibleWhitespaceToken(final char[] line, final int beg, - final int end, final int startOffset, final int type) { - super(line, beg, end, startOffset, type); - } - - /** - * Paints this token, using special symbols for whitespace characters. - * - * @param g - * The graphics context in which to paint. - * @param x - * The x-coordinate at which to paint. - * @param y - * The y-coordinate at which to paint. - * @param host - * The text area this token is in. - * @param e - * How to expand tabs. - * @param clipStart - * The left boundary of the clip rectangle in which we're painting. This optimizes painting by allowing - * us to not paint not paint when this token is "to the left" of the clip rectangle. - * @return The x-coordinate representing the end of the painted text. - */ - public final float paint(Graphics2D g, float x, float y, - RSyntaxTextArea host, TabExpander e, - float clipStart) { - - int origX = (int) x; - int end = textOffset + textCount; - float nextX = x; - int flushLen = 0; - int flushIndex = textOffset; - Color fg = host.getForegroundForToken(this); - Color bg = host.getBackgroundForTokenType(type); - g.setFont(host.getFontForTokenType(type)); - FontMetrics fm = host.getFontMetricsForTokenType(type); - - int ascent = fm.getAscent(); - int height = fm.getHeight(); - - for (int i = textOffset; i < end; i++) { - - switch (text[i]) { - - case '\t': - - // Fill in background. - nextX = x + fm.charsWidth(text, flushIndex, flushLen); - float nextNextX = e.nextTabStop(nextX, 0); - if (bg != null) { - paintBackground(x, y, nextNextX - x, height, g, - ascent, host, bg); - } - g.setColor(fg); - - // Paint chars cached before the tab. - if (flushLen > 0) { - g.drawChars(text, flushIndex, flushLen, (int) x, (int) y); - flushLen = 0; - } - flushIndex = i + 1; - - /* - * if (host.showIndentGuide()) { g.setColor(Color.GRAY); int y2 = y - ascent; int end2 = y + - * fm.getDescent() - 1; while (y2 0) { - g.drawChars(text, flushIndex, flushLen, (int) x, (int) y); - flushLen = 0; - } - - // Paint a dot representing the space. - dotRect.x = nextX - width / 2.0f; // "2.0f" for FindBugs - dotRect.y = y - ascent + height / 2.0f; // Ditto - g.fill(dotRect); - flushIndex = i + 1; - x = nextX; - break; - - case '\f': - // ??? - // fall-through for now. - - default: - flushLen += 1; - break; - - } - } - - nextX = x + fm.charsWidth(text, flushIndex, flushLen); - - if (flushLen > 0 && nextX >= clipStart) { - if (bg != null) { - paintBackground(x, y, nextX - x, height, g, - ascent, host, bg); - } - g.setColor(fg); - g.drawChars(text, flushIndex, flushLen, (int) x, (int) y); - } - - if (host.getUnderlineForToken(this)) { - g.setColor(fg); - int y2 = (int) (y + 1); - g.drawLine(origX, y2, (int) nextX, y2); - } - - return nextX; - - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenFactory.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenFactory.java deleted file mode 100644 index ad6a46dd7..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenFactory.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 10/28/2004 - * - * VisibleWhitespaceTokenFactory.java - Visible whitespace token factory. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -/** - * Token factory that generates tokens that display special symbols for the whitespace characters space and tab. - *

    - * - * NOTE: This class should only be used by {@link TokenMaker}; nobody else needs it! - * - * @author Robert Futrell - * @version 0.1 - */ -class VisibleWhitespaceTokenFactory extends DefaultTokenFactory { - - /** - * Cosnstructor. - */ - public VisibleWhitespaceTokenFactory() { - this(DEFAULT_START_SIZE, DEFAULT_INCREMENT); - } - - /** - * Constructor. - * - * @param size - * The initial number of tokens in this factory. - * @param increment - * How many tokens to increment by when the stack gets empty. - */ - public VisibleWhitespaceTokenFactory(int size, int increment) { - super(size, increment); - } - - /** - * Creates a token for use internally by this token factory. This method should NOT be called externally; only by - * this class and possibly subclasses. - * - * @return A token to add to this token factory's internal stack. - */ - protected Token createInternalUseOnlyToken() { - return new VisibleWhitespaceToken(); - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java new file mode 100755 index 000000000..08507b8f2 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/VisibleWhitespaceTokenPainter.java @@ -0,0 +1,185 @@ +/* + * 03/16/2013 + * + * VisibleWhitespaceTokenPainter - Renders tokens in an instance of + * RSyntaxTextArea, with special glyphs to denote spaces and tabs. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.awt.Color; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import javax.swing.text.TabExpander; + + +/** + * A token painter that visibly renders whitespace (spaces and tabs).

    + * + * The current implementation paints as follows: + *

      + *
    • The first tab or space, if any, is found in the token.
    • + *
    • If a tab was found, all characters up to it are painted as a + * group.
    • + *
    • If a space was found, all characters up to and including it are + * painted (it is painted with a special symbol to denote it as + * a space).
    • + *
    • If neither a tab nor a whitespace was found, all characters in the + * token are painted.
    • + *
    • Repeat until all characters are painted.
    • + *
    + * This means that rendering hints are applied to all groups of characters + * within a token, excluding whitespace and tabs.

    + * + * A problem with this implementation is that FontMetrics.charsWidth() is still + * used to calculate the width of a group of chars painted. Thus, the group of + * characters will be painted with the rendering hints specified, but the + * following tab (or group of characters if the current group was the end of a + * token) will not necessarily be painted at the proper x-coordinate (as + * FontMetrics.charsWidth() returns an int and not a + * float). The way around this would be to calculate the token's + * width in such a way that a float is returned (Font.getStringBounds()?). + * + * @author Robert Futrell + * @version 1.0 + */ +class VisibleWhitespaceTokenPainter extends DefaultTokenPainter { + + + /** + * {@inheritDoc} + */ + @Override + protected float paintImpl(Token token, Graphics2D g, float x, float y, + RSyntaxTextArea host, TabExpander e, float clipStart, + boolean selected, boolean useSTC) { + + int origX = (int)x; + int textOffs = token.getTextOffset(); + char[] text = token.getTextArray(); + int end = textOffs + token.length(); + float nextX = x; + int flushLen = 0; + int flushIndex = textOffs; + Color fg = useSTC ? host.getSelectedTextColor() : + host.getForegroundForToken(token); + Color bg = selected ? null : host.getBackgroundForToken(token); + g.setFont(host.getFontForTokenType(token.getType())); + FontMetrics fm = host.getFontMetricsForTokenType(token.getType()); + + int ascent = fm.getAscent(); + int height = fm.getHeight(); + + for (int i=textOffs; i 0) { + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + flushLen = 0; + } + flushIndex = i + 1; + + // Draw an arrow representing the tab. + int halfHeight = height / 2; + int quarterHeight = halfHeight / 2; + int ymid = (int)y - ascent + halfHeight; + g.drawLine((int)nextX,ymid, (int)nextNextX,ymid); + g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid-quarterHeight); + g.drawLine((int)nextNextX,ymid, (int)nextNextX-4,ymid+quarterHeight); + + x = nextNextX; + break; + + case ' ': + + // NOTE: There is a little bit of a "fudge factor" + // here when "smooth text" is enabled, as "width" + // below may well not be the width given to the space + // by fm.charsWidth() (it depends on how it places the + // space with respect to the preceding character). + // But, we assume the approximation is close enough for + // our drawing a dot for the space. + + // "flushLen+1" ensures text is aligned correctly (or, + // aligned the same as in getWidth()). + nextX = x+fm.charsWidth(text, flushIndex,flushLen+1); + int width = fm.charWidth(' '); + + // Paint background. + if (bg!=null) { + paintBackground(x,y, nextX-x,height, g, + ascent, host, bg); + } + g.setColor(fg); + + // Paint chars before space. + if (flushLen>0) { + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + flushLen = 0; + } + + // Paint a dot representing the space. + int dotX = (int)(nextX - width/2f); // "2.0f" for FindBugs + int dotY = (int)(y - ascent + height/2f); // Ditto + g.drawLine(dotX, dotY, dotX, dotY); + flushIndex = i + 1; + x = nextX; + break; + + + case '\f': + // ??? + // fall-through for now. + + default: + flushLen += 1; + break; + + } + } + + nextX = x+fm.charsWidth(text, flushIndex,flushLen); + + if (flushLen>0 && nextX>=clipStart) { + if (bg!=null) { + paintBackground(x,y, nextX-x,height, g, + ascent, host, bg); + } + g.setColor(fg); + g.drawChars(text, flushIndex, flushLen, (int)x,(int)y); + } + + if (host.getUnderlineForToken(token)) { + g.setColor(fg); + int y2 = (int)(y+1); + g.drawLine(origX,y2, (int)nextX,y2); + } + + // Don't check if it's whitespace - some TokenMakers may return types + // other than Token.WHITESPACE for spaces (such as Token.IDENTIFIER). + // This also allows us to paint tab lines for MLC's. + if (host.getPaintTabLines() && origX==host.getMargin().left) {// && isWhitespace()) { + paintTabLines(token, origX, (int)y, (int)nextX, g, e, host); + } + + return nextX; + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java old mode 100644 new mode 100755 index dbdd461d8..cbdb850b9 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/WrappedSyntaxView.java @@ -3,938 +3,1464 @@ * * WrappedSyntaxView.java - Test implementation of WrappedSyntaxView that * is also aware of RSyntaxTextArea's different fonts per token type. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea; -import java.awt.*; -import java.util.Arrays; -import java.util.stream.IntStream; -import javax.swing.JViewport; -import javax.swing.text.*; -import javax.swing.event.*; - +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Rectangle; +import java.awt.Shape; + +import javax.swing.event.DocumentEvent; +import javax.swing.text.BadLocationException; +import javax.swing.text.BoxView; +import javax.swing.text.Document; +import javax.swing.text.Element; +import javax.swing.text.LayeredHighlighter; +import javax.swing.text.PlainDocument; +import javax.swing.text.Position; +import javax.swing.text.Position.Bias; +import javax.swing.text.Segment; +import javax.swing.text.TabExpander; +import javax.swing.text.View; +import javax.swing.text.ViewFactory; + +import org.fife.ui.rsyntaxtextarea.TokenUtils.TokenSubList; +import org.fife.ui.rsyntaxtextarea.folding.Fold; +import org.fife.ui.rsyntaxtextarea.folding.FoldManager; import org.fife.ui.rtextarea.Gutter; -import org.fife.ui.rtextarea.RTextScrollPane; + /** * The view used by {@link RSyntaxTextArea} when word wrap is enabled. - *

    - * - * This class is a work-in-progress and will eventually replace {@link WrappedSyntaxView} (which works, but ignores - * token styles). - * + * * @author Robert Futrell * @version 0.2 */ public class WrappedSyntaxView extends BoxView implements TabExpander, - RSTAView { - - boolean widthChanging; - int tabBase; - int tabSize; - - /** - * This is reused to keep from allocating/deallocating. - */ - private Segment s, drawSeg; - - /** - * Another variable initialized once to keep from allocating/deallocating. - */ - private Rectangle tempRect; - - /** - * Cached for each paint() call so each drawView() call has access to it. - */ - private RSyntaxTextArea host; - private FontMetrics metrics; - - // /** - // * The end-of-line marker. - // */ - // private static final char[] eolMarker = { '.' }; - - /** - * The width of this view cannot be below this amount, as if the width is ever 0 (really a bug), we'll go into an - * infinite loop. - */ - private static final int MIN_WIDTH = 20; - - /** - * Creates a new WrappedSyntaxView. Lines will be wrapped on character boundaries. - * - * @param elem - * the element underlying the view - */ - public WrappedSyntaxView(Element elem) { - super(elem, Y_AXIS); - s = new Segment(); - drawSeg = new Segment(); - tempRect = new Rectangle(); - } - - /** - * This is called by the nested wrapped line views to determine the break location. This can be reimplemented to - * alter the breaking behavior. It will either break at word or character boundaries depending upon the break - * argument given at construction. - */ - protected int calculateBreakPosition(int p0, Token tokenList, float x0) { - // System.err.println("------ beginning calculateBreakPosition() --------"); - int p = p0; - RSyntaxTextArea textArea = (RSyntaxTextArea) getContainer(); - float currentWidth = getWidth(); - if (currentWidth == Integer.MAX_VALUE) - currentWidth = getPreferredSpan(X_AXIS); - // Make sure width>0; this is a huge hack to fix a bug where - // loading text into an RTextArea before it is visible if word wrap - // is enabled causes an infinite loop in calculateBreakPosition() - // because of the 0-width! We cannot simply check in setSize() - // because the width is set to 0 somewhere else too somehow... - currentWidth = Math.max(currentWidth, MIN_WIDTH); - Token t = tokenList; - while (t != null && t.isPaintable()) { - // FIXME: Replace the code below with the commented-out line below. This will - // allow long tokens to be broken at embedded spaces (such as MLC's). But it - // currently throws BadLocationExceptions sometimes... - float tokenWidth = t.getWidth(textArea, this, x0); - if (tokenWidth > currentWidth) { - // If the current token alone is too long for this line, - // break at a character boundary. - if (p == p0) { - return t.getOffsetBeforeX(textArea, this, 0, currentWidth); - } - // Return the first non-whitespace char (i.e., don't start - // off the continuation of a wrapped line with whitespace). - return t.isWhitespace() ? p + t.textCount : p; - // return getBreakLocation(t, fm, x0, currentWidth, this); - } - currentWidth -= tokenWidth; - x0 += tokenWidth; - p += t.textCount; - // System.err.println("*** *** *** token fit entirely (width==" + tokenWidth + "), adding " + t.textCount + - // " to p, now p==" + p); - t = t.getNextToken(); - } - // System.err.println("... ... whole line fits; returning p==" + p); - // System.err.println("------ ending calculateBreakPosition() --------"); - - // return p; - return p + 1; - } - - // private int getBreakLocation(Token t, FontMetrics fm, int x0, int x, - // TabExpander e) { - // Segment s = new Segment(); - // s.array = t.text; - // s.offset = t.textOffset; - // s.count = t.textCount; - // return t.offset + Utilities.getBreakLocation(s, fm, x0, x, e, t.offset); - // } - - /** - * Gives notification from the document that attributes were changed in a location that this view is responsible - * for. - * - * @param e - * the change information from the associated document - * @param a - * the current allocation of the view - * @param f - * the factory to use to rebuild if the view has children - * @see View#changedUpdate - */ - public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) { - updateChildren(e, a); - } - - /** - * Draws a single view (i.e., a line of text for a wrapped view), wrapping the text onto multiple lines if - * necessary. - * - * @param g - * The graphics context in which to paint. - * @param r - * The rectangle in which to paint. - * @param view - * The View to paint. - * @param fontHeight - * The height of the font being used. - * @param y - * The y-coordinate at which to begin painting. - */ - protected void drawView(Graphics2D g, Rectangle r, View view, - int fontHeight, int y) { - - float x = r.x; - - LayeredHighlighter h = (LayeredHighlighter) host.getHighlighter(); - - RSyntaxDocument document = (RSyntaxDocument) getDocument(); - Element map = getElement(); - - int p0 = view.getStartOffset(); - int lineNumber = map.getElementIndex(p0); - int p1 = view.getEndOffset();// - 1; - - setSegment(p0, p1 - 1, document, drawSeg); - // System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); - int start = p0 - drawSeg.offset; - Token token = document.getTokenListForLine(lineNumber); - - // If this line is an empty line, then the token list is simply a - // null token. In this case, the line highlight will be skipped in - // the loop below, so unfortunately we must manually do it here. - if (token != null && token.type == Token.NULL) { - h.paintLayeredHighlights(g, p0, p1, r, host, this); - return; - } - - // Loop through all tokens in this view and paint them! - while (token != null && token.isPaintable()) { - - int p = calculateBreakPosition(p0, token, x); - x = r.x; - - h.paintLayeredHighlights(g, p0, p, r, host, this); - - while (token != null && token.isPaintable() && token.offset + token.textCount - 1 < p) {// <=p) { - x = token.paint(g, x, y, host, this); - token = token.getNextToken(); - } - - if (token != null && token.isPaintable() && token.offset < p) { - int tokenOffset = token.offset; - Token temp = new DefaultToken(drawSeg, tokenOffset - start, - p - 1 - start, tokenOffset, - token.type); - temp.paint(g, x, y, host, this); - temp = null; - token.makeStartAt(p); + RSTAView { + + private int tabBase; + private int tabSize; + + /** + * This is reused to keep from allocating/deallocating. + */ + private Segment s, drawSeg; + + /** + * Another variable initialized once to keep from allocating/deallocating. + */ + private Rectangle tempRect; + + /** + * Cached for each paint() call so each drawView() call has access to it. + */ + private RSyntaxTextArea host; + private FontMetrics metrics; + private TokenImpl tempToken; + private TokenImpl lineCountTempToken; + +// /** +// * The end-of-line marker. +// */ +// private static final char[] eolMarker = { '.' }; + + /** + * The width of this view cannot be below this amount, as if the width + * is ever 0 (really a bug), we'll go into an infinite loop. + */ + private static final int MIN_WIDTH = 20; + + + /** + * Creates a new WrappedSyntaxView. Lines will be wrapped + * on character boundaries. + * + * @param elem the element underlying the view + */ + public WrappedSyntaxView(Element elem) { + super(elem, Y_AXIS); + tempToken = new TokenImpl(); + s = new Segment(); + drawSeg = new Segment(); + tempRect = new Rectangle(); + lineCountTempToken = new TokenImpl(); + } + + + + /** + * This is called by the nested wrapped line + * views to determine the break location. This can + * be reimplemented to alter the breaking behavior. + * It will either break at word or character boundaries + * depending upon the break argument given at + * construction. + */ + protected int calculateBreakPosition(int p0, Token tokenList, float x0) { +//System.err.println("------ beginning calculateBreakPosition() --------"); + int p = p0; + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + float currentWidth = getWidth(); + if (currentWidth==Integer.MAX_VALUE) { + currentWidth = getPreferredSpan(X_AXIS); + } + // Make sure width>0; this is a huge hack to fix a bug where + // loading text into an RTextArea before it is visible if word wrap + // is enabled causes an infinite loop in calculateBreakPosition() + // because of the 0-width! We cannot simply check in setSize() + // because the width is set to 0 somewhere else too somehow... + currentWidth = Math.max(currentWidth, MIN_WIDTH); + Token t = tokenList; + while (t!=null && t.isPaintable()) { +// FIXME: Replace the code below with the commented-out line below. This will +// allow long tokens to be broken at embedded spaces (such as MLC's). But it +// currently throws BadLocationExceptions sometimes... + float tokenWidth = t.getWidth(textArea, this, x0); + if (tokenWidth>currentWidth) { + // If the current token alone is too long for this line, + // break at a character boundary. + if (p==p0) { + return t.getOffsetBeforeX(textArea, this, 0, currentWidth); + } + // Return the first non-whitespace char (i.e., don't start + // off the continuation of a wrapped line with whitespace). + return t.isWhitespace() ? p+t.length() : p; +//return getBreakLocation(t, fm, x0, currentWidth, this); + } + currentWidth -= tokenWidth; + x0 += tokenWidth; + p += t.length(); +//System.err.println("*** *** *** token fit entirely (width==" + tokenWidth + "), adding " + t.textCount + " to p, now p==" + p); + t = t.getNextToken(); + } +//System.err.println("... ... whole line fits; returning p==" + p); +//System.err.println("------ ending calculateBreakPosition() --------"); + +// return p; +return p + 1; + } + +//private int getBreakLocation(Token t, FontMetrics fm, int x0, int x, +// TabExpander e) { +// Segment s = new Segment(); +// s.array = t.text; +// s.offset = t.getTextOffset(); +// s.count = t.textCount; +// return t.offset + Utilities.getBreakLocation(s, fm, x0, x, e, t.offset); +//} + + /** + * Gives notification from the document that attributes were changed + * in a location that this view is responsible for. + * + * @param e the change information from the associated document + * @param a the current allocation of the view + * @param f the factory to use to rebuild if the view has children + * @see View#changedUpdate + */ + @Override + public void changedUpdate(DocumentEvent e, Shape a, ViewFactory f) { + updateChildren(e, a); + } + + + /** + * Sets the allocation rectangle for a given line's view, but sets the + * y value to the passed-in value. This should be used instead of + * {@link #childAllocation(int, Rectangle)} since it allows you to account + * for hidden lines in collapsed fold regions. + * + * @param line + * @param y + * @param alloc + */ + private void childAllocation2(int line, int y, Rectangle alloc) { + alloc.x += getOffset(X_AXIS, line); + alloc.y += y; + alloc.width = getSpan(X_AXIS, line); + alloc.height = getSpan(Y_AXIS, line); + + // FIXME: This is required due to a bug that I can't track down. The + // top margin is being added twice somewhere in wrapped views, so we + // have to adjust for it here. + Insets margin = host.getMargin(); + if (margin!=null) { + alloc.y -= margin.top; + } + + } + + + /** + * Draws a single view (i.e., a line of text for a wrapped view), + * wrapping the text onto multiple lines if necessary. + * + * @param painter The painter to use to render tokens. + * @param g The graphics context in which to paint. + * @param r The rectangle in which to paint. + * @param view The View to paint. + * @param fontHeight The height of the font being used. + * @param y The y-coordinate at which to begin painting. + */ + protected void drawView(TokenPainter painter, Graphics2D g, Rectangle r, + View view, int fontHeight, int y, int line) { + + float x = r.x; + + LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = getElement(); + + int p0 = view.getStartOffset(); + int lineNumber = map.getElementIndex(p0); + int p1 = view.getEndOffset();// - 1; + + setSegment(p0,p1-1, document, drawSeg); + //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); + int start = p0 - drawSeg.offset; + Token token = document.getTokenListForLine(lineNumber); + + // If this line is an empty line, then the token list is simply a + // null token. In this case, the line highlight will be skipped in + // the loop below, so unfortunately we must manually do it here. + if (token!=null && token.getType()==Token.NULL) { + h.paintLayeredHighlights(g, p0,p1, r, host, this); + return; + } + + // Loop through all tokens in this view and paint them! + while (token!=null && token.isPaintable()) { + + int p = calculateBreakPosition(p0, token, x); + x = r.x; + + h.paintLayeredHighlights(g, p0,p, r, host, this); + + while (token!=null && token.isPaintable() && token.getEndOffset()-1View to paint. + * @param fontHeight The height of the font being used. + * @param y The y-coordinate at which to begin painting. + * @param selStart The start of the selection. + * @param selEnd The end of the selection. + */ + protected void drawViewWithSelection(TokenPainter painter, Graphics2D g, + Rectangle r, View view, int fontHeight, int y, int selStart, + int selEnd) { + + float x = r.x; + boolean useSTC = host.getUseSelectedTextColor(); + + LayeredHighlighter h = (LayeredHighlighter)host.getHighlighter(); + + RSyntaxDocument document = (RSyntaxDocument)getDocument(); + Element map = getElement(); + + int p0 = view.getStartOffset(); + int lineNumber = map.getElementIndex(p0); + int p1 = view.getEndOffset();// - 1; + + setSegment(p0,p1-1, document, drawSeg); + //System.err.println("drawSeg=='" + drawSeg + "' (p0/p1==" + p0 + "/" + p1 + ")"); + int start = p0 - drawSeg.offset; + Token token = document.getTokenListForLine(lineNumber); + + // If this line is an empty line, then the token list is simply a + // null token. In this case, the line highlight will be skipped in + // the loop below, so unfortunately we must manually do it here. + if (token!=null && token.getType()==Token.NULL) { + h.paintLayeredHighlights(g, p0,p1, r, host, this); + return; + } + + // Loop through all tokens in this view and paint them! + while (token!=null && token.isPaintable()) { + + int p = calculateBreakPosition(p0, token, x); + x = r.x; + + h.paintLayeredHighlights(g, p0,p, r, host, this); + + while (token!=null && token.isPaintable() && token.getEndOffset()-1token.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + x = painter.paint(tempToken,g,x,y,host, this); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int selCount = Math.min(token.length(), selEnd-token.getOffset()); + if (selCount==token.length()) { + x = painter.paintSelected(token, g, x,y, host, this, + useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + x = painter.paintSelected(token, g, x,y, host, this,useSTC); + } + + // This token is entirely unselected + else { + x = painter.paint(token, g, x,y, host, this); + } + + token = token.getNextToken(); + + } + + // If there's a token that's going to be split onto the next line + if (token!=null && token.isPaintable() && token.getOffset()token.getOffset()) { + tempToken.copyFrom(token); + tempToken.textCount = selStart - tempToken.getOffset(); + x = painter.paint(tempToken,g,x,y,host, this); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selStart); + // Clone required since token and tempToken must be + // different tokens for else statement below + token = new TokenImpl(tempToken); + } + + int selCount = Math.min(token.length(), selEnd-token.getOffset()); + if (selCount==token.length()) { + x = painter.paintSelected(token, g, x,y, host, this, + useSTC); + } + else { + tempToken.copyFrom(token); + tempToken.textCount = selCount; + x = painter.paintSelected(tempToken, g, x,y, host, + this, useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(token.getOffset() + selCount); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + } + + // Selection ends in this token + else if (token.containsPosition(selEnd)) { + tempToken.copyFrom(token); + tempToken.textCount = selEnd - tempToken.getOffset(); + x = painter.paintSelected(tempToken, g, x,y, host, this, + useSTC); + tempToken.textCount = token.length(); + tempToken.makeStartAt(selEnd); + token = tempToken; + x = painter.paint(token, g, x,y, host, this); + } + + // This token is entirely selected + else if (token.getOffset()>=selStart && + token.getEndOffset()<=selEnd) { + x = painter.paintSelected(token, g, x,y, host, this,useSTC); + } + + // This token is entirely unselected + else { + x = painter.paint(token, g, x,y, host, this); + } + + token = new TokenImpl(orig); + ((TokenImpl)token).makeStartAt(p); + + } + + p0 = (p==p0) ? p1 : p; + y += fontHeight; + + } // End of while (token!=null && token.isPaintable()). + + // NOTE: We should re-use code from Token (paintBackground()) here, + // but don't because I'm just too lazy. + if (host.getEOLMarkersVisible()) { + g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); + g.setFont(host.getFontForTokenType(Token.WHITESPACE)); + g.drawString("\u00B6", x, (float) y-fontHeight); + } + + } + + + /** + * Fetches the allocation for the given child view.

    + * Overridden to account for code folding. + * + * @param index The index of the child, >= 0 &&< getViewCount(). + * @param a The allocation to this view + * @return The allocation to the child; or null if + * a is null; or null if the + * layout is invalid + */ + @Override + public Shape getChildAllocation(int index, Shape a) { + if (a != null) { + Shape ca = getChildAllocationImpl(index, a); + if ((ca != null) && (!isAllocationValid())) { + // The child allocation may not have been set yet. + Rectangle r = (ca instanceof Rectangle) ? (Rectangle) ca : ca + .getBounds(); + if ((r.width == 0) && (r.height == 0)) { + return null; + } + } + return ca; + } + return null; + } + + /** + * Fetches the allocation for the given child view to render into.

    + * Overridden to account for lines hidden by collapsed folded regions. + * + * @param line The index of the child, >= 0 &&< getViewCount() + * @param a The allocation to this view + * @return The allocation to the child + */ + public Shape getChildAllocationImpl(int line, Shape a) { + + Rectangle alloc = getInsideAllocation(a); + host = (RSyntaxTextArea)getContainer(); + FoldManager fm = host.getFoldManager(); + int y = alloc.y; + + // TODO: Make cached getOffset() calls for Y_AXIS valid even for + // folding, to speed this up! + for (int i=0; isetParent method. + * Subclasses can re-implement this to initialize their + * child views in a different manner. The default + * implementation creates a child view for each + * child element. + * + * @param f the view factory + */ + @Override + protected void loadChildren(ViewFactory f) { + Element e = getElement(); + int n = e.getElementCount(); + if (n > 0) { + View[] added = new View[n]; + for (int i = 0; i < n; i++) { + added[i] = new WrappedLine(e.getElement(i)); + } + replace(0, 0, added); + } + } + + + @Override + public Shape modelToView(int pos, Shape a, Position.Bias b) + throws BadLocationException { + + if (! isAllocationValid()) { + Rectangle alloc = a.getBounds(); + setSize(alloc.width, alloc.height); + } + + boolean isBackward = (b == Position.Bias.Backward); + int testPos = (isBackward) ? Math.max(0, pos - 1) : pos; + if(isBackward && testPos < getStartOffset()) { + return null; + } + + int vIndex = getViewIndexAtPosition(testPos); + if ((vIndex != -1) && (vIndex < getViewCount())) { + View v = getView(vIndex); + if(v != null && testPos >= v.getStartOffset() && + testPos < v.getEndOffset()) { + Shape childShape = getChildAllocation(vIndex, a); + if (childShape == null) { + // We are likely invalid, fail. + return null; + } + Shape retShape = v.modelToView(pos, childShape, b); + if(retShape == null && v.getEndOffset() == pos) { + if(++vIndex < getViewCount()) { + v = getView(vIndex); + retShape = v.modelToView(pos, getChildAllocation(vIndex, a), b); + } + } + return retShape; + } + } + + throw new BadLocationException("Position not represented by view", pos); + + } + + + /** + * Provides a mapping, for a given region, from the document model + * coordinate space to the view coordinate space. The specified region is + * created as a union of the first and last character positions.

    + * + * This is implemented to subtract the width of the second character, as + * this view's modelToView actually returns the width of the + * character instead of "1" or "0" like the View implementations in + * javax.swing.text. Thus, if we don't override this method, + * the View implementation will return one character's width + * too much for its consumers (implementations of + * javax.swing.text.Highlighter). + * + * @param p0 the position of the first character (>=0) + * @param b0 The bias of the first character position, toward the previous + * character or the next character represented by the offset, in + * case the position is a boundary of two views; b0 + * will have one of these values: + *

      + *
    • Position.Bias.Forward + *
    • Position.Bias.Backward + *
    + * @param p1 the position of the last character (>=0) + * @param b1 the bias for the second character position, defined + * one of the legal values shown above + * @param a the area of the view, which encompasses the requested region + * @return the bounding box which is a union of the region specified + * by the first and last character positions + * @exception BadLocationException if the given position does + * not represent a valid location in the associated document + * @exception IllegalArgumentException if b0 or + * b1 are not one of the + * legal Position.Bias values listed above + * @see View#viewToModel + */ + @Override + public Shape modelToView(int p0, Position.Bias b0, + int p1, Position.Bias b1, + Shape a) throws BadLocationException { + + Shape s0 = modelToView(p0, a, b0); + Shape s1; + if (p1 ==getEndOffset()) { + try { + s1 = modelToView(p1, a, b1); + } catch (BadLocationException ble) { + s1 = null; + } + if (s1 == null) { + // Assume extends left to right. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, + 1, alloc.height); + } + } + else { + s1 = modelToView(p1, a, b1); + } + Rectangle r0 = s0.getBounds(); + Rectangle r1 = (s1 instanceof Rectangle) ? (Rectangle) s1 : + s1.getBounds(); + if (r0.y != r1.y) { + // If it spans lines, force it to be the width of the view. + Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : + a.getBounds(); + r0.x = alloc.x; + r0.width = alloc.width; + } + + r0.add(r1); + // The next line is the only difference between this method and + // View's implementation. We're subtracting the width of the second + // character. This is because this method is used by Highlighter + // implementations to get the area to "highlight", and if we don't do + // this, one character too many is highlighted thanks to our + // modelToView() implementation returning the actual width of the + // character requested! + if (p1>p0) { + r0.width -= r1.width; + } + return r0; + + } + + + /** + * Returns the next tab stop position after a given reference position. + * This implementation does not support things like centering so it + * ignores the tabOffset argument. + * + * @param x the current position >= 0 + * @param tabOffset the position within the text stream + * that the tab occurred at >= 0. + * @return the tab stop, measured in points >= 0 + */ + @Override + public float nextTabStop(float x, int tabOffset) { + if (tabSize == 0) { + return x; + } + int ntabs = ((int) x - tabBase) / tabSize; + return tabBase + ((ntabs + 1f) * tabSize); + } + + + /** + * Paints the word-wrapped text. + * + * @param g The graphics context in which to paint. + * @param a The shape (usually a rectangle) in which to paint. + */ + @Override + public void paint(Graphics g, Shape a) { + + Rectangle alloc = (a instanceof Rectangle) ? + (Rectangle)a : a.getBounds(); + tabBase = alloc.x; + + Graphics2D g2d = (Graphics2D)g; + host = (RSyntaxTextArea)getContainer(); + int ascent = host.getMaxAscent(); + int fontHeight = host.getLineHeight(); + FoldManager fm = host.getFoldManager(); + TokenPainter painter = host.getTokenPainter(); + Element root = getElement(); + + // Whether token styles should always be painted, even in selections + int selStart = host.getSelectionStart(); + int selEnd = host.getSelectionEnd(); + + int n = getViewCount(); // Number of lines. + int x = alloc.x + getLeftInset(); + tempRect.y = alloc.y + getTopInset(); + Rectangle clip = g.getClipBounds(); + for (int i = 0; i < n; i++) { + + tempRect.x = x + getOffset(X_AXIS, i); + //tempRect.y = y + getOffset(Y_AXIS, i); + tempRect.width = getSpan(X_AXIS, i); + tempRect.height = getSpan(Y_AXIS, i); + //System.err.println("For line " + i + ": tempRect==" + tempRect); + + if (tempRect.intersects(clip)) { + Element lineElement = root.getElement(i); + int startOffset = lineElement.getStartOffset(); + int endOffset = lineElement.getEndOffset()-1; // Why always "-1"? + View view = getView(i); + if (selStart==selEnd || startOffset>=selEnd || + endOffsetSegment point to the text in our + * document between the given positions. Note that the positions MUST be + * valid positions in the document. + * + * @param p0 The first position in the document. + * @param p1 The second position in the document. + * @param document The document from which you want to get the text. + * @param seg The segment in which to load the text. + */ + private void setSegment(int p0, int p1, Document document, + Segment seg) { + try { +//System.err.println("... in setSharedSegment, p0/p1==" + p0 + "/" + p1); + document.getText(p0, p1-p0, seg); + //System.err.println("... in setSharedSegment: s=='" + s + "'; line/numLines==" + line + "/" + numLines); + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + } + + + /** + * Sets the size of the view. This should cause layout of the view along + * the given axis, if it has any layout duties. + * + * @param width the width >= 0 + * @param height the height >= 0 + */ + @Override + public void setSize(float width, float height) { + updateMetrics(); + if ((int) width != getWidth()) { + // invalidate the view itself since the childrens + // desired widths will be based upon this views width. + preferenceChanged(null, true, true); + setWidthChangePending(true); + } + super.setSize(width, height); + setWidthChangePending(false); + } + + + private void setWidthChangePending(boolean widthChangePending) { + int count = getViewCount(); + for (int i = 0; i < count; i++) { + View v = getView(i); + if (v instanceof WrappedLine) { + ((WrappedLine) v).widthChangePending = widthChangePending; + } + } + } + + + /** + * Update the child views in response to a + * document event. + */ + void updateChildren(DocumentEvent e, Shape a) { + + Element elem = getElement(); + DocumentEvent.ElementChange ec = e.getChange(elem); + + // This occurs when syntax highlighting only changes on lines + // (i.e. beginning a multiline comment). + if (e.getType()==DocumentEvent.EventType.CHANGE) { + //System.err.println("Updating the damage due to a CHANGE event..."); + // FIXME: Make me repaint more intelligently. + getContainer().repaint(); + //damageLineRange(startLine,endLine, a, host); + } + + else if (ec != null) { + + // the structure of this element changed. + Element[] removedElems = ec.getChildrenRemoved(); + Element[] addedElems = ec.getChildrenAdded(); + View[] added = new View[addedElems.length]; + + for (int i = 0; i < addedElems.length; i++) { + added[i] = new WrappedLine(addedElems[i]); + } + //System.err.println("Replacing " + removedElems.length + + // " children with " + addedElems.length); + replace(ec.getIndex(), removedElems.length, added); + + // should damge a little more intelligently. + if (a != null) { + preferenceChanged(null, true, true); + getContainer().repaint(); + } + + } + + // update font metrics which may be used by the child views + updateMetrics(); + + } + + + final void updateMetrics() { + Component host = getContainer(); + Font f = host.getFont(); + metrics = host.getFontMetrics(f); // Metrics for the default font. + tabSize = getTabSize() * metrics.charWidth('m'); + } + + + @Override + public int viewToModel(float x, float y, Shape a, Position.Bias[] bias) { + + int offs = -1; + + if (! isAllocationValid()) { + Rectangle alloc = a.getBounds(); + setSize(alloc.width, alloc.height); + } + + // Get the child view for the line at (x,y), and ask it for the + // specific offset. + Rectangle alloc = getInsideAllocation(a); + View v = getViewAtPoint((int) x, (int) y, alloc); + if (v != null) { + offs = v.viewToModel(x, y, alloc, bias); + + // Code folding may have hidden the last line. If so, return the last + // visible offset instead of the last offset. + if (host.isCodeFoldingEnabled() && v == getView(getViewCount() - 1) && + offs == v.getEndOffset() - 1) { + offs = host.getLastVisibleOffset(); } - - p0 = (p == p0) ? p1 : p; - y += fontHeight; - - } // End of while (token!=null && token.isPaintable()). - - // NOTE: We should re-use code from Token (paintBackground()) here, - // but don't because I'm just too lazy. - if (host.getEOLMarkersVisible()) { - g.setColor(host.getForegroundForTokenType(Token.WHITESPACE)); - g.setFont(host.getFontForTokenType(Token.WHITESPACE)); - g.drawString("\u00B6", x, y - fontHeight); - } - - } - - /** - * Determines the maximum span for this view along an axis. This is implemented to provide the superclass behavior - * after first making sure that the current font metrics are cached (for the nested lines which use the metrics to - * determine the height of the potentially wrapped lines). - * - * @param axis - * may be either View.X_AXIS or View.Y_AXIS - * @return the span the view would like to be rendered into. Typically the view is told to render into the span that - * is returned, although there is no guarantee. The parent may choose to resize or break the view. - * @see View#getMaximumSpan - */ - public float getMaximumSpan(int axis) { - updateMetrics(); - float span = super.getPreferredSpan(axis); - if (axis == View.X_AXIS) { // EOL marker - span += metrics.charWidth('\u00b6'); // metrics set in updateMetrics - } - return span; - } - - /** - * Determines the minimum span for this view along an axis. This is implemented to provide the superclass behavior - * after first making sure that the current font metrics are cached (for the nested lines which use the metrics to - * determine the height of the potentially wrapped lines). - * - * @param axis - * may be either View.X_AXIS or View.Y_AXIS - * @return the span the view would like to be rendered into. Typically the view is told to render into the span that - * is returned, although there is no guarantee. The parent may choose to resize or break the view. - * @see View#getMinimumSpan - */ - public float getMinimumSpan(int axis) { - updateMetrics(); - float span = super.getPreferredSpan(axis); - if (axis == View.X_AXIS) { // EOL marker - span += metrics.charWidth('\u00b6'); // metrics set in updateMetrics - } - return span; - } - - /** - * Determines the preferred span for this view along an axis. This is implemented to provide the superclass behavior - * after first making sure that the current font metrics are cached (for the nested lines which use the metrics to - * determine the height of the potentially wrapped lines). - * - * @param axis - * may be either View.X_AXIS or View.Y_AXIS - * @return the span the view would like to be rendered into. Typically the view is told to render into the span that - * is returned, although there is no guarantee. The parent may choose to resize or break the view. - * @see View#getPreferredSpan - */ - public float getPreferredSpan(int axis) { - updateMetrics(); - float span = super.getPreferredSpan(axis); - if (axis == View.X_AXIS) { // EOL marker - span += metrics.charWidth('\u00b6'); // metrics set in updateMetrics - } - return span; - } - - /** - * Returns the tab size set for the document, defaulting to 5. - * - * @return the tab size - */ - protected int getTabSize() { - Integer i = (Integer) getDocument(). - getProperty(PlainDocument.tabSizeAttribute); - return (i != null) ? i : 5; - } - - /** - * Gives notification that something was inserted into the document in a location that this view is responsible for. - * This is implemented to simply update the children. - * - * @param changes - * The change information from the associated document. - * @param a - * the current allocation of the view - * @param f - * the factory to use to rebuild if the view has children - * @see View#insertUpdate - */ - public void insertUpdate(DocumentEvent changes, Shape a, ViewFactory f) { - updateChildren(changes, a); - Rectangle alloc = ((a != null) && isAllocationValid()) ? - getInsideAllocation(a) : null; - int pos = changes.getOffset(); - View v = getViewAtPosition(pos, alloc); - if (v != null) - v.insertUpdate(changes, alloc, f); - } - - /** - * Loads all of the children to initialize the view. This is called by the setParent method. Subclasses - * can re-implement this to initialize their child views in a different manner. The default implementation creates a - * child view for each child element. - * - * @param f - * the view factory - */ - protected void loadChildren(ViewFactory f) { - Element e = getElement(); - int n = e.getElementCount(); - if (n > 0) { - View[] added = IntStream.range(0, n).mapToObj(i -> new WrappedLine(e.getElement(i))).toArray(View[]::new); - replace(0, 0, added); - } - } - - /** - * Provides a mapping, for a given region, from the document model coordinate space to the view coordinate space. - * The specified region is created as a union of the first and last character positions. - *

    - * - * This is implemented to subtract the width of the second character, as this view's modelToView - * actually returns the width of the character instead of "1" or "0" like the View implementations in - * javax.swing.text. Thus, if we don't override this method, the View implementation will - * return one character's width too much for its consumers (implementations of - * javax.swing.text.Highlighter). - * - * @param p0 - * the position of the first character (>=0) - * @param b0 - * The bias of the first character position, toward the previous character or the next character - * represented by the offset, in case the position is a boundary of two views; b0 will have - * one of these values: - *

      - *
    • Position.Bias.Forward
    • Position.Bias.Backward - *
    - * @param p1 - * the position of the last character (>=0) - * @param b1 - * the bias for the second character position, defined one of the legal values shown above - * @param a - * the area of the view, which encompasses the requested region - * @return the bounding box which is a union of the region specified by the first and last character positions - * @exception BadLocationException - * if the given position does not represent a valid location in the associated document - * @exception IllegalArgumentException - * if b0 or b1 are not one of the legal Position.Bias values - * listed above - * @see View#viewToModel - */ - public Shape modelToView(int p0, Position.Bias b0, - int p1, Position.Bias b1, - Shape a) throws BadLocationException { - - Shape s0 = modelToView(p0, a, b0); - Shape s1; - if (p1 == getEndOffset()) { - try { - s1 = modelToView(p1, a, b1); - } catch (BadLocationException ble) { - s1 = null; - } - if (s1 == null) { - // Assume extends left to right. - Rectangle alloc = (a instanceof Rectangle) ? (Rectangle) a : - a.getBounds(); - s1 = new Rectangle(alloc.x + alloc.width - 1, alloc.y, - 1, alloc.height); - } - } - else { - s1 = modelToView(p1, a, b1); } - Rectangle r0 = s0.getBounds(); - Rectangle r1 = (s1 instanceof Rectangle) ? (Rectangle) s1 : - s1.getBounds(); - if (r0.y != r1.y) { - // If it spans lines, force it to be the width of the view. - Rectangle alloc = (a instanceof Rectangle) ? (Rectangle) a : - a.getBounds(); - r0.x = alloc.x; - r0.width = alloc.width; - } - - r0.add(r1); - // The next line is the only difference between this method and - // View's implementation. We're subtracting the width of the second - // character. This is because this method is used by Highlighter - // implementations to get the area to "highlight", and if we don't do - // this, one character too many is highlighted thanks to our - // modelToView() implementation returning the actual width of the - // character requested! - if (p1 > p0) - r0.width -= r1.width; - return r0; - - } - - /** - * Returns the next tab stop position after a given reference position. This implementation does not support things - * like centering so it ignores the tabOffset argument. - * - * @param x - * the current position >= 0 - * @param tabOffset - * the position within the text stream that the tab occurred at >= 0. - * @return the tab stop, measured in points >= 0 - */ - public float nextTabStop(float x, int tabOffset) { - if (tabSize == 0) - return x; - int ntabs = ((int) x - tabBase) / tabSize; - return tabBase + ((ntabs + 1) * tabSize); - } - - /** - * Paints the word-wrapped text. - * - * @param g - * The graphics context in which to paint. - * @param a - * The shape (usually a rectangle) in which to paint. - */ - public void paint(Graphics g, Shape a) { - - Rectangle alloc = (a instanceof Rectangle) ? - (Rectangle) a : a.getBounds(); - tabBase = alloc.x; - - Graphics2D g2d = (Graphics2D) g; - host = (RSyntaxTextArea) getContainer(); - int ascent = host.getMaxAscent(); - int fontHeight = host.getLineHeight(); - - int n = getViewCount(); // Number of lines. - int x = alloc.x + getLeftInset(); - int y = alloc.y + getTopInset(); - Rectangle clip = g.getClipBounds(); - for (int i = 0; i < n; i++) { - tempRect.x = x + getOffset(X_AXIS, i); - tempRect.y = y + getOffset(Y_AXIS, i); - tempRect.width = getSpan(X_AXIS, i); - tempRect.height = getSpan(Y_AXIS, i); - // System.err.println("For line " + i + ": tempRect==" + tempRect); - if (tempRect.intersects(clip)) { - View view = getView(i); - drawView(g2d, alloc, view, fontHeight, tempRect.y + ascent); - } - } - - } - - /** - * Gives notification that something was removed from the document in a location that this view is responsible for. - * This is implemented to simply update the children. - * - * @param changes - * The change information from the associated document. - * @param a - * the current allocation of the view - * @param f - * the factory to use to rebuild if the view has children - * @see View#removeUpdate - */ - public void removeUpdate(DocumentEvent changes, Shape a, ViewFactory f) { - - updateChildren(changes, a); - - Rectangle alloc = ((a != null) && isAllocationValid()) ? - getInsideAllocation(a) : null; - int pos = changes.getOffset(); - View v = getViewAtPosition(pos, alloc); - if (v != null) - v.removeUpdate(changes, alloc, f); - - } - - /** - * Makes a Segment point to the text in our document between the given positions. Note that the - * positions MUST be valid positions in the document. - * - * @param p0 - * The first position in the document. - * @param p1 - * The second position in the document. - * @param document - * The document from which you want to get the text. - * @param seg - * The segment in which to load the text. - */ - private void setSegment(int p0, int p1, Document document, - Segment seg) { - try { - // System.err.println("... in setSharedSegment, p0/p1==" + p0 + "/" + p1); - document.getText(p0, p1 - p0, seg); - // System.err.println("... in setSharedSegment: s=='" + s + "'; line/numLines==" + line + "/" + numLines); - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - } - } - - /** - * Sets the size of the view. This should cause layout of the view along the given axis, if it has any layout - * duties. - * - * @param width - * the width >= 0 - * @param height - * the height >= 0 - */ - public void setSize(float width, float height) { - updateMetrics(); - if ((int) width != getWidth()) { - // invalidate the view itself since the childrens - // desired widths will be based upon this views width. - preferenceChanged(null, true, true); - widthChanging = true; - } - super.setSize(width, height); - widthChanging = false; - } - - /** - * Update the child views in response to a document event. - */ - void updateChildren(DocumentEvent e, Shape a) { - - Element elem = getElement(); - DocumentEvent.ElementChange ec = e.getChange(elem); - - // This occurs when syntax highlighting only changes on lines - // (i.e. beginning a multiline comment). - if (e.getType() == DocumentEvent.EventType.CHANGE) { - // System.err.println("Updating the damage due to a CHANGE event..."); - // FIXME: Make me repaint more intelligently. - getContainer().repaint(); - // damageLineRange(startLine,endLine, a, host); - } - - else if (ec != null) { - - // the structure of this element changed. - Element[] removedElems = ec.getChildrenRemoved(); - Element[] addedElems = ec.getChildrenAdded(); - View[] added = Arrays.stream(addedElems).map(WrappedLine::new).toArray(View[]::new); - - // System.err.println("Replacing " + removedElems.length + - // " children with " + addedElems.length); - replace(ec.getIndex(), removedElems.length, added); - - // should damge a little more intelligently. - if (a != null) { - preferenceChanged(null, true, true); - getContainer().repaint(); - } - - } - - // update font metrics which may be used by the child views - updateMetrics(); - - } - - final void updateMetrics() { - Component host = getContainer(); - Font f = host.getFont(); - metrics = host.getFontMetrics(f); // Metrics for the default font. - tabSize = getTabSize() * metrics.charWidth('m'); - } - - /** - * {@inheritDoc} - */ - public int yForLineContaining(Rectangle alloc, int offs) - throws BadLocationException { - - // line coordinates - Element map = getElement(); - int line = map.getElementIndex(offs); - - if (isAllocationValid()) { - return alloc.y + getOffset(Y_AXIS, line); - } - - return -1; - - } - - /** - * Simple view of a line that wraps if it doesn't fit withing the horizontal space allocated. This class tries to be - * lightweight by carrying little state of it's own and sharing the state of the outer class with it's siblings. - */ - class WrappedLine extends View { - - int nlines; - - WrappedLine(Element elem) { - super(elem); - } - - /** - * Calculate the number of lines that will be rendered by logical line when it is wrapped. - */ - final int calculateLineCount() { - - int nlines = 0; - int startOffset = getStartOffset(); - int p1 = getEndOffset(); - - // Get the token list for this line so we don't have to keep - // recomputing it if this logical line spans multiple physical - // lines. - RSyntaxTextArea textArea = (RSyntaxTextArea) getContainer(); - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - Element map = doc.getDefaultRootElement(); - int line = map.getElementIndex(startOffset); - Token tokenList = doc.getTokenListForLine(line); - float x0 = 0;// FIXME: should be alloc.x!! alloc.x;//0; - - // System.err.println(">>> calculateLineCount: " + startOffset + "-" + p1); - for (int p0 = startOffset; p0 < p1;) { - // System.err.println("... ... " + p0 + ", " + p1); - nlines += 1; - x0 = RSyntaxUtilities.makeTokenListStartAt(tokenList, p0, - WrappedSyntaxView.this, textArea, x0); - int p = calculateBreakPosition(p0, tokenList, x0); - - // System.err.println("... ... ... break position p==" + p); - p0 = (p == p0) ? ++p : p; // this is the fix of #4410243 - // we check on situation when - // width is too small and - // break position is calculated - // incorrectly. - // System.err.println("... ... ... new p0==" + p0); - } - /* - * int numLines = 0; try { numLines = textArea.getLineCount(); } catch (BadLocationException ble) { - * ble.printStackTrace(); } System.err.println(">>> >>> calculated number of lines for this view (line " + - * line + "/" + numLines + ": " + nlines); - */ - return nlines; - } - - /** - * Determines the preferred span for this view along an axis. - * - * @param axis - * may be either X_AXIS or Y_AXIS - * @return the span the view would like to be rendered into. Typically the view is told to render into the span - * that is returned, although there is no guarantee. The parent may choose to resize or break the view. - * @see View#getPreferredSpan - */ - public float getPreferredSpan(int axis) { - switch (axis) { - case View.X_AXIS: - float width = getWidth(); - if (width == Integer.MAX_VALUE) { - // We have been initially set to MAX_VALUE, but we don't - // want this as our preferred. - return 100f; - } - return width; - case View.Y_AXIS: - if (nlines == 0 || widthChanging) - nlines = calculateLineCount(); - return nlines * ((RSyntaxTextArea) getContainer()).getLineHeight(); - default: - throw new IllegalArgumentException("Invalid axis: " + axis); - } - } - - /** - * Renders using the given rendering surface and area on that surface. The view may need to do layout and create - * child views to enable itself to render into the given allocation. - * - * @param g - * the rendering surface to use - * @param a - * the allocated region to render into - * @see View#paint - */ - public void paint(Graphics g, Shape a) { - // This is done by drawView() above. - } - - /** - * Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it. - * - * @param pos - * the position to convert - * @param a - * the allocated region to render into - * @return the bounding box of the given position is returned - * @exception BadLocationException - * if the given position does not represent a valid location in the associated document. - */ - public Shape modelToView(int pos, Shape a, Position.Bias b) - throws BadLocationException { - - // System.err.println("--- begin modelToView ---"); - Rectangle alloc = a.getBounds(); - RSyntaxTextArea textArea = (RSyntaxTextArea) getContainer(); - alloc.height = textArea.getLineHeight();// metrics.getHeight(); - alloc.width = 1; - int p0 = getStartOffset(); - int p1 = getEndOffset(); - int testP = (b == Position.Bias.Forward) ? pos : - Math.max(p0, pos - 1); - - // Get the token list for this line so we don't have to keep - // recomputing it if this logical line spans multiple physical - // lines. - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - Element map = doc.getDefaultRootElement(); - int line = map.getElementIndex(p0); - Token tokenList = doc.getTokenListForLine(line); - float x0 = alloc.x;// 0; - - while (p0 < p1) { - x0 = RSyntaxUtilities.makeTokenListStartAt(tokenList, p0, - WrappedSyntaxView.this, textArea, x0); - int p = calculateBreakPosition(p0, tokenList, x0); - if ((pos >= p0) && (testP < p)) {// pos < p)) { - // it's in this line - alloc = RSyntaxUtilities.getLineWidthUpTo( - textArea, s, p0, pos, - WrappedSyntaxView.this, - alloc, alloc.x); - // System.err.println("--- end modelToView ---"); - return alloc; - } - // if (p == p1 && pos == p1) { - if (p == p1 - 1 && pos == p1 - 1) { - // Wants end. - if (pos > p0) { - alloc = RSyntaxUtilities.getLineWidthUpTo( - textArea, s, p0, pos, - WrappedSyntaxView.this, - alloc, alloc.x); - } - // System.err.println("--- end modelToView ---"); - return alloc; - } - - p0 = (p == p0) ? p1 : p; - // System.err.println("... ... Incrementing y"); - alloc.y += alloc.height; - - } - - throw new BadLocationException(null, pos); - - } - - /** - * Provides a mapping from the view coordinate space to the logical coordinate space of the model. - * - * @param x - * the X coordinate - * @param y - * the Y coordinate - * @param a - * the allocated region to render into - * @return the location within the model that best represents the given point in the view - * @see View#viewToModel - */ - public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) { - - // PENDING(prinz) implement bias properly - bias[0] = Position.Bias.Forward; - - Rectangle alloc = (Rectangle) a; - RSyntaxDocument doc = (RSyntaxDocument) getDocument(); - int x = (int) fx; - int y = (int) fy; - if (y < alloc.y) { - // above the area covered by this icon, so the the position - // is assumed to be the start of the coverage for this view. - return getStartOffset(); - } - else if (y > alloc.y + alloc.height) { - // below the area covered by this icon, so the the position - // is assumed to be the end of the coverage for this view. - return getEndOffset() - 1; - } - else { - - // positioned within the coverage of this view vertically, - // so we figure out which line the point corresponds to. - // if the line is greater than the number of lines - // contained, then simply use the last line as it represents - // the last possible place we can position to. - - RSyntaxTextArea textArea = (RSyntaxTextArea) getContainer(); - alloc.height = textArea.getLineHeight(); - int p1 = getEndOffset(); - - // Get the token list for this line so we don't have to keep - // recomputing it if this logical line spans multiple - // physical lines. - Element map = doc.getDefaultRootElement(); - int p0 = getStartOffset(); - int line = map.getElementIndex(p0); - Token tlist = doc.getTokenListForLine(line); - - // Look at each physical line-chunk of this logical line. - while (p0 < p1) { - - // We can always use alloc.x since we always break - // lines so they start at the beginning of a physical - // line. - RSyntaxUtilities.makeTokenListStartAt(tlist, p0, - WrappedSyntaxView.this, textArea, alloc.x); - int p = calculateBreakPosition(p0, tlist, alloc.x); - - // If desired view position is in this physical chunk. - if ((y >= alloc.y) && (y < (alloc.y + alloc.height))) { - - // Point is to the left of the line - if (x < alloc.x) { - return p0; - } - - // Point is to the right of the line - else if (x > alloc.x + alloc.width) { - return p - 1; - } - - // Point is in this physical line! - else { - - // Start at alloc.x since this chunk starts - // at the beginning of a physical line. - int n = tlist.getListOffset(textArea, - WrappedSyntaxView.this, - alloc.x, x); - - // NOTE: We needed to add the max() with - // p0 as getTokenListForLine returns -1 - // for empty lines (just a null token). - // How did this work before? - // FIXME: Have null tokens have their - // offset but a -1 length. - return Math.max(Math.min(n, p1 - 1), p0); - - } // End of else. - - } // End of if ((y>=alloc.y) && ... - - p0 = (p == p0) ? p1 : p; - alloc.y += alloc.height; - - } // End of while (p0>> calculateLineCount: " + startOffset + "-" + p1); + for (int p0=startOffset; p0>> >>> calculated number of lines for this view (line " + line + "/" + numLines + ": " + nlines); +*/ + return nlines; + } + + /** + * Determines the preferred span for this view along an + * axis. + * + * @param axis may be either X_AXIS or Y_AXIS + * @return the span the view would like to be rendered into. + * Typically the view is told to render into the span + * that is returned, although there is no guarantee. + * The parent may choose to resize or break the view. + * @see View#getPreferredSpan + */ + @Override + public float getPreferredSpan(int axis) { + switch (axis) { + case View.X_AXIS: + float width = getWidth(); + if (width == Integer.MAX_VALUE) { + // We have been initially set to MAX_VALUE, but we don't + // want this as our preferred. + return 100f; + } + return width; + case View.Y_AXIS: + if (nlines == 0 || widthChangePending) { + nlines = calculateLineCount(); + widthChangePending = false; + } + return nlines * ((RSyntaxTextArea)getContainer()).getLineHeight(); + default: + throw new IllegalArgumentException("Invalid axis: " + axis); + } + } + + /** + * Renders using the given rendering surface and area on that + * surface. The view may need to do layout and create child + * views to enable itself to render into the given allocation. + * + * @param g the rendering surface to use + * @param a the allocated region to render into + * @see View#paint + */ + @Override + public void paint(Graphics g, Shape a) { + // This is done by drawView() above. + } + + /** + * Provides a mapping from the document model coordinate space + * to the coordinate space of the view mapped to it. + * + * @param pos the position to convert + * @param a the allocated region to render into + * @return the bounding box of the given position is returned + * @exception BadLocationException if the given position does not + * represent a valid location in the associated document. + */ + @Override + public Shape modelToView(int pos, Shape a, Position.Bias b) + throws BadLocationException { + + //System.err.println("--- begin modelToView ---"); + Rectangle alloc = a.getBounds(); + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + alloc.height = textArea.getLineHeight();//metrics.getHeight(); + alloc.width = 1; + int p0 = getStartOffset(); + int p1 = getEndOffset(); + int testP = (b == Position.Bias.Forward) ? pos : + Math.max(p0, pos - 1); + + // Get the token list for this line so we don't have to keep + // recomputing it if this logical line spans multiple physical + // lines. + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + Element map = doc.getDefaultRootElement(); + int line = map.getElementIndex(p0); + Token tokenList = doc.getTokenListForLine(line); + float x0 = alloc.x;//0; + + while (p0 < p1) { + TokenSubList subList = TokenUtils.getSubTokenList(tokenList, p0, + WrappedSyntaxView.this, textArea, x0, lineCountTempToken); + x0 = subList!=null ? subList.x : x0; + tokenList = subList!=null ? subList.tokenList : null; + int p = calculateBreakPosition(p0, tokenList, x0); + if ((pos >= p0) && (testP p0) { + alloc = RSyntaxUtilities.getLineWidthUpTo( + textArea, s, p0, pos, + WrappedSyntaxView.this, + alloc, alloc.x); + } + //System.err.println("--- end modelToView ---"); + return alloc; + } + + p0 = (p == p0) ? p1 : p; + //System.err.println("... ... Incrementing y"); + alloc.y += alloc.height; + + } + + throw new BadLocationException(null, pos); + + } + + /** + * Provides a mapping from the view coordinate space to the logical + * coordinate space of the model. + * + * @param fx the X coordinate + * @param fy the Y coordinate + * @param a the allocated region to render into + * @return the location within the model that best represents the + * given point in the view + * @see View#viewToModel + */ + @Override + public int viewToModel(float fx, float fy, Shape a, Position.Bias[] bias) { + + // PENDING(prinz) implement bias properly + bias[0] = Position.Bias.Forward; + + Rectangle alloc = (Rectangle) a; + RSyntaxDocument doc = (RSyntaxDocument)getDocument(); + int x = (int) fx; + int y = (int) fy; + if (y < alloc.y) { + // above the area covered by this icon, so the the position + // is assumed to be the start of the coverage for this view. + return getStartOffset(); + } + else if (y > alloc.y + alloc.height) { + // below the area covered by this icon, so the the position + // is assumed to be the end of the coverage for this view. + return getEndOffset() - 1; + } + else { + + // positioned within the coverage of this view vertically, + // so we figure out which line the point corresponds to. + // if the line is greater than the number of lines + // contained, then simply use the last line as it represents + // the last possible place we can position to. + + RSyntaxTextArea textArea = (RSyntaxTextArea)getContainer(); + alloc.height = textArea.getLineHeight(); + int p1 = getEndOffset(); + + // Get the token list for this line so we don't have to keep + // recomputing it if this logical line spans multiple + // physical lines. + Element map = doc.getDefaultRootElement(); + int p0 = getStartOffset(); + int line = map.getElementIndex(p0); + Token tlist = doc.getTokenListForLine(line); + + // Look at each physical line-chunk of this logical line. + while (p0=alloc.y) && (y<(alloc.y+alloc.height))) { + + // Point is to the left of the line + if (x < alloc.x) { + return p0; + } + + // Point is to the right of the line + else if (x > alloc.x + alloc.width) { + return p - 1; + } + + // Point is in this physical line! + else if (tlist != null) { + + // Start at alloc.x since this chunk starts + // at the beginning of a physical line. + int n = tlist.getListOffset(textArea, + WrappedSyntaxView.this, + alloc.x, x); + + // NOTE: We needed to add the max() with + // p0 as getTokenListForLine returns -1 + // for empty lines (just a null token). + // How did this work before? + // FIXME: Have null tokens have their + // offset but a -1 length. + return Math.max(Math.min(n, p - 1), p0); + + } // End of else. + + } // End of if ((y>=alloc.y) && ... + + p0 = (p == p0) ? p1 : p; + alloc.y += alloc.height; + + } // End of while (p0WrappedSyntaxView class, designed to + * be faster with large wrapped documents. Heavily based off of + * BoxView, but streamlined to only care about the y-axis, and + * takes code folding into account.

    + * + * This class is not currently used. + * + * @author Robert Futrell + * @version 1.0 + */ +public class WrappedSyntaxView2 {//extends CompositeView { + +// private Rectangle tempRect; +// private int[] cachedOffsets; +// private int[] cachedSpans; +// private boolean sizeRequirementsValid; + + + public WrappedSyntaxView2(Element root) { + //super(root); +// tempRect = new Rectangle(); +// cachedOffsets = new int[0]; +// cachedSpans = new int[0]; +// sizeRequirementsValid = false; + } + + +// protected void childAllocation(int index, Rectangle alloc) { +// alloc.y += getOffset(index); +// alloc.height = getHeight(index); +// } +// +// +// private int getHeight(int childIndex) { +// return cachedSpans[childIndex]; +// } +// +// +// private int getOffset(int childIndex) { +// return cachedOffsets[childIndex]; +// } +// +// +// protected View getViewAtPoint(int x, int y, Rectangle alloc) { +// // TODO Auto-generated method stub +// return null; +// } +// +// +// /** +// * @param alloc The allocated region; this is the area inside of the insets +// * @return Whether the point lies after the region. +// */ +// protected boolean isAfter(int x, int y, Rectangle alloc) { +// return y > (alloc.y + alloc.height); +// } +// +// +// /** +// * @param alloc The allocated region; this is the area inside of the insets +// * @return Whether the point lies before the region. +// */ +// protected boolean isBefore(int x, int y, Rectangle alloc) { +// return y < alloc.y; +// } +// +// +// public float getPreferredSpan(int axis) { +// if (axis==X_AXIS) { +// return preferredWidth + getLeftInset() + getRightInset(); +// } +// else { +// return preferredHeight + getTopInset() + getBottomInset(); +// } +// } +// +// +// public void paint(Graphics g, Shape allocation) { +// +// Rectangle alloc = (allocation instanceof Rectangle) ? +// (Rectangle)allocation : allocation.getBounds(); +// int n = getViewCount(); +// +// int x = alloc.x + getLeftInset(); +// int y = alloc.y + getTopInset(); +// Rectangle clip = g.getClipBounds(); +// int preferredWidth = (int)getPreferredSpan(X_AXIS); +// +// for (int i = 0; i < n; i++) { +// tempRect.x = x; +// tempRect.y = y + getOffset(i); +// tempRect.width = preferredWidth; +// tempRect.height = getHeight(i); +// if (tempRect.intersects(clip)) { +// paintChild(g, tempRect, i); +// } +// } +// +// } +// +// +// /** +// * Called when a child view's preferred span changes. This invalidates +// * our layout cache and calls the super implementation. +// */ +// public void preferenceChanged(View child, boolean widthPreferenceChanged, +// boolean heightPreferenceChanged) { +// +// if (heightPreferenceChanged) { +// sizeRequirementsValid = false; +//// majorAllocValid = false; +// } +//// if (width) { +//// minorReqValid = false; +//// minorAllocValid = false; +//// } +// +// super.preferenceChanged(child, widthPreferenceChanged, heightPreferenceChanged); +// +// } +// +// public void replace(int index, int length, View[] elems) { +// +// super.replace(index, length, elems); +// +// // Invalidate cache +// int insertCount = elems==null ? 0 : elems.length; +// cachedOffsets = updateLayoutArray(cachedOffsets, index, insertCount); +// majorReqValid = false; +// majorAllocValid = false; +// +// } +// +// +// private int[] updateLayoutArray(int[] oldArray, int offset, int nInserted) { +// int n = getViewCount(); // Called after super.replace() so this is accurate +// int[] newArray = new int[n]; +// System.arraycopy(oldArray, 0, newArray, 0, offset); +// System.arraycopy(oldArray, offset, +// newArray, offset + nInserted, n - nInserted - offset); +// return newArray; +// } +// + +} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XMLParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XMLParser.java deleted file mode 100644 index 2885bd436..000000000 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XMLParser.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 08/16/2008 - * - * XMLParser.java - Simple XML parser. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - */ -package org.fife.ui.rsyntaxtextarea; - -import javax.swing.text.BadLocationException; -import javax.swing.text.Element; -import javax.xml.parsers.FactoryConfigurationError; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import org.xml.sax.*; -import org.xml.sax.helpers.*; - -import org.fife.io.DocumentReader; -import org.fife.ui.rsyntaxtextarea.parser.AbstractParser; -import org.fife.ui.rsyntaxtextarea.parser.DefaultParseResult; -import org.fife.ui.rsyntaxtextarea.parser.DefaultParserNotice; -import org.fife.ui.rsyntaxtextarea.parser.ParseResult; -import org.fife.ui.rsyntaxtextarea.parser.ParserNotice; - -/** - * A parser for XML documents. - * - * @author Robert Futrell - * @version 1.0 - */ -/* - * TODO: Figure out why this is buggy... - */ -public class XMLParser extends AbstractParser { - - private SAXParserFactory spf; - private RSyntaxTextArea textArea; - private DefaultParseResult result; - - public XMLParser(RSyntaxTextArea textArea) { - this.textArea = textArea; - result = new DefaultParseResult(this); - try { - spf = SAXParserFactory.newInstance(); - } catch (FactoryConfigurationError fce) { - fce.printStackTrace(); - } - } - - /** - * {@inheritDoc} - */ - public ParseResult parse(RSyntaxDocument doc, String style) { - - result.clearNotices(); - Element root = doc.getDefaultRootElement(); - result.setParsedLines(0, root.getElementCount() - 1); - - if (spf == null) { - return result; - } - - try { - SAXParser sp = spf.newSAXParser(); - Handler handler = new Handler(); - DocumentReader r = new DocumentReader(doc); - InputSource input = new InputSource(r); - sp.parse(input, handler); - r.close(); - } catch (SAXParseException spe) { - // A fatal parse error - ignore; a ParserNotice was already created. - } catch (Exception e) { - e.printStackTrace(); - result.addNotice(new DefaultParserNotice(this, - "Error parsing XML: " + e.getMessage(), 0, -1, -1)); - } - - return result; - - } - - private class Handler extends DefaultHandler { - - private void doError(SAXParseException e) { - int line = e.getLineNumber() - 1; - try { - int offs = textArea.getLineStartOffset(line); - int len = textArea.getLineEndOffset(line) - offs + 1; - ParserNotice pn = new DefaultParserNotice(XMLParser.this, - e.getMessage(), line, offs, len); - result.addNotice(pn); - System.err.println(">>> " + offs + "-" + len + " -> " + pn); - } catch (BadLocationException ble) { - ble.printStackTrace(); - } - } - - public void error(SAXParseException e) throws SAXException { - doError(e); - } - - public void fatalError(SAXParseException e) throws SAXException { - doError(e); - } - - public void warning(SAXParseException e) throws SAXException { - doError(e); - } - - } - -} \ No newline at end of file diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java new file mode 100755 index 000000000..487005144 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/XmlOccurrenceMarker.java @@ -0,0 +1,232 @@ +/* + * 03/09/2013 + * + * XmlOccurrenceMarker - Marks occurrences of the current token for XML. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; + +import org.fife.ui.rtextarea.SmartHighlightPainter; + + +/** + * Marks occurrences of the current token for XML. + * + * @author Robert Futrell + * @version 1.0 + */ +public class XmlOccurrenceMarker implements OccurrenceMarker { + + private static final char[] CLOSE_TAG_START = { '<', '/' }; + private static final char[] TAG_SELF_CLOSE = { '/', '>' }; + + + /** + * {@inheritDoc} + */ + @Override + public Token getTokenToMark(RSyntaxTextArea textArea) { + return HtmlOccurrenceMarker.getTagNameTokenForCaretOffset( + textArea, this); + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean isValidType(RSyntaxTextArea textArea, Token t) { + return textArea.getMarkOccurrencesOfTokenType(t.getType()); + } + + + /** + * {@inheritDoc} + */ + @Override + public void markOccurrences(RSyntaxDocument doc, Token t, + RSyntaxTextAreaHighlighter h, SmartHighlightPainter p) { + + char[] lexeme = t.getLexeme().toCharArray(); + int tokenOffs = t.getOffset(); + Element root = doc.getDefaultRootElement(); + int lineCount = root.getElementCount(); + int curLine = root.getElementIndex(t.getOffset()); + int depth = 0; + + // For now, we only check for tags on the current line, for + // simplicity. Tags spanning multiple lines aren't common anyway. + boolean found = false; + boolean forward = true; + t = doc.getTokenListForLine(curLine); + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.isSingleChar('<') && t.getOffset()+1==tokenOffs) { + found = true; + break; + } + else if (t.is(CLOSE_TAG_START) && t.getOffset()+2==tokenOffs) { + found = true; + forward = false; + break; + } + } + t = t.getNextToken(); + } + + if (!found) { + return; + } + + if (forward) { + + t = t.getNextToken().getNextToken(); + + do { + + while (t!=null && t.isPaintable()) { + if (t.getType()==Token.MARKUP_TAG_DELIMITER) { + if (t.is(CLOSE_TAG_START)) { + Token match = t.getNextToken(); + if (match!=null && match.is(lexeme)) { + if (depth>0) { + depth--; + } + else { + try { + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + return; // We're done! + } + } + } + else if (t.isSingleChar('<')) { + t = t.getNextToken(); + if (t!=null && t.is(lexeme)) { + depth++; + } + } + } + t = t==null ? null : t.getNextToken(); + } + + if (++curLine openCloses = new ArrayList<>(); + boolean inPossibleMatch = false; + t = doc.getTokenListForLine(curLine); + final int endBefore = tokenOffs - 2; // Stop before "')) { + inPossibleMatch = false; + } + else if (inPossibleMatch && t.is(TAG_SELF_CLOSE)) { + openCloses.remove(openCloses.size()-1); + inPossibleMatch = false; + } + else if (t.is(CLOSE_TAG_START)) { + Token next = t.getNextToken(); + if (next!=null) { + // Invalid XML might not have a match + if (next.is(lexeme)) { + openCloses.add(new Entry(false, next)); + } + t = next; + } + } + } + t = t.getNextToken(); + } + + for (int i=openCloses.size()-1; i>=0; i--) { + Entry entry = openCloses.get(i); + depth += entry.open ? -1 : 1; + if (depth==-1) { + try { + Token match = entry.t; + int end = match.getOffset() + match.length(); + h.addMarkedOccurrenceHighlight(match.getOffset(), end, p); + end = tokenOffs + match.length(); + h.addMarkedOccurrenceHighlight(tokenOffs, end, p); + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + openCloses.clear(); + return; + } + } + + openCloses.clear(); + if (--curLine>=0) { + t = doc.getTokenListForLine(curLine); + } + + } while (curLine>=0); + + + } + + } + + + /** + * Used internally when searching backward for a matching "open" tag. + */ + private static class Entry { + + private boolean open; + private Token t; + + Entry(boolean open, Token t) { + this.open = open; + this.t = t; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java old mode 100644 new mode 100755 index 444f2ced8..3b07b09e1 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/FocusableTip.java @@ -2,28 +2,15 @@ * 07/29/2009 * * FocusableTip.java - A focusable tool tip, like those in Eclipse. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; import java.awt.Component; import java.awt.ComponentOrientation; +import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; @@ -36,7 +23,10 @@ import java.awt.event.MouseEvent; import java.net.URL; import java.util.ResourceBundle; -import javax.swing.*; + +import javax.swing.JTextArea; +import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; import javax.swing.event.HyperlinkListener; @@ -44,300 +34,353 @@ import org.fife.ui.rsyntaxtextarea.PopupWindowDecorator; + /** - * A focusable tool tip, similar to those found in Eclipse. The user can click in the tip and it becomes a "real," - * resizable window. - * + * A focusable tool tip, similar to those found in Eclipse. The user + * can click in the tip and it becomes a "real," resizable window. + * * @author Robert Futrell * @version 1.0 */ public class FocusableTip { - private JTextArea textArea; - private TipWindow tipWindow; - private URL imageBase; - private TextAreaListener textAreaListener; - private HyperlinkListener hyperlinkListener; - private String lastText; - - /** - * The screen bounds in which the mouse has to stay for the currently displayed tip to stay visible. - */ - private Rectangle tipVisibleBounds; - - /** - * Margin from mouse cursor at which to draw focusable tip. - */ - private static final int X_MARGIN = 18; - - /** - * Margin from mouse cursor at which to draw focusable tip. - */ - private static final int Y_MARGIN = 12; - - private static final String MSG = - "org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip"; - private static final ResourceBundle msg = ResourceBundle.getBundle(MSG); - - public FocusableTip(JTextArea textArea, HyperlinkListener listener) { - setTextArea(textArea); - this.hyperlinkListener = listener; - textAreaListener = new TextAreaListener(); - tipVisibleBounds = new Rectangle(); - } - - /** - * Compute the bounds in which the user can move the mouse without the tip window disappearing. - */ - private void computeTipVisibleBounds() { - // Compute area that the mouse can move in without hiding the - // tip window. Note that Java 1.4 can only detect mouse events - // in Java windows, not globally. - Rectangle r = tipWindow.getBounds(); - Point p = r.getLocation(); - SwingUtilities.convertPointFromScreen(p, textArea); - r.setLocation(p); - tipVisibleBounds.setBounds(r.x, r.y - 15, r.width, r.height + 15 * 2); - } - - private void createAndShowTipWindow(final MouseEvent e, final String text) { - - Window owner = SwingUtilities.getWindowAncestor(textArea); - tipWindow = new TipWindow(owner, this, text); - tipWindow.setHyperlinkListener(hyperlinkListener); - - // Give apps a chance to decorate us with drop shadows, etc. - PopupWindowDecorator decorator = PopupWindowDecorator.get(); - if (decorator != null) { - decorator.decorate(tipWindow); - } - - // TODO: Position tip window better (handle RTL, edges of screen, etc.). - // Wrap in an invokeLater() to work around a JEditorPane issue where it - // doesn't return its proper preferred size until after it is displayed. - // See http://forums.sun.com/thread.jspa?forumID=57&threadID=574810 - // for a discussion. - SwingUtilities.invokeLater( () -> { - - // If a new FocusableTip is requested while another one is - // *focused* and visible, the focused tip (i.e. "tipWindow") - // will be disposed of. If this Runnable is run after the - // dispose(), tipWindow will be null. All of this is done on - // the EDT so no synchronization should be necessary. - if (tipWindow == null) { - return; - } - - tipWindow.fixSize(); - ComponentOrientation o = textArea.getComponentOrientation(); - - Point p = e.getPoint(); - SwingUtilities.convertPointToScreen(p, textArea); - - // Ensure tool tip is in the window bounds. - // Multi-monitor support - make sure the completion window (and - // description window, if applicable) both fit in the same - // window in a multi-monitor environment. To do this, we decide - // which monitor the rectangle "p" is in, and use that one. - Rectangle sb = TipUtil.getScreenBoundsForPoint(p.x, p.y); - // Dimension ss = tipWindow.getToolkit().getScreenSize(); - - // Try putting our stuff "below" the mouse first. - int y = p.y + Y_MARGIN; - if (y + tipWindow.getHeight() >= sb.y + sb.height) { - y = p.y - Y_MARGIN - tipWindow.getHeight(); - } - - // Get x-coordinate of completions. Try to align left edge - // with the mouse first (with a slight margin). - int x = p.x - X_MARGIN; // ltr - if (!o.isLeftToRight()) { - x = p.x - tipWindow.getWidth() + X_MARGIN; - } - if (x < sb.x) { - x = sb.x; - } - else if (x + tipWindow.getWidth() > sb.x + sb.width) { // completions don't fit - x = sb.x + sb.width - tipWindow.getWidth(); - } - - tipWindow.setLocation(x, y); - tipWindow.setVisible(true); - - computeTipVisibleBounds(); // Do after tip is visible - textAreaListener.install(textArea); - lastText = text; - }); - - } - - /** - * Returns the base URL to use when loading images in this focusable tip. - * - * @return The base URL to use. - * @see #setImageBase(URL) - */ - public URL getImageBase() { - return imageBase; - } - - /** - * Returns localized text for the given key. - * - * @param key - * The key into the resource bundle. - * @return The localized text. - */ - static String getString(String key) { - return msg.getString(key); - } - - /** - * Disposes of the focusable tip currently displayed, if any. - */ - public void possiblyDisposeOfTipWindow() { - if (tipWindow != null) { - tipWindow.dispose(); - tipWindow = null; - textAreaListener.uninstall(); - tipVisibleBounds.setBounds(-1, -1, 0, 0); - lastText = null; - textArea.requestFocus(); - } + private JTextArea textArea; + private TipWindow tipWindow; + private URL imageBase; + private TextAreaListener textAreaListener; + private HyperlinkListener hyperlinkListener; + private String lastText; + + private Dimension maxSize; // null to automatic. + + /** + * The screen bounds in which the mouse has to stay for the currently + * displayed tip to stay visible. + */ + private Rectangle tipVisibleBounds; + + /** + * Margin from mouse cursor at which to draw focusable tip. + */ + private static final int X_MARGIN = 18; + + /** + * Margin from mouse cursor at which to draw focusable tip. + */ + private static final int Y_MARGIN = 12; + + private static final ResourceBundle MSG = ResourceBundle.getBundle( + "org.fife.ui.rsyntaxtextarea.focusabletip.FocusableTip"); + + + public FocusableTip(JTextArea textArea, HyperlinkListener listener) { + setTextArea(textArea); + this.hyperlinkListener = listener; + textAreaListener = new TextAreaListener(); + tipVisibleBounds = new Rectangle(); + } + + + /** + * Compute the bounds in which the user can move the mouse without the + * tip window disappearing. + */ + private void computeTipVisibleBounds() { + // Compute area that the mouse can move in without hiding the + // tip window. Note that Java 1.4 can only detect mouse events + // in Java windows, not globally. + Rectangle r = tipWindow.getBounds(); + Point p = r.getLocation(); + SwingUtilities.convertPointFromScreen(p, textArea); + r.setLocation(p); + tipVisibleBounds.setBounds(r.x,r.y-15, r.width,r.height+15*2); + } + + + private void createAndShowTipWindow(final MouseEvent e, final String text) { + + Window owner = SwingUtilities.getWindowAncestor(textArea); + tipWindow = new TipWindow(owner, this, text); + tipWindow.setHyperlinkListener(hyperlinkListener); + + // Give apps a chance to decorate us with drop shadows, etc. + PopupWindowDecorator decorator = PopupWindowDecorator.get(); + if (decorator!=null) { + decorator.decorate(tipWindow); + } + + // TODO: Position tip window better (handle RTL, edges of screen, etc.). + // Wrap in an invokeLater() to work around a JEditorPane issue where it + // doesn't return its proper preferred size until after it is displayed. + // See http://forums.sun.com/thread.jspa?forumID=57&threadID=574810 + // for a discussion. + SwingUtilities.invokeLater(() -> { + + // If a new FocusableTip is requested while another one is + // *focused* and visible, the focused tip (i.e. "tipWindow") + // will be disposed of. If this Runnable is run after the + // dispose(), tipWindow will be null. All of this is done on + // the EDT so no synchronization should be necessary. + if (tipWindow==null) { + return; + } + + tipWindow.fixSize(); + ComponentOrientation o = textArea.getComponentOrientation(); + + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, textArea); + + // Ensure tool tip is in the window bounds. + // Multi-monitor support - make sure the completion window (and + // description window, if applicable) both fit in the same + // window in a multi-monitor environment. To do this, we decide + // which monitor the rectangle "p" is in, and use that one. + Rectangle sb = TipUtil.getScreenBoundsForPoint(p.x, p.y); + //Dimension ss = tipWindow.getToolkit().getScreenSize(); + + // Try putting our stuff "below" the mouse first. + int y = p.y + Y_MARGIN; + if (y+tipWindow.getHeight()>=sb.y+sb.height) { + y = p.y - Y_MARGIN - tipWindow.getHeight(); + } + + // Get x-coordinate of completions. Try to align left edge + // with the mouse first (with a slight margin). + int x = p.x - X_MARGIN; // ltr + if (!o.isLeftToRight()) { + x = p.x - tipWindow.getWidth() + X_MARGIN; + } + if (xsb.x+sb.width) { // completions don't fit + x = sb.x + sb.width - tipWindow.getWidth(); + } + + tipWindow.setLocation(x, y); + tipWindow.setVisible(true); + + computeTipVisibleBounds(); // Do after tip is visible + textAreaListener.install(textArea); + lastText = text; + + }); + + } + + + /** + * Returns the base URL to use when loading images in this focusable tip. + * + * @return The base URL to use. + * @see #setImageBase(URL) + */ + public URL getImageBase() { + return imageBase; + } + + + /** + * The maximum size for unfocused tool tips. + * + * @return The maximum size for unfocused tool tips. A value of + * null will use a default size. + * @see #setMaxSize(Dimension) + */ + public Dimension getMaxSize() { + return maxSize; } - void removeListeners() { - // System.out.println("DEBUG: Removing text area listeners"); - textAreaListener.uninstall(); - } - /** - * Sets the base URL to use when loading images in this focusable tip. - * - * @param url - * The base URL to use. - * @see #getImageBase() - */ - public void setImageBase(URL url) { - imageBase = url; + /** + * Returns localized text for the given key. + * + * @param key The key into the resource bundle. + * @return The localized text. + */ + static String getString(String key) { + return MSG.getString(key); + } + + + /** + * Disposes of the focusable tip currently displayed, if any. + */ + public void possiblyDisposeOfTipWindow() { + if (tipWindow != null) { + tipWindow.dispose(); + tipWindow = null; + textAreaListener.uninstall(); + tipVisibleBounds.setBounds(-1, -1, 0, 0); + lastText = null; + textArea.requestFocus(); + } + } + + + void removeListeners() { + //System.out.println("DEBUG: Removing text area listeners"); + textAreaListener.uninstall(); + } + + + /** + * Sets the base URL to use when loading images in this focusable tip. + * + * @param url The base URL to use. + * @see #getImageBase() + */ + public void setImageBase(URL url) { + imageBase = url; + } + + + /** + * Sets the maximum size for unfocused tool tips. + * + * @param maxSize The new maximum size. A value of null will + * cause a default size to be used. + * @see #getMaxSize() + */ + public void setMaxSize(Dimension maxSize) { + this.maxSize = maxSize; } - private void setTextArea(JTextArea textArea) { - this.textArea = textArea; - // Is okay to do multiple times. - ToolTipManager.sharedInstance().registerComponent(textArea); - } - - public void toolTipRequested(MouseEvent e, String text) { - - if (text == null || text.length() == 0) { - possiblyDisposeOfTipWindow(); - lastText = text; - return; - } - - if (lastText == null || text.length() != lastText.length() - || !text.equals(lastText)) { - possiblyDisposeOfTipWindow(); - createAndShowTipWindow(e, text); - } - - } - - private class TextAreaListener extends MouseInputAdapter implements - CaretListener, ComponentListener, FocusListener, KeyListener { - - public void caretUpdate(CaretEvent e) { - Object source = e.getSource(); - if (source == textArea) { - possiblyDisposeOfTipWindow(); - } - } - - public void componentHidden(ComponentEvent e) { - handleComponentEvent(e); - } - - public void componentMoved(ComponentEvent e) { - handleComponentEvent(e); - } - - public void componentResized(ComponentEvent e) { - handleComponentEvent(e); - } - - public void componentShown(ComponentEvent e) { - handleComponentEvent(e); - } - - public void focusGained(FocusEvent e) { - } - - public void focusLost(FocusEvent e) { - // Only dispose of tip if it wasn't the TipWindow that was clicked - // "c" can be null, at least on OS X, so we must check that before - // calling SwingUtilities.getWindowAncestor() to guard against an - // NPE. - Component c = e.getOppositeComponent(); - boolean tipClicked = (c instanceof TipWindow) || - (c != null && - SwingUtilities.getWindowAncestor(c) instanceof TipWindow); - if (!tipClicked) { - possiblyDisposeOfTipWindow(); - } - } - - private void handleComponentEvent(ComponentEvent e) { - possiblyDisposeOfTipWindow(); - } - - public void install(JTextArea textArea) { - textArea.addCaretListener(this); - textArea.addComponentListener(this); - textArea.addFocusListener(this); - textArea.addKeyListener(this); - textArea.addMouseListener(this); - textArea.addMouseMotionListener(this); - } - - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - possiblyDisposeOfTipWindow(); - } - else if (e.getKeyCode() == KeyEvent.VK_F2) { - if (tipWindow != null && !tipWindow.getFocusableWindowState()) { - tipWindow.actionPerformed(null); - e.consume(); // Don't do bookmarking stuff - } - } - } - - public void keyReleased(KeyEvent e) { - } - - public void keyTyped(KeyEvent e) { - } - - public void mouseExited(MouseEvent e) { - // possiblyDisposeOfTipWindow(); - } - - public void mouseMoved(MouseEvent e) { - if (tipVisibleBounds == null || - !tipVisibleBounds.contains(e.getPoint())) { - possiblyDisposeOfTipWindow(); - } - } - - public void uninstall() { - textArea.removeCaretListener(this); - textArea.removeComponentListener(this); - textArea.removeFocusListener(this); - textArea.removeKeyListener(this); - textArea.removeMouseListener(this); - textArea.removeMouseMotionListener(this); - } - - } -} \ No newline at end of file + private void setTextArea(JTextArea textArea) { + this.textArea = textArea; + // Is okay to do multiple times. + ToolTipManager.sharedInstance().registerComponent(textArea); + } + + + public void toolTipRequested(MouseEvent e, String text) { + + if (text==null || text.length()==0) { + possiblyDisposeOfTipWindow(); + lastText = text; + return; + } + + if (lastText==null || text.length()!=lastText.length() || + !text.equals(lastText)) { + possiblyDisposeOfTipWindow(); + createAndShowTipWindow(e, text); + } + + } + + + /** + * Listens for events in a text area. + */ + private class TextAreaListener extends MouseInputAdapter implements + CaretListener, ComponentListener, FocusListener, KeyListener { + + @Override + public void caretUpdate(CaretEvent e) { + Object source = e.getSource(); + if (source == textArea) { + possiblyDisposeOfTipWindow(); + } + } + + @Override + public void componentHidden(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentMoved(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentResized(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void componentShown(ComponentEvent e) { + handleComponentEvent(e); + } + + @Override + public void focusGained(FocusEvent e) { + } + + @Override + public void focusLost(FocusEvent e) { + // Only dispose of tip if it wasn't the TipWindow that was clicked + // "c" can be null, at least on OS X, so we must check that before + // calling SwingUtilities.getWindowAncestor() to guard against an + // NPE. + Component c = e.getOppositeComponent(); + boolean tipClicked = (c instanceof TipWindow) || + (c!=null && + SwingUtilities.getWindowAncestor(c) instanceof TipWindow); + if (!tipClicked) { + possiblyDisposeOfTipWindow(); + } + } + + private void handleComponentEvent(ComponentEvent e) { + possiblyDisposeOfTipWindow(); + } + + public void install(JTextArea textArea) { + textArea.addCaretListener(this); + textArea.addComponentListener(this); + textArea.addFocusListener(this); + textArea.addKeyListener(this); + textArea.addMouseListener(this); + textArea.addMouseMotionListener(this); + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { + possiblyDisposeOfTipWindow(); + } + else if (e.getKeyCode()==KeyEvent.VK_F2) { + if (tipWindow!=null && !tipWindow.getFocusableWindowState()) { + tipWindow.actionPerformed(null); + e.consume(); // Don't do bookmarking stuff + } + } + } + + @Override + public void keyReleased(KeyEvent e) { + } + + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + // possiblyDisposeOfTipWindow(); + } + + @Override + public void mouseMoved(MouseEvent e) { + if (tipVisibleBounds==null || + !tipVisibleBounds.contains(e.getPoint())) { + possiblyDisposeOfTipWindow(); + } + } + + public void uninstall() { + textArea.removeCaretListener(this); + textArea.removeComponentListener(this); + textArea.removeFocusListener(this); + textArea.removeKeyListener(this); + textArea.removeMouseListener(this); + textArea.removeMouseMotionListener(this); + } + + } + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java old mode 100644 new mode 100755 index c1e693d6f..27adbff2b --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/SizeGrip.java @@ -3,23 +3,9 @@ * * SizeGrip.java - A size grip component that sits at the bottom of the window, * allowing the user to easily resize that window. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; @@ -36,220 +22,237 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; + import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.MouseInputAdapter; + /** - * A component that allows its parent window to be resizable, similar to the size grip seen on status bars. - * + * A component that allows its parent window to be resizable, similar to the + * size grip seen on status bars. + * * @author Robert Futrell * @version 1.0 */ +@SuppressWarnings({ "checkstyle:magicnumber" }) class SizeGrip extends JPanel { - /** - * The size grip to use if we're on OS X. - */ - private Image osxSizeGrip; - - public SizeGrip() { - MouseHandler adapter = new MouseHandler(); - addMouseListener(adapter); - addMouseMotionListener(adapter); - setPreferredSize(new Dimension(16, 16)); - } - - /** - * Overridden to ensure that the cursor for this component is appropriate for the orientation. - * - * @param o - * The new orientation. - */ - public void applyComponentOrientation(ComponentOrientation o) { - possiblyFixCursor(o.isLeftToRight()); - super.applyComponentOrientation(o); - } - - /** - * Creates and returns the OS X size grip image. - * - * @return The OS X size grip. - */ - private Image createOSXSizeGrip() { - ClassLoader cl = getClass().getClassLoader(); - URL url = cl.getResource("org/fife/ui/autocomplete/osx_sizegrip.png"); - if (url == null) { - // We're not running in a jar - we may be debugging in Eclipse, - // for example - File f = new File("../AutoComplete/src/org/fife/ui/autocomplete/osx_sizegrip.png"); - if (f.isFile()) { - try { - url = f.toURI().toURL(); - } catch (MalformedURLException mue) { // Never happens - mue.printStackTrace(); - return null; - } - } - else { - return null; // Can't find resource or image file - } - } - Image image = null; - try { - image = ImageIO.read(url); - } catch (IOException ioe) { // Never happens - ioe.printStackTrace(); - } - return image; - } - - /** - * Paints this panel. - * - * @param g - * The graphics context. - */ - protected void paintComponent(Graphics g) { - - super.paintComponent(g); - - Dimension dim = getSize(); - Color c1 = UIManager.getColor("Label.disabledShadow"); - Color c2 = UIManager.getColor("Label.disabledForeground"); - - if (osxSizeGrip != null) { - g.drawImage(osxSizeGrip, dim.width - 16, dim.height - 16, null); - return; - } - - ComponentOrientation orientation = getComponentOrientation(); - - if (orientation.isLeftToRight()) { - int width = dim.width -= 3; - int height = dim.height -= 3; - g.setColor(c1); - g.fillRect(width - 9, height - 1, 3, 3); - g.fillRect(width - 5, height - 1, 3, 3); - g.fillRect(width - 1, height - 1, 3, 3); - g.fillRect(width - 5, height - 5, 3, 3); - g.fillRect(width - 1, height - 5, 3, 3); - g.fillRect(width - 1, height - 9, 3, 3); - g.setColor(c2); - g.fillRect(width - 9, height - 1, 2, 2); - g.fillRect(width - 5, height - 1, 2, 2); - g.fillRect(width - 1, height - 1, 2, 2); - g.fillRect(width - 5, height - 5, 2, 2); - g.fillRect(width - 1, height - 5, 2, 2); - g.fillRect(width - 1, height - 9, 2, 2); - } - else { - int height = dim.height -= 3; - g.setColor(c1); - g.fillRect(10, height - 1, 3, 3); - g.fillRect(6, height - 1, 3, 3); - g.fillRect(2, height - 1, 3, 3); - g.fillRect(6, height - 5, 3, 3); - g.fillRect(2, height - 5, 3, 3); - g.fillRect(2, height - 9, 3, 3); - g.setColor(c2); - g.fillRect(10, height - 1, 2, 2); - g.fillRect(6, height - 1, 2, 2); - g.fillRect(2, height - 1, 2, 2); - g.fillRect(6, height - 5, 2, 2); - g.fillRect(2, height - 5, 2, 2); - g.fillRect(2, height - 9, 2, 2); - } - - } - - /** - * Ensures that the cursor for this component is appropriate for the orientation. - * - * @param ltr - * Whether the current component orientation is LTR. - */ - protected void possiblyFixCursor(boolean ltr) { - int cursor = Cursor.NE_RESIZE_CURSOR; - if (ltr) { - cursor = Cursor.NW_RESIZE_CURSOR; - } - if (cursor != getCursor().getType()) { - setCursor(Cursor.getPredefinedCursor(cursor)); - } - } - - public void updateUI() { - super.updateUI(); - // TODO: Key off of Aqua LaF, not just OS X, as this size grip looks - // bad on other LaFs on Mac such as Nimbus. - if (System.getProperty("os.name").indexOf("OS X") > -1) { - if (osxSizeGrip == null) { - osxSizeGrip = createOSXSizeGrip(); - } - } - else { // Clear memory in case of runtime LaF change. - osxSizeGrip = null; - } - - } - - /** - * Listens for mouse events on this panel and resizes the parent window appropriately. - * - * @author Robert Futrell - * @version 1.0 - */ - /* - * NOTE: We use SwingUtilities.convertPointToScreen() instead of just using the locations relative to the corner - * component because the latter proved buggy - stretch the window too wide and some kind of arithmetic error started - * happening somewhere - our window would grow way too large. - */ - private class MouseHandler extends MouseInputAdapter { - - private Point origPos; - - public void mouseDragged(MouseEvent e) { - Point newPos = e.getPoint(); - SwingUtilities.convertPointToScreen(newPos, SizeGrip.this); - int xDelta = newPos.x - origPos.x; - int yDelta = newPos.y - origPos.y; - Window wind = SwingUtilities.getWindowAncestor(SizeGrip.this); - if (wind != null) { // Should always be true - if (getComponentOrientation().isLeftToRight()) { - int w = wind.getWidth(); - if (newPos.x >= wind.getX()) { - w += xDelta; - } - int h = wind.getHeight(); - if (newPos.y >= wind.getY()) { - h += yDelta; - } - wind.setSize(w, h); - } - else { // RTL - int newW = Math.max(1, wind.getWidth() - xDelta); - int newH = Math.max(1, wind.getHeight() + yDelta); - wind.setBounds(newPos.x, wind.getY(), newW, newH); - } - // invalidate()/validate() needed pre-1.6. - wind.invalidate(); - wind.validate(); - } - origPos.setLocation(newPos); - } - - public void mousePressed(MouseEvent e) { - origPos = e.getPoint(); - SwingUtilities.convertPointToScreen(origPos, SizeGrip.this); - } - - public void mouseReleased(MouseEvent e) { - origPos = null; - } - - } - -} \ No newline at end of file + /** + * The size grip to use if we're on OS X. + */ + private transient Image osxSizeGrip; + + + SizeGrip() { + MouseHandler adapter = new MouseHandler(); + addMouseListener(adapter); + addMouseMotionListener(adapter); + setPreferredSize(new Dimension(16, 16)); + } + + + /** + * Overridden to ensure that the cursor for this component is appropriate + * for the orientation. + * + * @param o The new orientation. + */ + @Override + public void applyComponentOrientation(ComponentOrientation o) { + possiblyFixCursor(o.isLeftToRight()); + super.applyComponentOrientation(o); + } + + + /** + * Creates and returns the OS X size grip image. + * + * @return The OS X size grip. + */ + private Image createOSXSizeGrip() { + ClassLoader cl = getClass().getClassLoader(); + URL url = cl.getResource("org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); + if (url==null) { + // We're not running in a jar - we may be debugging in Eclipse, + // for example + File f = new File("../RSyntaxTextArea/src/org/fife/ui/rsyntaxtextarea/focusabletip/osx_sizegrip.png"); + if (f.isFile()) { + try { + url = f.toURI().toURL(); + } catch (MalformedURLException mue) { // Never happens + mue.printStackTrace(); + return null; + } + } + else { + return null; // Can't find resource or image file + } + } + Image image = null; + try { + image = ImageIO.read(url); + } catch (IOException ioe) { // Never happens + ioe.printStackTrace(); + } + return image; + } + + + /** + * Paints this panel. + * + * @param g The graphics context. + */ + @Override + protected void paintComponent(Graphics g) { + + super.paintComponent(g); + + Dimension dim = getSize(); + + if (osxSizeGrip!=null) { + g.drawImage(osxSizeGrip, dim.width-16, dim.height-16, null); + return; + } + + Color c1 = UIManager.getColor("Label.disabledShadow"); + Color c2 = UIManager.getColor("Label.disabledForeground"); + ComponentOrientation orientation = getComponentOrientation(); + + if (orientation.isLeftToRight()) { + int width = dim.width -= 3; + int height = dim.height -= 3; + g.setColor(c1); + g.fillRect(width-9,height-1, 3,3); + g.fillRect(width-5,height-1, 3,3); + g.fillRect(width-1,height-1, 3,3); + g.fillRect(width-5,height-5, 3,3); + g.fillRect(width-1,height-5, 3,3); + g.fillRect(width-1,height-9, 3,3); + g.setColor(c2); + g.fillRect(width-9,height-1, 2,2); + g.fillRect(width-5,height-1, 2,2); + g.fillRect(width-1,height-1, 2,2); + g.fillRect(width-5,height-5, 2,2); + g.fillRect(width-1,height-5, 2,2); + g.fillRect(width-1,height-9, 2,2); + } + else { + int height = dim.height -= 3; + g.setColor(c1); + g.fillRect(10,height-1, 3,3); + g.fillRect(6,height-1, 3,3); + g.fillRect(2,height-1, 3,3); + g.fillRect(6,height-5, 3,3); + g.fillRect(2,height-5, 3,3); + g.fillRect(2,height-9, 3,3); + g.setColor(c2); + g.fillRect(10,height-1, 2,2); + g.fillRect(6,height-1, 2,2); + g.fillRect(2,height-1, 2,2); + g.fillRect(6,height-5, 2,2); + g.fillRect(2,height-5, 2,2); + g.fillRect(2,height-9, 2,2); + } + + } + + + /** + * Ensures that the cursor for this component is appropriate for the + * orientation. + * + * @param ltr Whether the current component orientation is LTR. + */ + protected void possiblyFixCursor(boolean ltr) { + int cursor = Cursor.NE_RESIZE_CURSOR; + if (ltr) { + cursor = Cursor.NW_RESIZE_CURSOR; + } + if (cursor!=getCursor().getType()) { + setCursor(Cursor.getPredefinedCursor(cursor)); + } + } + + + @Override + public void updateUI() { + super.updateUI(); + // TODO: Key off of Aqua LaF, not just OS X, as this size grip looks + // bad on other LaFs on Mac such as Nimbus. + if (System.getProperty("os.name").contains("OS X")) { + if (osxSizeGrip==null) { + osxSizeGrip = createOSXSizeGrip(); + } + } + else { // Clear memory in case of runtime LaF change. + osxSizeGrip = null; + } + + } + + + /** + * Listens for mouse events on this panel and resizes the parent window + * appropriately. + */ + private class MouseHandler extends MouseInputAdapter { + + /* + * NOTE: We use SwingUtilities.convertPointToScreen() instead of just using + * the locations relative to the corner component because the latter proved + * buggy - stretch the window too wide and some kind of arithmetic error + * started happening somewhere - our window would grow way too large. + */ + + private Point origPos; + + @Override + public void mouseDragged(MouseEvent e) { + Point newPos = e.getPoint(); + SwingUtilities.convertPointToScreen(newPos, SizeGrip.this); + int xDelta = newPos.x - origPos.x; + int yDelta = newPos.y - origPos.y; + Window wind = SwingUtilities.getWindowAncestor(SizeGrip.this); + if (wind!=null) { // Should always be true + if (getComponentOrientation().isLeftToRight()) { + int w = wind.getWidth(); + if (newPos.x>=wind.getX()) { + w += xDelta; + } + int h = wind.getHeight(); + if (newPos.y>=wind.getY()) { + h += yDelta; + } + wind.setSize(w,h); + } + else { // RTL + int newW = Math.max(1, wind.getWidth()-xDelta); + int newH = Math.max(1, wind.getHeight()+yDelta); + wind.setBounds(newPos.x, wind.getY(), newW, newH); + } + // invalidate()/validate() needed pre-1.6. + wind.invalidate(); + wind.validate(); + } + origPos.setLocation(newPos); + } + + @Override + public void mousePressed(MouseEvent e) { + origPos = e.getPoint(); + SwingUtilities.convertPointToScreen(origPos, SizeGrip.this); + } + + @Override + public void mouseReleased(MouseEvent e) { + origPos = null; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java old mode 100644 new mode 100755 index 9e722a8b3..029af3d7d --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipUtil.java @@ -2,23 +2,9 @@ * 08/13/2009 * * TipUtil.java - Utility methods for homemade tool tips. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; @@ -29,115 +15,202 @@ import java.awt.GraphicsEnvironment; import java.awt.Rectangle; import java.awt.SystemColor; + import javax.swing.BorderFactory; import javax.swing.JEditorPane; import javax.swing.UIManager; +import javax.swing.border.Border; import javax.swing.plaf.ColorUIResource; import javax.swing.text.html.HTMLDocument; +import org.fife.ui.rsyntaxtextarea.HtmlUtil; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; + + /** * Static utility methods for focusable tips. - * + * * @author Robert Futrell * @version 1.0 */ -class TipUtil { - - private TipUtil() { - } - - /** - * Returns the screen coordinates for the monitor that contains the specified point. This is useful for setups with - * multiple monitors, to ensure that popup windows are positioned properly. - * - * @param x - * The x-coordinate, in screen coordinates. - * @param y - * The y-coordinate, in screen coordinates. - * @return The bounds of the monitor that contains the specified point. - */ - public static Rectangle getScreenBoundsForPoint(int x, int y) { - GraphicsEnvironment env = GraphicsEnvironment. - getLocalGraphicsEnvironment(); - GraphicsDevice[] devices = env.getScreenDevices(); - for (GraphicsDevice device : devices) { - GraphicsConfiguration[] configs = device.getConfigurations(); - for (GraphicsConfiguration config : configs) { - Rectangle gcBounds = config.getBounds(); - if (gcBounds.contains(x, y)) { - return gcBounds; - } - } - } - // If point is outside all monitors, default to default monitor (?) - return env.getMaximumWindowBounds(); - } - - /** - * Returns the default background color to use for tool tip windows. - * - * @return The default background color. - */ - public static Color getToolTipBackground() { - - Color c = UIManager.getColor("ToolTip.background"); - - // Tooltip.background is wrong color on Nimbus (!) - if (c == null || UIManager.getLookAndFeel().getName().equals("Nimbus")) { - c = UIManager.getColor("info"); // Used by Nimbus (and others) - if (c == null) { - c = SystemColor.info; // System default - } - } - - // Workaround for a bug (?) with Nimbus - calling JLabel.setBackground() - // with a ColorUIResource does nothing, must be a normal Color - if (c instanceof ColorUIResource) { - c = new Color(c.getRGB()); - } - - return c; - - } - - /** - * Tweaks a JEditorPane so it can be used to render the content in a focusable pseudo-tool tip. It is - * assumed that the editor pane is using an HTMLDocument. - * - * @param textArea - * The editor pane to tweak. - */ - public static void tweakTipEditorPane(JEditorPane textArea) { - - // Jump through a few hoops to get things looking nice in Nimbus - if (UIManager.getLookAndFeel().getName().equals("Nimbus")) { - Color selBG = textArea.getSelectionColor(); - Color selFG = textArea.getSelectedTextColor(); - textArea.setUI(new javax.swing.plaf.basic.BasicEditorPaneUI()); - textArea.setSelectedTextColor(selFG); - textArea.setSelectionColor(selBG); - } - - textArea.setEditable(false); // Required for links to work! - textArea.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - - // Make selection visible even though we are not (initially) focusable. - textArea.getCaret().setSelectionVisible(true); - - // Make it use the "tool tip" background color. - textArea.setBackground(TipUtil.getToolTipBackground()); - - // Force JEditorPane to use a certain font even in HTML. - // All standard LookAndFeels, even Nimbus (!), define Label.font. - Font font = UIManager.getFont("Label.font"); - if (font == null) { // Try to make a sensible default - font = new Font("SansSerif", Font.PLAIN, 12); - } - HTMLDocument doc = (HTMLDocument) textArea.getDocument(); - doc.getStyleSheet().addRule( - "body { font-family: " + font.getFamily() + "; font-size: " - + font.getSize() + "pt; }"); - - } - -} \ No newline at end of file +public final class TipUtil { + + + private TipUtil() { + } + + + /** + * Returns the screen coordinates for the monitor that contains the + * specified point. This is useful for setups with multiple monitors, + * to ensure that popup windows are positioned properly. + * + * @param x The x-coordinate, in screen coordinates. + * @param y The y-coordinate, in screen coordinates. + * @return The bounds of the monitor that contains the specified point. + */ + public static Rectangle getScreenBoundsForPoint(int x, int y) { + GraphicsEnvironment env = GraphicsEnvironment. + getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = env.getScreenDevices(); + for (GraphicsDevice device : devices) { + GraphicsConfiguration[] configs = device.getConfigurations(); + for (GraphicsConfiguration config : configs) { + Rectangle gcBounds = config.getBounds(); + if (gcBounds.contains(x, y)) { + return gcBounds; + } + } + } + // If point is outside all monitors, default to default monitor (?) + return env.getMaximumWindowBounds(); + } + + + /** + * Returns the default background color to use for tool tip windows. + * + * @return The default background color. + */ + public static Color getToolTipBackground() { + + Color c = UIManager.getColor("ToolTip.background"); + + // Tooltip.background is wrong color on Nimbus (!) + boolean isNimbus = isNimbusLookAndFeel(); + if (c==null || isNimbus) { + c = UIManager.getColor("info"); // Used by Nimbus (and others) + if (c==null || (isNimbus && isDerivedColor(c))) { + c = SystemColor.info; // System default + } + } + + // Workaround for a bug (?) with Nimbus - calling JLabel.setBackground() + // with a ColorUIResource does nothing, must be a normal Color + if (c instanceof ColorUIResource) { + c = new Color(c.getRGB()); + } + + return c; + + } + + + /** + * Returns the border used by tool tips in this look and feel. + * + * @return The border. + */ + public static Border getToolTipBorder() { + + Border border = UIManager.getBorder("ToolTip.border"); + + if (border==null || isNimbusLookAndFeel()) { + border = UIManager.getBorder("nimbusBorder"); + if (border==null) { + border = BorderFactory.createLineBorder(SystemColor.controlDkShadow); + } + } + + return border; + + } + + + /** + * Returns whether a color is a Nimbus DerivedColor, which is troublesome + * in that it doesn't use its RGB values (uses HSB instead?) and so + * querying them is useless. + * + * @param c The color to check. + * @return Whether it is a DerivedColor + */ + private static boolean isDerivedColor(Color c) { + return c!=null && c.getClass().getName().endsWith(".DerivedColor"); + } + + + /** + * Returns whether the Nimbus Look and Feel is installed. + * + * @return Whether the current LAF is Nimbus. + */ + private static boolean isNimbusLookAndFeel() { + return UIManager.getLookAndFeel().getName().equals("Nimbus"); + } + + + /** + * Tweaks a JEditorPane so it can be used to render the + * content in a focusable pseudo-tool tip. It is assumed that the editor + * pane is using an HTMLDocument. + * + * @param textArea The editor pane to tweak. + */ + public static void tweakTipEditorPane(JEditorPane textArea) { + + // Jump through a few hoops to get things looking nice in Nimbus + boolean isNimbus = isNimbusLookAndFeel(); + if (isNimbus) { + Color selBG = textArea.getSelectionColor(); + Color selFG = textArea.getSelectedTextColor(); + textArea.setUI(new javax.swing.plaf.basic.BasicEditorPaneUI()); + textArea.setSelectedTextColor(selFG); + textArea.setSelectionColor(selBG); + } + + textArea.setEditable(false); // Required for links to work! + textArea.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); + + // Make selection visible even though we are not (initially) focusable. + textArea.getCaret().setSelectionVisible(true); + + // Set the foreground color. Important because when rendering HTML, + // default foreground becomes black, which may not match all LAF's + // (e.g. Substance). + Color fg = UIManager.getColor("Label.foreground"); + if (fg==null || (isNimbus && isDerivedColor(fg))) { + fg = SystemColor.textText; + } + textArea.setForeground(fg); + + // Make it use the "tool tip" background color. + textArea.setBackground(TipUtil.getToolTipBackground()); + + // Force JEditorPane to use a certain font even in HTML. + // All standard LookAndFeels, even Nimbus (!), define Label.font. + Font font = UIManager.getFont("Label.font"); + if (font == null) { // Try to make a sensible default + font = new Font("SansSerif", Font.PLAIN, 12); + } + HTMLDocument doc = (HTMLDocument) textArea.getDocument(); + setFont(doc, font, fg); + + // Always add link foreground rule. Unfortunately these CSS rules + // stack each time the LaF is changed (how can we overwrite them + // without clearing out the important "standard" ones?). + Color linkFG = RSyntaxUtilities.getHyperlinkForeground(); + doc.getStyleSheet().addRule( + "a { color: " + HtmlUtil.getHexString(linkFG) + "; }"); + + } + + + /** + * Sets the default font for an HTML document (e.g., in a tool tip + * displaying HTML). This is here because when rendering HTML, + * {@code setFont()} is not honored. + * + * @param doc The document to modify. + * @param font The font to use. + * @param fg The default foreground color. + */ + public static void setFont(HTMLDocument doc, Font font, Color fg) { + doc.getStyleSheet().addRule( + "body { font-family: " + font.getFamily() + + "; font-size: " + font.getSize() + "pt" + + "; color: " + HtmlUtil.getHexString(fg) + "; }"); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java old mode 100644 new mode 100755 index fadef4d2d..3728f2766 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/focusabletip/TipWindow.java @@ -2,23 +2,9 @@ * 07/29/2009 * * TipWindow.java - The actual window component representing the tool tip. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.focusabletip; @@ -39,6 +25,7 @@ import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; + import javax.swing.BorderFactory; import javax.swing.JEditorPane; import javax.swing.JLabel; @@ -49,272 +36,313 @@ import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.border.Border; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.event.MouseInputAdapter; import javax.swing.text.BadLocationException; import javax.swing.text.html.HTMLDocument; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; + + /** * The actual tool tip component. - * + * * @author Robert Futrell * @version 1.0 */ class TipWindow extends JWindow implements ActionListener { - private FocusableTip ft; - private JEditorPane textArea; - private String text; - private TipListener tipListener; - private HyperlinkListener userHyperlinkListener; - - private static TipWindow visibleInstance; - - /** - * Constructor. - * - * @param owner - * The parent window. - * @param msg - * The text of the tool tip. This can be HTML. - */ - public TipWindow(Window owner, FocusableTip ft, String msg) { - - super(owner); - this.ft = ft; - this.text = msg; - tipListener = new TipListener(); - - JPanel cp = new JPanel(new BorderLayout()); - cp.setBorder(BorderFactory.createCompoundBorder(BorderFactory - .createLineBorder(Color.BLACK), BorderFactory - .createEmptyBorder())); - cp.setBackground(TipUtil.getToolTipBackground()); - textArea = new JEditorPane("text/html", msg); - TipUtil.tweakTipEditorPane(textArea); - if (ft.getImageBase() != null) { // Base URL for images - ((HTMLDocument) textArea.getDocument()).setBase(ft.getImageBase()); - } - textArea.addMouseListener(tipListener); - textArea.addHyperlinkListener( (HyperlinkEvent e) -> { - if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - TipWindow.this.ft.possiblyDisposeOfTipWindow(); - } - }); - cp.add(textArea); - - setFocusableWindowState(false); - setContentPane(cp); - setBottomPanel(); // Must do after setContentPane() - pack(); - - // InputMap/ActionMap combo doesn't work for JWindows (even when - // using the JWindow's JRootPane), so we'll resort to KeyListener - KeyAdapter ka = new KeyAdapter() { - public void keyPressed(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { - TipWindow.this.ft.possiblyDisposeOfTipWindow(); - } - } - }; - addKeyListener(ka); - textArea.addKeyListener(ka); - - // Ensure only 1 TipWindow is ever visible. If the caller does what - // they're supposed to and only creates these on the EDT, the - // synchronization isn't necessary, but we'll be extra safe. - synchronized (TipWindow.class) { - if (visibleInstance != null) { - visibleInstance.dispose(); - } - visibleInstance = this; - } - - } - - public void actionPerformed(ActionEvent e) { - - if (!getFocusableWindowState()) { - setFocusableWindowState(true); - setBottomPanel(); - textArea.removeMouseListener(tipListener); - pack(); - addWindowFocusListener(new WindowAdapter() { - public void windowLostFocus(WindowEvent e) { - ft.possiblyDisposeOfTipWindow(); - } - }); - ft.removeListeners(); - if (e == null) { // Didn't get here via our mouseover timer - requestFocus(); - } - } - - } - - /** - * Disposes of this window. - */ - public void dispose() { - // System.out.println("[DEBUG]: Disposing..."); - Container cp = getContentPane(); - for (int i = 0; i < cp.getComponentCount(); i++) { - // Okay if listener is already removed - cp.getComponent(i).removeMouseListener(tipListener); - } - ft.removeListeners(); - super.dispose(); - } - - /** - * Workaround for JEditorPane not returning its proper preferred size when rendering HTML until after layout already - * done. See http://forums.sun.com/thread.jspa?forumID=57&threadID=574810 for a discussion. - */ - void fixSize() { - - Dimension d = textArea.getPreferredSize(); - Rectangle r = null; - try { - - r = textArea.modelToView(textArea.getDocument().getLength() - 1); - d.height = r.y + r.height; - - // Ensure the text area doesn't start out too tall or wide. - d = textArea.getPreferredSize(); - d.width = Math.min(d.width + 25, 320); - d.height = Math.min(d.height, 150); - - textArea.setPreferredSize(d); - - } catch (BadLocationException ble) { // Never happens - ble.printStackTrace(); - } - - pack(); // Must re-pack to calculate proper size. - - } - - public String getText() { - return text; - } - - private void setBottomPanel() { - - final JPanel panel = new JPanel(new BorderLayout()); - panel.add(new JSeparator(), BorderLayout.NORTH); - - boolean focusable = getFocusableWindowState(); - if (focusable) { - SizeGrip sg = new SizeGrip(); - sg.applyComponentOrientation(sg.getComponentOrientation()); // Workaround - panel.add(sg, BorderLayout.LINE_END); - MouseInputAdapter adapter = new MouseInputAdapter() { - private Point lastPoint; - - public void mouseDragged(MouseEvent e) { - Point p = e.getPoint(); - SwingUtilities.convertPointToScreen(p, panel); - if (lastPoint == null) { - lastPoint = p; - } - else { - int dx = p.x - lastPoint.x; - int dy = p.y - lastPoint.y; - setLocation(getX() + dx, getY() + dy); - lastPoint = p; - } - } - - public void mousePressed(MouseEvent e) { - lastPoint = e.getPoint(); - SwingUtilities.convertPointToScreen(lastPoint, panel); - } - }; - panel.addMouseListener(adapter); - panel.addMouseMotionListener(adapter); - // Don't add tipListener to the panel or SizeGrip - } - else { - panel.setOpaque(false); - JLabel label = new JLabel(FocusableTip.getString("FocusHotkey")); - Color fg = UIManager.getColor("Label.disabledForeground"); - Font font = textArea.getFont(); - font = font.deriveFont(font.getSize2D() - 1.0f); - label.setFont(font); - if (fg == null) { // Non BasicLookAndFeel-derived Looks - fg = Color.GRAY; - } - label.setOpaque(true); - Color bg = TipUtil.getToolTipBackground(); - label.setBackground(bg); - label.setForeground(fg); - label.setHorizontalAlignment(SwingConstants.TRAILING); - label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); - panel.add(label); - panel.addMouseListener(tipListener); - } - - // Replace the previous SOUTH Component with the new one. - Container cp = getContentPane(); - if (cp.getComponentCount() == 2) { // Skip first time through - Component comp = cp.getComponent(0); - cp.remove(0); - JScrollPane sp = new JScrollPane(comp); - sp.setViewportBorder(BorderFactory.createEmptyBorder()); - sp.setBackground(textArea.getBackground()); - sp.getViewport().setBackground(textArea.getBackground()); - cp.add(sp); - // What was component 1 is now 0. - cp.getComponent(0).removeMouseListener(tipListener); - cp.remove(0); - } - - cp.add(panel, BorderLayout.SOUTH); - - } - - /** - * Sets the listener for hyperlink events in this tip window. - * - * @param listener - * The new listener. The old listener (if any) is removed. A value of null means - * "no listener." - */ - public void setHyperlinkListener(HyperlinkListener listener) { - // We've added a separate listener, so remove only the user's. - if (userHyperlinkListener != null) { - textArea.removeHyperlinkListener(userHyperlinkListener); - } - userHyperlinkListener = listener; - if (userHyperlinkListener != null) { - textArea.addHyperlinkListener(userHyperlinkListener); - } - } - - /** - * Listens for events in this window. - */ - private class TipListener extends MouseAdapter { - - public TipListener() { - } - - public void mousePressed(MouseEvent e) { - actionPerformed(null); // Manually create "real" window - } - - public void mouseExited(MouseEvent e) { - // Since we registered this listener on the child components of - // the JWindow, not the JWindow iteself, we have to be careful. - Component source = (Component) e.getSource(); - Point p = e.getPoint(); - SwingUtilities.convertPointToScreen(p, source); - if (!TipWindow.this.getBounds().contains(p)) { - ft.possiblyDisposeOfTipWindow(); - } - } - - } - -} \ No newline at end of file + private FocusableTip ft; + private JEditorPane textArea; + private String text; + private transient TipListener tipListener; + private transient HyperlinkListener userHyperlinkListener; + + private static TipWindow visibleInstance; + + + /** + * Constructor. + * + * @param owner The parent window. + * @param msg The text of the tool tip. This can be HTML. + */ + TipWindow(Window owner, FocusableTip ft, String msg) { + + super(owner); + this.ft = ft; + // Render plain text tool tips correctly. + if (msg!=null && msg.length()>=6 && + !msg.substring(0,6).toLowerCase().equals("")) { + msg = "" + RSyntaxUtilities.escapeForHtml(msg, "
    ", false); + } + this.text = msg; + tipListener = new TipListener(); + + JPanel cp = new JPanel(new BorderLayout()); + cp.setBorder(TipUtil.getToolTipBorder()); + cp.setBackground(TipUtil.getToolTipBackground()); + textArea = new JEditorPane("text/html", text); + TipUtil.tweakTipEditorPane(textArea); + if (ft.getImageBase()!=null) { // Base URL for images + ((HTMLDocument)textArea.getDocument()).setBase(ft.getImageBase()); + } + textArea.addMouseListener(tipListener); + textArea.addHyperlinkListener(e -> { + if (e.getEventType()==HyperlinkEvent.EventType.ACTIVATED) { + TipWindow.this.ft.possiblyDisposeOfTipWindow(); + } + }); + cp.add(textArea); + + setFocusableWindowState(false); + setContentPane(cp); + setBottomPanel(); // Must do after setContentPane() + pack(); + + // InputMap/ActionMap combo doesn't work for JWindows (even when + // using the JWindow's JRootPane), so we'll resort to KeyListener + KeyAdapter ka = new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode()==KeyEvent.VK_ESCAPE) { + TipWindow.this.ft.possiblyDisposeOfTipWindow(); + } + } + }; + addKeyListener(ka); + textArea.addKeyListener(ka); + + // Ensure only 1 TipWindow is ever visible. If the caller does what + // they're supposed to and only creates these on the EDT, the + // synchronization isn't necessary, but we'll be extra safe. + synchronized (TipWindow.class) { + if (visibleInstance!=null) { + visibleInstance.dispose(); + } + visibleInstance = this; + } + + } + + + @Override + public void actionPerformed(ActionEvent e) { + + if (!getFocusableWindowState()) { + setFocusableWindowState(true); + setBottomPanel(); + textArea.removeMouseListener(tipListener); + pack(); + addWindowFocusListener(new WindowAdapter() { + @Override + public void windowLostFocus(WindowEvent e) { + ft.possiblyDisposeOfTipWindow(); + } + }); + ft.removeListeners(); + if (e==null) { // Didn't get here via our mouseover timer + requestFocus(); + } + } + + } + + + /** + * Disposes of this window. + */ + @Override + public void dispose() { + //System.out.println("[DEBUG]: Disposing..."); + Container cp = getContentPane(); + for (int i=0; id.height) { + d.height = r.y + r.height + 5; + if(ft.getMaxSize() != null) { + d.height = Math.min(d.height, maxWindowH); + } + textArea.setPreferredSize(d); + } + + } catch (BadLocationException ble) { // Never happens + ble.printStackTrace(); + } + + pack(); // Must re-pack to calculate proper size. + + } + + + public String getText() { + return text; + } + + + private void setBottomPanel() { + + final JPanel panel = new JPanel(new BorderLayout()); + panel.add(new JSeparator(), BorderLayout.NORTH); + + boolean focusable = getFocusableWindowState(); + if (focusable) { + SizeGrip sg = new SizeGrip(); + sg.applyComponentOrientation(sg.getComponentOrientation()); // Workaround + panel.add(sg, BorderLayout.LINE_END); + MouseInputAdapter adapter = new MouseInputAdapter() { + private Point lastPoint; + @Override + public void mouseDragged(MouseEvent e) { + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, panel); + if (lastPoint==null) { + lastPoint = p; + } + else { + int dx = p.x - lastPoint.x; + int dy = p.y - lastPoint.y; + setLocation(getX()+dx, getY()+dy); + lastPoint = p; + } + } + @Override + public void mousePressed(MouseEvent e) { + lastPoint = e.getPoint(); + SwingUtilities.convertPointToScreen(lastPoint, panel); + } + }; + panel.addMouseListener(adapter); + panel.addMouseMotionListener(adapter); + // Don't add tipListener to the panel or SizeGrip + } + else { + panel.setOpaque(false); + JLabel label = new JLabel(FocusableTip.getString("FocusHotkey")); + Color fg = UIManager.getColor("Label.disabledForeground"); + Font font = textArea.getFont(); + font = font.deriveFont(font.getSize2D() - 1.0f); + label.setFont(font); + if (fg==null) { // Non BasicLookAndFeel-derived Looks + fg = Color.GRAY; + } + label.setOpaque(true); + Color bg = TipUtil.getToolTipBackground(); + label.setBackground(bg); + label.setForeground(fg); + label.setHorizontalAlignment(SwingConstants.TRAILING); + label.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + panel.add(label); + panel.addMouseListener(tipListener); + } + + // Replace the previous SOUTH Component with the new one. + Container cp = getContentPane(); + if (cp.getComponentCount()==2) { // Skip first time through + Component comp = cp.getComponent(0); + cp.remove(0); + JScrollPane sp = new JScrollPane(comp); + Border emptyBorder = BorderFactory.createEmptyBorder(); + sp.setBorder(emptyBorder); + sp.setViewportBorder(emptyBorder); + sp.setBackground(textArea.getBackground()); + sp.getViewport().setBackground(textArea.getBackground()); + cp.add(sp); + // What was component 1 is now 0. + cp.getComponent(0).removeMouseListener(tipListener); + cp.remove(0); + } + + cp.add(panel, BorderLayout.SOUTH); + + } + + + /** + * Sets the listener for hyperlink events in this tip window. + * + * @param listener The new listener. The old listener (if any) is + * removed. A value of null means "no listener." + */ + public void setHyperlinkListener(HyperlinkListener listener) { + // We've added a separate listener, so remove only the user's. + if (userHyperlinkListener!=null) { + textArea.removeHyperlinkListener(userHyperlinkListener); + } + userHyperlinkListener = listener; + if (userHyperlinkListener!=null) { + textArea.addHyperlinkListener(userHyperlinkListener); + } + } + + + /** + * Listens for events in this window. + */ + private final class TipListener extends MouseAdapter { + + private TipListener() { + } + + @Override + public void mousePressed(MouseEvent e) { + actionPerformed(null); // Manually create "real" window + } + + @Override + public void mouseExited(MouseEvent e) { + // Since we registered this listener on the child components of + // the JWindow, not the JWindow iteself, we have to be careful. + Component source = (Component)e.getSource(); + Point p = e.getPoint(); + SwingUtilities.convertPointToScreen(p, source); + if (!TipWindow.this.getBounds().contains(p)) { + ft.possiblyDisposeOfTipWindow(); + } + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java new file mode 100755 index 000000000..3a8fa0e9c --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/CurlyFoldParser.java @@ -0,0 +1,338 @@ +/* + * 10/08/2011 + * + * CurlyFoldParser.java - Fold parser for languages with C-style syntax. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * A basic fold parser that can be used for languages such as C, that use + * curly braces to denote code blocks. This parser searches for curly brace + * pairs and creates code folds out of them. It can also optionally find + * C-style multi-line comments ("/* ... */") and make them + * foldable as well.

    + * + * This parser knows nothing about language semantics; it uses + * RSyntaxTextArea's syntax highlighting tokens to identify + * curly braces. By default, it looks for single-char tokens of type + * {@link Token#SEPARATOR}, with lexemes '{' or '}'. + * If your {@link org.fife.ui.rsyntaxtextarea.TokenMaker} uses a different token + * type for curly braces, you should override the {@link #isLeftCurly(Token)} and + * {@link #isRightCurly(Token)} methods with your own definitions. In theory, + * you could extend this fold parser to parse languages that use completely + * different tokens than curly braces to denote foldable regions by overriding + * those two methods.

    + * + * Note also that this class may impose somewhat of a performance penalty on + * large source files, since it re-parses the entire document each time folds + * are reevaluated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class CurlyFoldParser implements FoldParser { + + /** + * Whether to scan for C-style multi-line comments and make them foldable. + */ + private boolean foldableMultiLineComments; + + /** + * Whether this parser is folding Java. + */ + private final boolean java; + + /** + * Used to find import statements when folding Java code. + */ + private static final char[] KEYWORD_IMPORT = "import".toCharArray(); + + /** + * Ending of a multi-line comment in C, C++, Java, etc. + */ + protected static final char[] C_MLC_END = "*/".toCharArray(); + + + /** + * Creates a fold parser that identifies foldable regions via curly braces + * as well as C-style multi-line comments. + */ + public CurlyFoldParser() { + this(true, false); + } + + + /** + * Constructor. + * + * @param cStyleMultiLineComments Whether to scan for C-style multi-line + * comments and make them foldable. + * @param java Whether this parser is folding Java. This adds extra + * parsing rules, such as grouping all import statements into a + * fold section. + */ + public CurlyFoldParser(boolean cStyleMultiLineComments, boolean java) { + this.foldableMultiLineComments = cStyleMultiLineComments; + this.java = java; + } + + + /** + * Returns whether multi-line comments are foldable with this parser. + * + * @return Whether multi-line comments are foldable. + * @see #setFoldableMultiLineComments(boolean) + */ + public boolean getFoldableMultiLineComments() { + return foldableMultiLineComments; + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + int importStartLine = -1; + int lastSeenImportLine = -1; + int importGroupStartOffs = -1; + int importGroupEndOffs = -1; + int lastRightCurlyLine = -1; + Fold prevFold = null; + + try { + + for (int line=0; line-1) { + if (lastSeenImportLine>importStartLine) { + Fold fold = null; + // Any imports found *should* be a top-level fold, + // but we're extra lenient here and allow groups + // of them anywhere to keep our parser better-behaved + // if they have random "imports" throughout code. + if (currentFold==null) { + fold = new Fold(FoldType.IMPORTS, + textArea, importGroupStartOffs); + folds.add(fold); + } + else { + fold = currentFold.createChild(FoldType.IMPORTS, + importGroupStartOffs); + } + fold.setEndOffset(importGroupEndOffs); + } + importStartLine = lastSeenImportLine = + importGroupStartOffs = importGroupEndOffs = -1; + } + + } + + if (inMLC) { + // If we found the end of an MLC that started + // on a previous line... + if (t.endsWith(C_MLC_END)) { + int mlcEnd = t.getEndOffset() - 1; + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, mlcStart); + currentFold.setEndOffset(mlcEnd); + folds.add(currentFold); + currentFold = null; + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, mlcStart); + currentFold.setEndOffset(mlcEnd); + currentFold = currentFold.getParent(); + } + //System.out.println("Ending MLC at: " + mlcEnd + ", parent==" + currentFold); + inMLC = false; + mlcStart = 0; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + else { + // If we're an MLC that ends on a later line... + if (t.getType()!=Token.COMMENT_EOL && !t.endsWith(C_MLC_END)) { + //System.out.println("Starting MLC at: " + t.offset); + inMLC = true; + mlcStart = t.getOffset(); + } + } + + } + + else if (isLeftCurly(t)) { + + // Java-specific stuff + if (java) { + + if (importStartLine>-1) { + if (lastSeenImportLine>importStartLine) { + Fold fold = null; + // Any imports found *should* be a top-level fold, + // but we're extra lenient here and allow groups + // of them anywhere to keep our parser better-behaved + // if they have random "imports" throughout code. + if (currentFold==null) { + fold = new Fold(FoldType.IMPORTS, + textArea, importGroupStartOffs); + folds.add(fold); + } + else { + fold = currentFold.createChild(FoldType.IMPORTS, + importGroupStartOffs); + } + fold.setEndOffset(importGroupEndOffs); + } + importStartLine = lastSeenImportLine = + importGroupStartOffs = importGroupEndOffs = -1; + } + + } + + // If a new fold block starts on the same line as the + // previous one ends, we treat it as one big block + // (e.g. K&R-style "} else {") + if (prevFold != null && line == lastRightCurlyLine) { + currentFold = prevFold; + // Keep currentFold.endOffset where it was, so that + // unclosed folds at end of the file work as well + // as possible + prevFold = null; + lastRightCurlyLine = -1; + } + else if (currentFold==null) { // A top-level fold + currentFold = new Fold(FoldType.CODE, textArea, t.getOffset()); + folds.add(currentFold); + } + else { // A nested fold + currentFold = currentFold.createChild(FoldType.CODE, t.getOffset()); + } + + } + + else if (isRightCurly(t)) { + + if (currentFold!=null) { + currentFold.setEndOffset(t.getOffset()); + Fold parentFold = currentFold.getParent(); + //System.out.println("... Adding regular fold at " + t.offset + ", parent==" + parentFold); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + if (!currentFold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + else { + // Remember the end of the last completed fold, + // in case it needs to get merged with the next + // one (e.g. K&R "} else {" style) + lastRightCurlyLine = line; + prevFold = currentFold; + } + currentFold = parentFold; + } + + } + + // Java-specific folding rules + else if (java) { + + if (t.is(Token.RESERVED_WORD, KEYWORD_IMPORT)) { + if (importStartLine==-1) { + importStartLine = line; + importGroupStartOffs = t.getOffset(); + importGroupEndOffs = t.getOffset(); + } + lastSeenImportLine = line; + } + + else if (importStartLine>-1 && + t.isIdentifier() &&//SEPARATOR && + t.isSingleChar(';')) { + importGroupEndOffs = t.getOffset(); + } + + } + + t = t.getNextToken(); + + } + + } + + } catch (BadLocationException ble) { // Should never happen + ble.printStackTrace(); + } + + return folds; + + } + + + /** + * Returns whether the token is a left curly brace. This method exists + * so subclasses can provide their own curly brace definition. + * + * @param t The token. + * @return Whether it is a left curly brace. + * @see #isRightCurly(Token) + */ + public boolean isLeftCurly(Token t) { + return t.isLeftCurly(); + } + + + /** + * Returns whether the token is a right curly brace. This method exists + * so subclasses can provide their own curly brace definition. + * + * @param t The token. + * @return Whether it is a right curly brace. + * @see #isLeftCurly(Token) + */ + public boolean isRightCurly(Token t) { + return t.isRightCurly(); + } + + + /** + * Sets whether multi-line comments are foldable with this parser. + * + * @param foldable Whether multi-line comments are foldable. + * @see #getFoldableMultiLineComments() + */ + public void setFoldableMultiLineComments(boolean foldable) { + this.foldableMultiLineComments = foldable; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java new file mode 100755 index 000000000..f6e757db3 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/DefaultFoldManager.java @@ -0,0 +1,612 @@ +/* + * 10/08/2011 + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import javax.swing.text.Element; + +import org.fife.ui.rsyntaxtextarea.RSyntaxDocument; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.parser.AbstractParser; +import org.fife.ui.rsyntaxtextarea.parser.DefaultParseResult; +import org.fife.ui.rsyntaxtextarea.parser.ParseResult; +import org.fife.ui.rsyntaxtextarea.parser.Parser; +import org.fife.ui.rtextarea.RDocument; + + +/** + * The default implementation of a fold manager. Besides keeping track of + * folds, this class behaves as follows: + * + *

      + *
    • If text containing a newline is inserted in a collapsed fold, + * that fold, and any ancestor folds, are expanded. This ensures that + * modified text is always visible to the user. + *
    • If the text area's {@link RSyntaxTextArea#SYNTAX_STYLE_PROPERTY} + * changes, the current fold parser is uninstalled, and one appropriate + * for the new language, if any, is installed. + *
    + * + * The folding strategy to use is retrieved from {@link FoldParserManager}. + * + * @author Robert Futrell + * @version 1.0 + */ +public class DefaultFoldManager implements FoldManager { + + private RSyntaxTextArea textArea; + private Parser rstaParser; + private FoldParser foldParser; + private List folds; + private boolean codeFoldingEnabled; + private PropertyChangeSupport support; + private Listener l; + + + /** + * Constructor. + * + * @param textArea The text area whose folds we are managing. + */ + public DefaultFoldManager(RSyntaxTextArea textArea) { + this.textArea = textArea; + support = new PropertyChangeSupport(this); + l = new Listener(); + textArea.getDocument().addDocumentListener(l); + textArea.addPropertyChangeListener(RSyntaxTextArea.SYNTAX_STYLE_PROPERTY, l); + textArea.addPropertyChangeListener("document", l); + folds = new ArrayList<>(); + updateFoldParser(); + } + + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + support.addPropertyChangeListener(l); + } + + + @Override + public void clear() { + folds.clear(); + } + + + @Override + public boolean ensureOffsetNotInClosedFold(int offs) { + + boolean foldsOpened = false; + Fold fold = getDeepestFoldContaining(offs); + + while (fold!=null) { + if (fold.isCollapsed()) { + fold.setCollapsed(false); + foldsOpened = true; + } + fold = fold.getParent(); + } + + if (foldsOpened) { // Folds changing state mean gutter is stale + RSyntaxUtilities.possiblyRepaintGutter(textArea); + } + + return foldsOpened; + + } + + + @Override + public Fold getDeepestFoldContaining(int offs) { + Fold deepestFold = null; + if (offs>-1) { + for (int i=0; i-1) { + for (int i=0; i folds, int line) { + + int low = 0; + int high = folds.size() - 1; + + while (low <= high) { + int mid = (low + high) >> 1; + Fold midFold = folds.get(mid); + int startLine = midFold.getStartLine(); + if (line==startLine) { + return midFold; + } + else if (line=endLine) { + low = mid + 1; + } + else { // line>startLine && line<=endLine + List children = midFold.getChildren(); + return children!=null ? getFoldForLineImpl(midFold, children, line) : null; + } + } + } + + return null; // No fold for this line +} + + + @Override + public int getHiddenLineCount() { + int count = 0; + for (Fold fold : folds) { + count += fold.getCollapsedLineCount(); + } + return count; + } + + + @Override + public int getHiddenLineCountAbove(int line) { + return getHiddenLineCountAbove(line, false); + } + + + @Override + public int getHiddenLineCountAbove(int line, boolean physical) { + + int count = 0; + + for (Fold fold : folds) { + int comp = physical ? line+count : line; + if (fold.getStartLine()>=comp) { + break; + } + count += getHiddenLineCountAboveImpl(fold, comp, physical); + } + + return count; + + } + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param fold The current fold in the recursive algorithm. It and its + * children are examined. + * @param line The line. + * @param physical Whether line is the number of a physical + * line (i.e. visible, not code-folded), or a logical one (i.e. any + * line from the model). If line was determined by a + * raw line calculation (i.e. (visibleTopY / lineHeight)), + * this value should be true. It should be + * false when it was calculated from an offset in the + * document (for example). + * @return The number of lines hidden in folds that are descendants of + * fold, or fold itself, above + * line. + */ + private int getHiddenLineCountAboveImpl(Fold fold, int line, boolean physical) { + + int count = 0; + + if (fold.getEndLine()=comp) { + break; + } + count += getHiddenLineCountAboveImpl(child, comp, physical); + } + } + + return count; + + } + + + @Override + public int getLastVisibleLine() { + + int lastLine = textArea.getLineCount() - 1; + + if (isCodeFoldingSupportedAndEnabled()) { + int foldCount = getFoldCount(); + if (foldCount>0) { + Fold lastFold = getFold(foldCount-1); + if (lastFold.containsLine(lastLine)) { + if (lastFold.isCollapsed()) { + lastLine = lastFold.getStartLine(); + } + else { // Child fold may end on the same line as parent + while (lastFold.getHasChildFolds()) { + lastFold = lastFold.getLastChild(); + if (lastFold.containsLine(lastLine)) { + if (lastFold.isCollapsed()) { + lastLine = lastFold.getStartLine(); + break; + } + } + else { // Higher up + break; + } + } + } + } + } + } + + return lastLine; + + } + + + @Override + public int getVisibleLineAbove(int line) { + + if (line<=0 || line>=textArea.getLineCount()) { + return -1; + } + + do { + line--; + } while (line>=0 && isLineHidden(line)); + + return line; + + } + + + @Override + public int getVisibleLineBelow(int line) { + + int lineCount = textArea.getLineCount(); + if (line<0 || line>=lineCount-1) { + return -1; + } + + do { + line++; + } while (line> 1; +// Fold midVal = (Fold)allFolds.get(mid); +// if (midVal.containsLine(line)) { +// return mid; +// } +// if (line<=midVal.getStartLine()) { +// high = mid - 1; +// } +// else { // line > midVal.getEndLine() +// low = mid + 1; +// } +// } +// +// return -(low + 1); // key not found +// +// } + + + @Override + public boolean isCodeFoldingEnabled() { + return codeFoldingEnabled; + } + + + @Override + public boolean isCodeFoldingSupportedAndEnabled() { + return codeFoldingEnabled && foldParser!=null; + } + + + @Override + public boolean isFoldStartLine(int line) { + return getFoldForLine(line)!=null; + } + + + @Override + public boolean isLineHidden(int line) { + for (Fold fold : folds) { + if (fold.containsLine(line)) { + if (fold.isCollapsed()) { + return true; + } + else { + return isLineHiddenImpl(fold, line); + } + } + } + return false; + } + + + private boolean isLineHiddenImpl(Fold parent, int line) { + for (int i=0; i oldFolds) { + int previousLoc = Collections.binarySearch(oldFolds, newFold); + //System.out.println(newFold + " => " + previousLoc); + if (previousLoc>=0) { + Fold prevFold = oldFolds.get(previousLoc); + newFold.setCollapsed(prevFold.isCollapsed()); + } + else { + //previousLoc = -(insertion point) - 1; + int insertionPoint = -(previousLoc + 1); + if (insertionPoint>0) { + Fold possibleParentFold = oldFolds.get(insertionPoint-1); + if (possibleParentFold.containsOffset( + newFold.getStartOffset())) { + List children = possibleParentFold.getChildren(); + if (children!=null) { + keepFoldState(newFold, children); + } + } + } + } + } + + + private void keepFoldStates(List newFolds, List oldFolds) { + for (Fold newFold : newFolds) { + keepFoldState(newFold, folds); + List newChildFolds = newFold.getChildren(); + if (newChildFolds!=null) { + keepFoldStates(newChildFolds, oldFolds); + } + } + } + + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + support.removePropertyChangeListener(l); + } + + + @Override + public void reparse() { + + if (codeFoldingEnabled && foldParser!=null) { + + // Re-calculate folds. Keep the fold state of folds that are + // still around. + List newFolds = foldParser.getFolds(textArea); + if (newFolds==null) { + newFolds = Collections.emptyList(); + } + else { + keepFoldStates(newFolds, folds); + } + folds = newFolds; + + // Let folks (gutter, etc.) know that folds have been updated. + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, folds); + textArea.repaint(); + + } + else { + folds.clear(); + } + + } + + + @Override + public void setCodeFoldingEnabled(boolean enabled) { + if (enabled!=codeFoldingEnabled) { + codeFoldingEnabled = enabled; + if (rstaParser!=null) { + textArea.removeParser(rstaParser); + } + if (enabled) { + rstaParser = new AbstractParser() { + @Override + public ParseResult parse(RSyntaxDocument doc, String style) { + reparse(); + return new DefaultParseResult(this); + } + }; + textArea.addParser(rstaParser); + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); + //reparse(); + } + else { + folds = Collections.emptyList(); + textArea.repaint(); + support.firePropertyChange(PROPERTY_FOLDS_UPDATED, null, null); + } + } + } + + + @Override + public void setFolds(List folds) { + this.folds = folds; + } + + + /** + * Updates the fold parser to be the one appropriate for the language + * currently being highlighted. + */ + private void updateFoldParser() { + foldParser = FoldParserManager.get().getFoldParser( + textArea.getSyntaxEditingStyle()); + } + + + /** + * Listens for events in the text editor. + */ + private class Listener implements DocumentListener, PropertyChangeListener { + + @Override + public void changedUpdate(DocumentEvent e) { + } + + @Override + public void insertUpdate(DocumentEvent e) { + // Adding text containing a newline to the visible line of a folded + // Fold causes that Fold to unfold. Check only start offset of + // insertion since that's the line that was "modified". + int startOffs = e.getOffset(); + int endOffs = startOffs + e.getLength(); + Document doc = e.getDocument(); + Element root = doc.getDefaultRootElement(); + int startLine = root.getElementIndex(startOffs); + int endLine = root.getElementIndex(endOffs); + if (startLine!=endLine) { // Inserted text covering > 1 line... + Fold fold = getFoldForLine(startLine); + if (fold!=null && fold.isCollapsed()) { + fold.toggleCollapsedState(); + } + } + } + + @Override + public void propertyChange(PropertyChangeEvent e) { + + String name = e.getPropertyName(); + + if (RSyntaxTextArea.SYNTAX_STYLE_PROPERTY.equals(name)) { + // Syntax style changed in editor. + updateFoldParser(); + reparse(); // Even if no fold parser change, highlighting did + } + + else if ("document".equals(name)) { + // The document switched out from under us + RDocument old = (RDocument)e.getOldValue(); + if (old != null) { + old.removeDocumentListener(this); + } + RDocument newDoc = (RDocument)e.getNewValue(); + if (newDoc != null) { + newDoc.addDocumentListener(this); + } + reparse(); + } + + } + + @Override + public void removeUpdate(DocumentEvent e) { + // Removing text from the visible line of a folded Fold causes that + // Fold to unfold. We only need to check the removal offset since + // that's the new caret position. + int offs = e.getOffset(); + try { + int lastLineModified = textArea.getLineOfOffset(offs); + //System.out.println(">>> " + lastLineModified); + Fold fold = getFoldForLine(lastLineModified); + //System.out.println("&&& " + fold); + if (fold!=null && fold.isCollapsed()) { + fold.toggleCollapsedState(); + } + } catch (BadLocationException ble) { + ble.printStackTrace(); // Never happens + } + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/Fold.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/Fold.java new file mode 100755 index 000000000..a5f55cf36 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/Fold.java @@ -0,0 +1,568 @@ +/* + * 10/08/2011 + * + * Fold.java - A foldable region of text in an RSyntaxTextArea instance. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.Position; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; + + +/** + * Information about a foldable region.

    + * + * A Fold has zero or more children, and Folds thus + * form a hierarchical structure, with "parent" folds containing the info about + * any "child" folds they contain.

    + * + * Fold regions are denoted by a starting and ending offset, but the actual + * folding is done on a per-line basis, so Fold instances provide + * methods for retrieving both starting and ending offsets and lines. The + * starting and ending offsets/lines are "sticky" and correctly track their + * positions even as the document is modified. + * + * @author Robert Futrell + * @version 1.0 + */ +public class Fold implements Comparable { + + private int type; + private RSyntaxTextArea textArea; + private Position startOffs; + private Position endOffs; + private Fold parent; + private List children; + private boolean collapsed; + private int childCollapsedLineCount; + + private int lastStartOffs = -1; + private int cachedStartLine; + + private int lastEndOffs = -1; + private int cachedEndLine; + + + public Fold(int type, RSyntaxTextArea textArea, int startOffs) + throws BadLocationException { + this.type = type; + this.textArea = textArea; + this.startOffs = textArea.getDocument().createPosition(startOffs); + } + + + /** + * Creates a fold that is a child of this one. + * + * @param type The type of fold. + * @param startOffs The starting offset of the fold. + * @return The child fold. + * @throws BadLocationException If startOffs is invalid. + * @see FoldType + */ + public Fold createChild(int type, int startOffs) throws BadLocationException { + Fold child = new Fold(type, textArea, startOffs); + child.parent = this; + if (children==null) { + children = new ArrayList<>(); + } + children.add(child); + return child; + } + + + /** + * Two folds are considered equal if they start at the same offset. + * + * @param otherFold Another fold to compare this one to. + * @return How this fold compares to the other. + */ + @Override + public int compareTo(Fold otherFold) { + int result = -1; + if (otherFold!=null) { + result = startOffs.getOffset() - otherFold.startOffs.getOffset(); + //result = getStartLine() - otherFold.getStartLine(); + } + return result; + } + + + /** + * Returns whether the specified line would be hidden in this fold. Since + * RSTA displays the "first" line in a fold, this means that the line must + * must be between (getStartLine()+1) and + * getEndLine(), inclusive. + * + * @param line The line to check. + * @return Whether the line would be hidden if this fold is collapsed. + * @see #containsOffset(int) + * @see #containsOrStartsOnLine(int) + */ + public boolean containsLine(int line) { + return line>getStartLine() && line<=getEndLine(); + } + + + /** + * Returns whether the given line is in the range + * [getStartLine(), getEndLine()], inclusive. + * + * @param line The line to check. + * @return Whether this fold contains, or starts on, the line. + * @see #containsLine(int) + */ + public boolean containsOrStartsOnLine(int line) { + return line>=getStartLine() && line<=getEndLine(); + } + + + /** + * Returns whether the specified offset is "inside" the fold. This method + * returns true if the offset is greater than the fold start + * offset, and no further than the last offset of the last folded line. + * + * @param offs The offset to check. + * @return Whether the offset is "inside" the fold. + * @see #containsLine(int) + */ + public boolean containsOffset(int offs) { + boolean contained = false; + if (offs>getStartOffset()) { + // Use Elements to avoid BadLocationExceptions + Element root = textArea.getDocument().getDefaultRootElement(); + int line = root.getElementIndex(offs); + contained = line<=getEndLine(); + } + return contained; + } + + + /** + * Two folds are considered equal if they have the same starting offset. + * + * @param otherFold Another fold to compare this one to. + * @return Whether the two folds are equal. + * @see #compareTo(Fold) + */ + @Override + public boolean equals(Object otherFold) { + return otherFold instanceof Fold && compareTo((Fold)otherFold)==0; + } + + + /** + * Returns a specific child fold. + * + * @param index The index of the child fold. + * @return The child fold. + * @see #getChildCount() + */ + public Fold getChild(int index) { + return children.get(index); + } + + + /** + * Returns the number of child folds. + * + * @return The number of child folds. + * @see #getChild(int) + */ + public int getChildCount() { + return children==null ? 0 : children.size(); + } + + + /** + * Returns the array of child folds. This is a shallow copy. + * + * @return The array of child folds, or null if there are + * none. + */ + List getChildren() { + return children; + } + + + /** + * Returns the number of collapsed lines under this fold. If this fold + * is collapsed, this method returns {@link #getLineCount()}, otherwise + * it returns the sum of all collapsed lines of all child folds of this + * one.

    + * + * The value returned is cached, so this method returns quickly and + * shouldn't affect performance. + * + * @return The number of collapsed lines under this fold. + */ + public int getCollapsedLineCount() { + return collapsed ? getLineCount() : childCollapsedLineCount; + } + + + /** + * Returns the "deepest" fold containing the specified offset. It is + * assumed that it's already been verified that offs is indeed + * contained in this fold. + * + * @param offs The offset. + * @return The fold, or null if no child fold also contains + * the offset. + * @see FoldManager#getDeepestFoldContaining(int) + */ + Fold getDeepestFoldContaining(int offs) { + Fold deepestFold = this; + for (int i=0; ioffs is + * indeed contained in this fold. + * + * @param offs The offset. + * @return The fold, or null if no open fold contains the + * offset. + * @see FoldManager#getDeepestOpenFoldContaining(int) + */ + Fold getDeepestOpenFoldContaining(int offs) { + + Fold deepestFold = this; + + for (int i=0; i + * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the ending line of the + * code block. + * + * @return The end line of this code block. + * @see #getEndOffset() + * @see #getStartLine() + */ + public int getEndLine() { + int endOffs = getEndOffset(); + if (lastEndOffs==endOffs) { + return cachedEndLine; + } + lastEndOffs = endOffs; + Element root = textArea.getDocument().getDefaultRootElement(); + return cachedEndLine = root.getElementIndex(endOffs); + } + + + /** + * Returns the end offset of this fold. For example, in languages such as + * C and Java, this might be the offset of the closing curly brace of a + * code block.

    + * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the ending offset of the + * code block. + * + * @return The end offset of this code block, or {@link Integer#MAX_VALUE} + * if this fold region isn't closed properly. The latter causes + * this fold to collapsed all lines through the end of the file. + * @see #getEndLine() + * @see #getStartOffset() + */ + public int getEndOffset() { + return endOffs!=null ? endOffs.getOffset() : Integer.MAX_VALUE; + } + + + /** + * Returns the type of fold this is. This will be one of the values in + * {@link FoldType}, or a user-defined value. + * + * @return The type of fold this is. + */ + public int getFoldType() { + return type; + } + + + /** + * Returns whether this fold has any child folds. + * + * @return Whether this fold has any children. + * @see #getChildCount() + */ + public boolean getHasChildFolds() { + return getChildCount()>0; + } + + + /** + * Returns the last child fold. + * + * @return The last child fold, or null if this fold does not + * have any children. + * @see #getChild(int) + * @see #getHasChildFolds() + */ + public Fold getLastChild() { + int childCount = getChildCount(); + return childCount==0 ? null : getChild(childCount-1); + } + + + /** + * Returns the number of lines that are hidden when this fold is + * collapsed. + * + * @return The number of lines hidden. + * @see #getStartLine() + * @see #getEndLine() + */ + public int getLineCount() { + return getEndLine() - getStartLine(); + } + + + /** + * Returns the parent fold of this one. + * + * @return The parent fold, or null if this is a top-level + * fold. + */ + public Fold getParent() { + return parent; + } + + + /** + * Returns the starting line of this fold region. This is the only line + * in the fold region that is not hidden when a fold is collapsed.

    + * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the starting line of the + * code block. + * + * @return The starting line of the code block. + * @see #getEndLine() + * @see #getStartOffset() + */ + public int getStartLine() { + int startOffs = getStartOffset(); + if (lastStartOffs==startOffs) { + return cachedStartLine; + } + lastStartOffs = startOffs; + Element root = textArea.getDocument().getDefaultRootElement(); + return cachedStartLine = root.getElementIndex(startOffs); + } + + + /** + * Returns the starting offset of this fold region. For example, for + * languages such as C and Java, this would be the offset of the opening + * curly brace of a code block.

    + * + * The value returned by this method will automatically update as the + * text area's contents are modified, to track the starting offset of the + * code block. + * + * @return The start offset of this fold. + * @see #getStartLine() + * @see #getEndOffset() + */ + public int getStartOffset() { + return startOffs.getOffset(); + } + + + @Override + public int hashCode() { + return getStartLine(); + } + + + /** + * Returns whether this fold is collapsed. + * + * @return Whether this fold is collapsed. + * @see #setCollapsed(boolean) + * @see #toggleCollapsedState() + */ + public boolean isCollapsed() { + return collapsed; + } + + + /** + * Returns whether this fold is entirely on a single line. In general, + * a {@link FoldParser} should not remember fold regions all on a single + * line, since there's really nothing to fold. + * + * @return Whether this fold is on a single line. + * @see #removeFromParent() + */ + public boolean isOnSingleLine() { + return getStartLine()==getEndLine(); + } + + + /** + * Removes this fold from its parent. This should only be called by + * {@link FoldParser} implementations if they determine that a fold is all + * on a single line (and thus shouldn't be remembered) after creating it. + * + * @return Whether this fold had a parent to be removed from. + * @see #isOnSingleLine() + */ + public boolean removeFromParent() { + if (parent!=null) { + parent.removeMostRecentChild(); + parent = null; + return true; + } + return false; + } + + + private void removeMostRecentChild() { + children.remove(children.size()-1); + } + + + /** + * Sets whether this Fold is collapsed. Calling this method + * will update both the text area and all Gutter components. + * + * @param collapsed Whether this fold should be collapsed. + * @see #isCollapsed() + * @see #toggleCollapsedState() + */ + public void setCollapsed(boolean collapsed) { + + if (collapsed!=this.collapsed) { + + // Change our fold state and cached info about folded line count. + int lineCount = getLineCount(); + int linesToCollapse = lineCount - childCollapsedLineCount; + if (!collapsed) { // If we're expanding + linesToCollapse = -linesToCollapse; + } + //System.out.println("Hiding lines: " + linesToCollapse + + // " (" + lineCount + ", " + linesToCollapse + ")"); + this.collapsed = collapsed; + if (parent!=null) { + parent.updateChildCollapsedLineCount(linesToCollapse); + } + + // If an end point of the selection is being hidden, move the caret + // "out" of the fold. + if (collapsed) { + int dot = textArea.getSelectionStart(); // Forgive variable name + Element root = textArea.getDocument().getDefaultRootElement(); + int dotLine = root.getElementIndex(dot); + boolean updateCaret = containsLine(dotLine); + if (!updateCaret) { + int mark = textArea.getSelectionEnd(); + if (mark!=dot) { + int markLine = root.getElementIndex(mark); + updateCaret = containsLine(markLine); + } + } + if (updateCaret) { + dot = root.getElement(getStartLine()).getEndOffset() - 1; + textArea.setCaretPosition(dot); + } + } + + textArea.foldToggled(this); + + } + + } + + + /** + * Sets the ending offset of this fold, such as the closing curly brace + * of a code block in C or Java. {@link FoldParser} implementations should + * call this on an existing Fold upon finding its end. If + * this method isn't called, then this Fold is considered to + * have no end, i.e., it will collapse everything to the end of the file. + * + * @param endOffs The end offset of this fold. + * @throws BadLocationException If endOffs is not a valid + * location in the text area. + */ + public void setEndOffset(int endOffs) throws BadLocationException { + this.endOffs = textArea.getDocument().createPosition(endOffs); + } + + + /** + * Toggles the collapsed state of this fold. + * + * @see #setCollapsed(boolean) + */ + public void toggleCollapsedState() { + setCollapsed(!collapsed); + } + + + private void updateChildCollapsedLineCount(int count) { + childCollapsedLineCount += count; + //if (childCollapsedLineCount>getLineCount()) { + // Thread.dumpStack(); + //} + if (!collapsed && parent!=null) { + parent.updateChildCollapsedLineCount(count); + } + } + + + /** + * Overridden for debugging purposes. + * + * @return A string representation of this Fold. + */ + @Override + public String toString() { + return "[Fold: " + + "startOffs=" + getStartOffset() + + ", endOffs=" + getEndOffset() + + ", collapsed=" + collapsed + + "]"; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java new file mode 100755 index 000000000..65cfaec56 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldCollapser.java @@ -0,0 +1,106 @@ +/* + * 10/23/2011 + * + * FoldCollapser.java - Goes through an RSTA instance and collapses folds of + * specific types, such as comments. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Collapses folds based on their type. You can create an instance of this + * class to collapse all comment blocks when opening a new file, for example. + * + * @author Robert Futrell + * @version 1.0 + */ +public class FoldCollapser { + + private List typesToCollapse; + + + /** + * Creates an instance that collapses all comment blocks. + */ + public FoldCollapser() { + this(FoldType.COMMENT); + } + + + /** + * Creates an instance that collapses all blocks of the specified + * type. + * + * @param typeToCollapse The type to collapse. + * @see FoldType + */ + public FoldCollapser(int typeToCollapse) { + typesToCollapse = new ArrayList<>(3); + addTypeToCollapse(typeToCollapse); + } + + + /** + * Adds a type of fold to collapse. + * + * @param typeToCollapse The type of fold to collapse. + */ + public void addTypeToCollapse(int typeToCollapse) { + typesToCollapse.add(typeToCollapse); + } + + + /** + * Collapses any relevant folds known by the fold manager. + * + * @param fm The fold manager. + */ + public void collapseFolds(FoldManager fm) { + for (int i=0; i + * + * By default, {@code RSyntaxTextArea} uses a {@link DefaultFoldManager}, which + * is sufficient for almost all applications. + * + * @author Robert Futrell + * @version 1.0 + * @see DefaultFoldManager + */ +public interface FoldManager { + + /** + * Property fired when folds have been updated. + */ + String PROPERTY_FOLDS_UPDATED = "FoldsUpdated"; + + + /** + * Adds a property change listener to this fold manager. + * + * @param l The new listener. + * @see #removePropertyChangeListener(PropertyChangeListener) + */ + void addPropertyChangeListener(PropertyChangeListener l); + + + /** + * Removes all folds. + */ + void clear(); + + + /** + * Ensures that the specified offset is not hidden in a collapsed fold. + * Any folds containing this offset that are collapsed will be expanded. + * + * @param offs The offset. + * @return Whether any folds had to be opened. + * @see #getDeepestFoldContaining(int) + */ + boolean ensureOffsetNotInClosedFold(int offs); + + + /** + * Returns the "deepest" nested fold containing the specified offset. + * + * @param offs The offset. + * @return The deepest fold containing the offset, or null if + * no fold contains the offset. + */ + Fold getDeepestFoldContaining(int offs); + + + /** + * Returns the "deepest" open fold containing the specified offset. + * + * @param offs The offset. + * @return The fold, or null if no open fold contains the + * offset. + */ + Fold getDeepestOpenFoldContaining(int offs); + + + /** + * Returns a specific top-level fold, which may have child folds. + * + * @param index The index of the fold. + * @return The fold. + * @see #getFoldCount() + */ + Fold getFold(int index); + + + /** + * Returns the number of top-level folds. + * + * @return The number of top-level folds. + * @see #getFold(int) + */ + int getFoldCount(); + + + /** + * Returns the fold region that starts at the specified line. + * + * @param line The line number. + * @return The fold, or null if the line is not the start + * of a fold region. + * @see #isFoldStartLine(int) + */ + Fold getFoldForLine(int line); + + + /** + * Returns the total number of hidden (folded) lines. + * + * @return The total number of hidden (folded) lines. + * @see #getHiddenLineCountAbove(int) + */ + int getHiddenLineCount(); + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param line The line. This is the line number for a logical line. + * For the line number of a physical line (i.e. visible, not folded), + * use getHiddenLineCountAbove(int, true). + * @return The number of lines hidden in folds above line. + * @see #getHiddenLineCountAbove(int, boolean) + */ + int getHiddenLineCountAbove(int line); + + + /** + * Returns the number of lines "hidden" by collapsed folds above the + * specified line. + * + * @param line The line. + * @param physical Whether line is the number of a physical + * line (i.e. visible, not code-folded), or a logical one (i.e. any + * line from the model). If line was determined by a + * raw line calculation (i.e. (visibleTopY / lineHeight)), + * this value should be true. It should be + * false when it was calculated from an offset in the + * document (for example). + * @return The number of lines hidden in folds above line. + */ + int getHiddenLineCountAbove(int line, boolean physical); + + + /** + * Returns the last visible line in the text area, taking into account + * folds. + * + * @return The last visible line. + */ + int getLastVisibleLine(); + + + int getVisibleLineAbove(int line); + + + int getVisibleLineBelow(int line); + + + /** + * Returns whether code folding is enabled. Note that only certain + * languages support code folding; those that do not will ignore this + * property. + * + * @return Whether code folding is enabled. + * @see #setCodeFoldingEnabled(boolean) + */ + boolean isCodeFoldingEnabled(); + + + /** + * Returns true if and only if code folding is enabled for + * this text area, AND folding is supported for the language it is editing. + * Whether or not folding is supported for a language depends on whether + * a fold parser is registered for that language with the + * FoldParserManager. + * + * @return Whether folding is supported and enabled for this text area. + * @see FoldParserManager + */ + boolean isCodeFoldingSupportedAndEnabled(); + + + /** + * Returns whether the specified line contains the start of a fold region. + * + * @param line The line. + * @return Whether the line contains the start of a fold region. + * @see #getFoldForLine(int) + */ + boolean isFoldStartLine(int line); + + + /** + * Returns whether a line is hidden in a collapsed fold. + * + * @param line The line to check. + * @return Whether the line is hidden in a collapsed fold. + */ + boolean isLineHidden(int line); + + + /** + * Removes a property change listener from this fold manager. + * + * @param l The listener to remove. + * @see #addPropertyChangeListener(PropertyChangeListener) + */ + void removePropertyChangeListener(PropertyChangeListener l); + + + /** + * Forces an immediate reparsing for folds, if folding is enabled. This + * usually does not need to be called by the programmer, since fold + * parsing is done automatically by RSTA. + */ + void reparse(); + + + /** + * Sets whether code folding is enabled. Note that only certain + * languages will support code folding out of the box. Those languages + * which do not support folding will ignore this property. + * + * @param enabled Whether code folding should be enabled. + * @see #isCodeFoldingEnabled() + */ + void setCodeFoldingEnabled(boolean enabled); + + + /** + * Sets the folds for this fold manager. + * + * @param folds The new folds. This should not be null. + */ + void setFolds(List folds); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java new file mode 100755 index 000000000..8478c4f8e --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParser.java @@ -0,0 +1,41 @@ +/* + * 10/08/2011 + * + * FoldParser.java - Locates folds in an RSyntaxTextArea instance. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.List; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; + + +/** + * Locates folds in a document. If you are implementing a language that has + * sections of source code that can be logically "folded," you can create an + * instance of this interface that locates those regions and represents them + * as {@link Fold}s. RSyntaxTextArea knows how to take it from + * there and implement code folding in the editor. + * + * @author Robert Futrell + * @version 1.0 + * @see CurlyFoldParser + * @see XmlFoldParser + */ +public interface FoldParser { + + + /** + * Returns a list of all folds in the text area. + * + * @param textArea The text area whose contents should be analyzed. + * @return The list of folds. If this method returns null, + * it is treated as if no folds were found. + */ + List getFolds(RSyntaxTextArea textArea); + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java new file mode 100755 index 000000000..2a7df6010 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldParserManager.java @@ -0,0 +1,129 @@ +/* + * 10/08/2011 + * + * FoldParserManager.java - Used by RSTA to determine what fold parser to use + * for each language it supports. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.HashMap; +import java.util.Map; + +import org.fife.ui.rsyntaxtextarea.SyntaxConstants; + + +/** + * Manages fold parsers. Instances of RSyntaxTextArea call into + * this class to retrieve fold parsers for whatever language they're editing. + * Folks implementing custom languages can add a {@link FoldParser} + * implementation for their language to this manager and it will be used by + * RSTA. + * + * @author Robert Futrell + * @version 1.0 + */ +public final class FoldParserManager implements SyntaxConstants { + + /** + * Map from syntax styles to fold parsers. + */ + private Map foldParserMap; + + private static final FoldParserManager INSTANCE = new FoldParserManager(); + + + /** + * Private constructor to prevent instantiation. + */ + private FoldParserManager() { + foldParserMap = createFoldParserMap(); + } + + + /** + * Adds a mapping from a syntax style to a fold parser. The parser + * specified will be shared among all RSTA instances editing that language, + * so it should be stateless (which should not be difficult for a fold + * parser). You can also override the fold parser for built-in languages, + * such as SYNTAX_STYLE_JAVA, with your own parser + * implementations. + * + * @param syntaxStyle The syntax style. + * @param parser The parser. + * @see SyntaxConstants + */ + public void addFoldParserMapping(String syntaxStyle, FoldParser parser) { + foldParserMap.put(syntaxStyle, parser); + } + + + /** + * Creates the syntax style-to-fold parser mapping for built-in languages. + * + * @return The style-to-fold parser mapping. + */ + private Map createFoldParserMap() { + + Map map = new HashMap<>(); + + map.put(SYNTAX_STYLE_C, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CPLUSPLUS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CSHARP, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_CLOJURE, new LispFoldParser()); + map.put(SYNTAX_STYLE_CSS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_D, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_DART, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_GO, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_GROOVY, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_HTACCESS, new XmlFoldParser()); + map.put(SYNTAX_STYLE_HTML, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_HTML)); + map.put(SYNTAX_STYLE_JAVA, new CurlyFoldParser(true, true)); + map.put(SYNTAX_STYLE_JAVASCRIPT, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_JSON, new JsonFoldParser()); + map.put(SYNTAX_STYLE_JSON_WITH_COMMENTS,new JsonFoldParser()); + map.put(SYNTAX_STYLE_JSP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_JSP)); + map.put(SYNTAX_STYLE_LATEX, new LatexFoldParser()); + map.put(SYNTAX_STYLE_LESS, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_LISP, new LispFoldParser()); + map.put(SYNTAX_STYLE_MXML, new XmlFoldParser()); + map.put(SYNTAX_STYLE_NSIS, new NsisFoldParser()); + map.put(SYNTAX_STYLE_PERL, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_PHP, new HtmlFoldParser(HtmlFoldParser.LANGUAGE_PHP)); + map.put(SYNTAX_STYLE_SCALA, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_TYPESCRIPT, new CurlyFoldParser()); + map.put(SYNTAX_STYLE_XML, new XmlFoldParser()); + map.put(SYNTAX_STYLE_YAML, new YamlFoldParser()); + + return map; + + } + + + /** + * Returns the singleton instance of this class. + * + * @return The singleton instance. + */ + public static FoldParserManager get() { + return INSTANCE; + } + + + /** + * Returns a fold parser to use for an editor highlighting code of a + * specific language. + * + * @param syntaxStyle A value from {@link SyntaxConstants}, such as + * SYNTAX_STYLE_JAVA. + * @return A fold parser to use, or null if none is registered + * for the language. + */ + public FoldParser getFoldParser(String syntaxStyle) { + return foldParserMap.get(syntaxStyle); + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldType.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldType.java new file mode 100755 index 000000000..4d9ea042a --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/FoldType.java @@ -0,0 +1,59 @@ +/* + * 10/08/2011 + * + * FoldType.java - Types of folds found in many programming languages. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + + +/** + * Constants representing the "type" of a folded region. Implementations of + * {@link FoldParser} can also define their own folded region types, provided + * they give them values of at least {@link #FOLD_TYPE_USER_DEFINED_MIN}. This + * allows you to identify and auto-fold specific regions of source code when + * opening files; for example, a Java editor could identify all import + * statements in a file as a foldable region, and give it a user-defined value + * for fold type. Then, the UI could provide a means for the user to specify + * that they always want the import region folded when opening a new file.

    + * + * The majority of the time, however, code editors won't need to be that fancy, + * and can simply use the standard CODE and COMMENT + * fold types. + * + * @author Robert Futrell + * @version 1.0 + * @see Fold + */ +public interface FoldType { + + /** + * Denotes a Fold as being a region of code. + */ + int CODE = 0; + + /** + * Denotes a Fold as being a multi-line comment. + */ + int COMMENT = 1; + + /** + * Denotes a Fold as being a section of import statements + * (Java), include statements (C), etc. + */ + int IMPORTS = 2; + + /** + * Users building advanced editors such as IDE's, that want to allow their + * users to auto-expand/collapse foldable regions of a specific type other + * than comments, should define their custom fold types using values + * FOLD_TYPE_USER_DEFINED_MIN + n. That way, if + * new default fold types are added to this interface in the future, your + * code won't suddenly break when upgrading to a new version of RSTA. + */ + int FOLD_TYPE_USER_DEFINED_MIN = 1000; + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java new file mode 100755 index 000000000..a1455446b --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/HtmlFoldParser.java @@ -0,0 +1,412 @@ +/* + * 09/30/2012 + * + * HtmlFoldParser.java - Fold parser for HTML 5 and PHP. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.Stack; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * Fold parser for HTML 5, PHP and JSP. For HTML, we currently don't fold + * everything possible, just the "big" stuff. For PHP, we only fold + * the "big" HTML stuff and PHP regions, not code blocks in the actual PHP. + * For JSP we only fold the "big" HTML stuff and JSP blocks, not anything in + * the actual Java code. + * + * @author Robert Futrell + * @version 1.0 + */ +public class HtmlFoldParser implements FoldParser { + + /** + * Constant denoting we're folding HTML. + */ + public static final int LANGUAGE_HTML = -1; + + /** + * Constant denoting we're folding PHP. + */ + public static final int LANGUAGE_PHP = 0; + + /** + * Constant denoting we're folding JSP. + */ + public static final int LANGUAGE_JSP = 1; + + /** + * The language we're folding. + */ + private final int language; + + /** + * The set of tags we allow to be folded. These are tags that must have + * explicit close tags in both HTML 4 and HTML 5. + */ + private static final Set FOLDABLE_TAGS; + + private static final char[] MARKUP_CLOSING_TAG_START = "".toCharArray(); + private static final char[] MLC_START = "".toCharArray(); + + private static final char[] PHP_START = "".toCharArray(); + + // Scriptlets, declarations, and expressions all start the same way. + private static final char[] JSP_START = "<%".toCharArray(); + private static final char[] JSP_END = "%>".toCharArray(); + + private static final char[][] LANG_START = { PHP_START, JSP_START }; + private static final char[][] LANG_END = { PHP_END, JSP_END }; + + private static final char[] JSP_COMMENT_START = "<%--".toCharArray(); + private static final char[] JSP_COMMENT_END = "--%>".toCharArray(); + + static { + FOLDABLE_TAGS = new HashSet<>(); + FOLDABLE_TAGS.add("body"); + FOLDABLE_TAGS.add("canvas"); + FOLDABLE_TAGS.add("div"); + FOLDABLE_TAGS.add("form"); + FOLDABLE_TAGS.add("head"); + FOLDABLE_TAGS.add("html"); + FOLDABLE_TAGS.add("ol"); + FOLDABLE_TAGS.add("pre"); + FOLDABLE_TAGS.add("script"); + FOLDABLE_TAGS.add("span"); + FOLDABLE_TAGS.add("style"); + FOLDABLE_TAGS.add("table"); + FOLDABLE_TAGS.add("tfoot"); + FOLDABLE_TAGS.add("thead"); + FOLDABLE_TAGS.add("tr"); + FOLDABLE_TAGS.add("td"); + FOLDABLE_TAGS.add("ul"); + } + + + /** + * Constructor. + * + * @param language The language to fold, such as {@link #LANGUAGE_PHP}. + */ + public HtmlFoldParser(int language) { + if (languageLANGUAGE_JSP) { + throw new IllegalArgumentException("Invalid language: " + language); + } + this.language = language; + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + Stack tagNameStack = new Stack<>(); + boolean inSublanguage = false; + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + boolean inJSMLC = false; + TagCloseInfo tci = new TagCloseInfo(); + + try { + + for (int line=0; line=0 && t.getType()==Token.SEPARATOR) { + + // or %> + else if (t.startsWith(LANG_END[language]) && currentFold != null) { + int phpEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(phpEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inSublanguage = false; + t = t.getNextToken(); + continue; + } + + } + + if (!inSublanguage) { + + if (t.getType()==Token.COMMENT_MULTILINE) { + + // Continuing an MLC from a previous line + if (inMLC) { + // Found the end of the MLC starting on a previous line... + if (t.endsWith(MLC_END)) { + int mlcEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(mlcEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inMLC = false; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + + // Continuing a JS MLC from a previous line + else if (inJSMLC) { + // Found the end of the MLC starting on a previous line... + if (t.endsWith(JSP_COMMENT_END)) { + int mlcEnd = t.getEndOffset() - 1; + currentFold.setEndOffset(mlcEnd); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + inJSMLC = false; + } + // Otherwise, this MLC is continuing on to yet + // another line. + } + + // Starting a MLC that ends on a later line... + else if (t.startsWith(MLC_START) && !t.endsWith(MLC_END)) { + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); + } + inMLC = true; + } + + // Starting a JSP comment that ends on a later line... + else if (language==LANGUAGE_JSP && + t.startsWith(JSP_COMMENT_START) && + !t.endsWith(JSP_COMMENT_END)) { + if (currentFold==null) { + currentFold = new Fold(FoldType.COMMENT, textArea, t.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.COMMENT, t.getOffset()); + } + inJSMLC = true; + } + + } + + // If we're starting a new tag... + else if (t.isSingleChar(Token.MARKUP_TAG_DELIMITER, '<')) { + Token tagStartToken = t; + Token tagNameToken = t.getNextToken(); + if (isFoldableTag(tagNameToken)) { + int newLine = getTagCloseInfo(tagNameToken, textArea, line, tci); + if (tci.line==-1) { // EOF reached before end of tag + return folds; + } + // We have found either ">" or "/>" with tci. + //System.out.println(line + ", "+ tci + ", " + t); + Token tagCloseToken = tci.closeToken; + if (tagCloseToken.isSingleChar(Token.MARKUP_TAG_DELIMITER, '>')) { + if (currentFold==null) { + currentFold = new Fold(FoldType.CODE, textArea, + tagStartToken.getOffset()); + folds.add(currentFold); + } + else { + currentFold = currentFold.createChild(FoldType.CODE, + tagStartToken.getOffset()); + } + tagNameStack.push(tagNameToken.getLexeme()); + } + t = tagCloseToken; // Continue parsing after tag + line = newLine; + } + } + + // If we've found a closing tag (e.g. ""). + else if (t.is(Token.MARKUP_TAG_DELIMITER, MARKUP_CLOSING_TAG_START)) { + if (currentFold!=null) { + Token tagNameToken = t.getNextToken(); + if (isFoldableTag(tagNameToken) && + isEndOfLastFold(tagNameStack, tagNameToken)) { + tagNameStack.pop(); + currentFold.setEndOffset(t.getOffset()); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + t = tagNameToken; + } + } + } + + } + + t = t.getNextToken(); + + } + + } + + } catch (BadLocationException ble) { // Should never happen + ble.printStackTrace(); + } + + return folds; + + } + + + /** + * Grabs the token representing the closing of a tag (i.e. + * ">" or "/>"). This should only be + * called after a tag name has been parsed, to ensure the "closing" of + * other tags is not identified. + * + * @param tagNameToken The token denoting the name of the tag. + * @param textArea The text area whose contents are being parsed. + * @param line The line we're currently on. + * @param info On return, information about the closing of the tag is + * returned in this object. + * @return The line number of the closing tag token. + */ + private int getTagCloseInfo(Token tagNameToken, RSyntaxTextArea textArea, + int line, TagCloseInfo info) { + + info.reset(); + Token t = tagNameToken.getNextToken(); + + do { + + while (t!=null && t.getType()!=Token.MARKUP_TAG_DELIMITER) { + t = t.getNextToken(); + } + + if (t!=null) { + info.closeToken = t; + info.line = line; + break; + } + + } while (++line</...>") with a + * specific name is the closing tag of our current fold region. + * + * @param tagNameStack The stack of fold regions. + * @param tagNameToken The tag name of the most recently parsed closing + * tag. + * @return Whether it's the end of the current fold region. + */ + private static boolean isEndOfLastFold(Stack tagNameStack, + Token tagNameToken) { + if (tagNameToken!=null && !tagNameStack.isEmpty()) { + return tagNameToken.getLexeme().equalsIgnoreCase(tagNameStack.peek()); + } + return false; + } + + + /** + * Returns whether a tag is one we allow as a foldable region. + * + * @param tagNameToken The tag's name token. This may be null. + * @return Whether this tag can be a foldable region. + */ + private static boolean isFoldableTag(Token tagNameToken) { + return tagNameToken!=null && + FOLDABLE_TAGS.contains(tagNameToken.getLexeme().toLowerCase()); + } + + + /** + * If this fold has a parent fold, this method removes it from its parent. + * Otherwise, it's assumed to be the most recent (top-level) fold in the + * folds list, and is removed from that. + * + * @param fold The fold to remove. + * @param folds The list of top-level folds. + */ + private static void removeFold(Fold fold, List folds) { + if (!fold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + + + /** + * A simple wrapper for the token denoting the closing of a tag (i.e. + * ">" or "/>"). + */ + private static class TagCloseInfo { + + private Token closeToken; + private int line; + + public void reset() { + closeToken = null; + line = -1; + } + + @Override + public String toString() { + return "[TagCloseInfo: " + + "closeToken=" + closeToken + + ", line=" + line + + "]"; + } + + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java new file mode 100755 index 000000000..3da5e56f5 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/JsonFoldParser.java @@ -0,0 +1,163 @@ +/* + * 12/23/2012 + * + * JsonFoldParser.java - Fold parser for JSON. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenTypes; + + +/** + * The fold parser for JSON. Objects ("{ ... }") and arrays + * ("[ ... ]") that span multiple lines are considered fold + * regions. + * + * @author Robert Futrell + * @version 1.0 + */ +public class JsonFoldParser implements FoldParser { + + private static final Object OBJECT_BLOCK = new Object(); + private static final Object ARRAY_BLOCK = new Object(); + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + Stack blocks = new Stack<>(); + List folds = new ArrayList<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + + try { + + for (int line=0; linetrue. Otherwise, return false. + * + * @param stack The stack. + * @param value The value to check for. + * @return Whether the value was found on top of the stack. + */ + private static boolean popOffTop(Stack stack, Object value) { + if (stack.size()>0 && stack.peek()==value) { + stack.pop(); + return true; + } + return false; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java new file mode 100755 index 000000000..7d2f0ccfa --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/LatexFoldParser.java @@ -0,0 +1,109 @@ +/* + * 04/24/2012 + * + * LatexFoldParser.java - Fold parser for LaTeX. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; +import javax.swing.text.BadLocationException; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + + +/** + * A fold parser for LaTeX documents. This is likely incomplete and/or not + * quite right; feedback is appreciated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class LatexFoldParser implements FoldParser { + + private static final char[] BEGIN = "\\begin".toCharArray(); + private static final char[] END = "\\end".toCharArray(); + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + Stack expectedStack = new Stack<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + + try { + + for (int line=0; line + * + * Note that this class may impose somewhat of a performance penalty on large + * source files, since it re-parses the entire document each time folds are + * reevaluated. + * + * @author Robert Futrell + * @version 1.0 + */ +public class NsisFoldParser implements FoldParser { + + private static final char[] KEYWORD_FUNCTION = "Function".toCharArray(); + private static final char[] KEYWORD_FUNCTION_END = "FunctionEnd".toCharArray(); + private static final char[] KEYWORD_SECTION = "Section".toCharArray(); + private static final char[] KEYWORD_SECTION_END = "SectionEnd".toCharArray(); + + protected static final char[] C_MLC_END = "*/".toCharArray(); + + + private static boolean foundEndKeyword(char[] keyword, Token t, + Stack endWordStack) { + return t.is(Token.RESERVED_WORD, keyword) && !endWordStack.isEmpty() && + keyword==endWordStack.peek(); + } + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + Stack endWordStack = new Stack<>(); + + try { + + for (int line=0; line' }; + private static final char[] MLC_END = { '-', '-', '>' }; + + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + boolean inMLC = false; + int mlcStart = 0; + + try { + + for (int line=0; linefolds list, and is removed from that. + * + * @param fold The fold to remove. + * @param folds The list of top-level folds. + */ + private static void removeFold(Fold fold, List folds) { + if (!fold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/YamlFoldParser.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/YamlFoldParser.java new file mode 100755 index 000000000..08921d83e --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/folding/YamlFoldParser.java @@ -0,0 +1,133 @@ +/* + * + * YamlFoldParser.java - Fold parser for YAML. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.folding; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.Token; + +import javax.swing.text.BadLocationException; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; + + +/** + * Fold parser for YAML. Based on org.fife.ui.rsyntaxtextarea.folding.HtmlFoldParser. + * + * Fold is started by each line. + * Each fold contains all following lines with indent higher than the current line. + */ + +public class YamlFoldParser implements FoldParser { + + + /** + * Constructor. + * + */ + public YamlFoldParser() { + } + + private static boolean isSpaces(Token t) { + String lexeme = t.getLexeme(); + return lexeme.trim().isEmpty(); + } + + /** + * {@inheritDoc} + */ + @Override + public List getFolds(RSyntaxTextArea textArea) { + + List folds = new ArrayList<>(); + Stack indentStack = new Stack<>(); + + Fold currentFold = null; + int lineCount = textArea.getLineCount(); + + // closing needs to be done with offset of the previous line + int lastOffset = 0; + + try { + + for (int line=0; line= indent && currentFold != null) { + currentFold.setEndOffset(lastOffset); + Fold parentFold = currentFold.getParent(); + // Don't add fold markers for single-line blocks + if (currentFold.isOnSingleLine()) { + removeFold(currentFold, folds); + } + currentFold = parentFold; + indentStack.pop(); + } else { + break; + } + } + + // scan until the end of the line + while (t != null && t.isPaintable()) { + offset = t.getOffset(); + t = t.getNextToken(); + } + lastOffset = offset; + + if (currentFold==null) { + currentFold = new Fold(FoldType.CODE, textArea, startLine.getOffset()); + folds.add(currentFold); + } else { + currentFold = currentFold.createChild(FoldType.CODE, startLine.getOffset()); + } + indentStack.push(indent); + + } + + } catch (BadLocationException ble) { // Should never happen + ble.printStackTrace(); + } + + return folds; + + } + + + + /** + * If this fold has a parent fold, this method removes it from its parent. + * Otherwise, it's assumed to be the most recent (top-level) fold in the + * folds list, and is removed from that. + * + * @param fold The fold to remove. + * @param folds The list of top-level folds. + */ + private static void removeFold(Fold fold, List folds) { + if (!fold.removeFromParent()) { + folds.remove(folds.size()-1); + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java old mode 100644 new mode 100755 index 632d21fb9..aadb445bc --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AbstractMarkupTokenMaker.java @@ -3,59 +3,50 @@ * * AbstractMarkupTokenMaker.java - Base class for token makers for markup * languages. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; + /** * Base class for token makers for markup languages. - * + * * @author Robert Futrell * @version 1.0 */ public abstract class AbstractMarkupTokenMaker extends AbstractJFlexTokenMaker { - /** - * Returns whether markup close tags should be completed. - * - * @return Whether closing markup tags are to be completed. - */ - public abstract boolean getCompleteCloseTags(); - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "" }; - } - - /** - * Overridden to return true. - * - * @return true always. - */ - public final boolean isMarkupLanguage() { - return true; - } - -} \ No newline at end of file + + /** + * Returns whether markup close tags should be completed. + * + * @return Whether closing markup tags are to be completed. + */ + public abstract boolean getCompleteCloseTags(); + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "" }; + } + + + /** + * Overridden to return true. + * + * @return true always. + */ + @Override + public final boolean isMarkupLanguage() { + return true; + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex old mode 100644 new mode 100755 index 8cac04c76..7ddfcf918 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.flex @@ -2,23 +2,9 @@ * 04/27/2010 * * ActionScriptTokenMaker.java - Scanner for ActionScript. - * Copyright (C) 2010 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
      - *
    • The generated ActionScriptTokenMaker.java file will contain two + *
    • The generated ActionScriptTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -131,6 +117,7 @@ import org.fife.ui.rsyntaxtextarea.*; * occurs. * @param hyperlink Whether this token is a hyperlink. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); @@ -139,13 +126,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -185,7 +169,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -251,8 +235,8 @@ IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) -CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) -UnclosedCharLiteral = ([\'][^\'\n]*) +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})*[\']) +UnclosedCharLiteral = ([\']([\\].|[^\\\'])*[^\']*) ErrorCharLiteral = ({UnclosedCharLiteral}[\']) StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) @@ -386,7 +370,6 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "String" | "uint" | "Vector" | - "void" | "XML" | "XMLNode" | "XMLSocket" { addToken(Token.DATA_TYPE); } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java old mode 100644 new mode 100755 index 7e2c62c71..fe8eed653 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ActionScriptTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 5/12/10 4:49 PM */ +/* The following code was generated by JFlex 1.4.1 on 11/24/15 12:57 AM */ /* * 04/27/2010 * * ActionScriptTokenMaker.java - Scanner for ActionScript. - * Copyright (C) 2010 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,2089 +15,1943 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for the ActionScript. - *

      - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

      - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

      - * + * Scanner for the ActionScript.

      + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

      + * * If you wish to regenerate this file yourself, keep in mind the following: *

        - *
      • The generated ActionScriptTokenMaker.java file will contain two definitions of both zzRefill - * and yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
      • - *
      • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
      • - *
      • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
      • + *
      • The generated ActionScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
      • + *
      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
      • + *
      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
      • *
      - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class ActionScriptTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int EOL_COMMENT = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\21\1\10\1\0\1\21\1\17\22\0\1\72\1\50\1\15" + - "\1\20\1\1\1\50\1\52\1\7\2\55\1\23\1\43\1\42\1\31" + - "\1\32\1\22\1\4\3\16\4\6\2\3\1\53\1\42\1\44\1\45" + - "\1\47\1\51\1\54\1\100\1\5\1\76\1\26\1\30\1\74\1\1" + - "\1\114\1\113\1\1\1\101\1\25\1\102\1\103\1\104\1\110\1\115" + - "\1\112\1\106\1\77\1\111\1\107\1\1\1\24\2\1\1\55\1\11" + - "\1\55\1\46\1\2\1\0\1\36\1\14\1\64\1\62\1\35\1\27" + - "\1\73\1\56\1\60\1\105\1\63\1\37\1\67\1\13\1\65\1\57" + - "\1\70\1\34\1\40\1\33\1\12\1\75\1\61\1\71\1\66\1\1" + - "\1\41\1\46\1\41\1\51\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\1\2\2\3\1\2\1\4\1\5\3\2" + - "\1\6\2\1\1\7\2\10\3\2\1\10\7\2\1\11" + - "\1\2\5\10\22\2\1\12\1\13\5\12\1\14\3\12" + - "\1\1\1\15\1\3\1\16\1\15\1\16\1\15\1\17" + - "\1\15\1\2\1\4\1\20\1\0\1\4\5\2\1\21" + - "\3\2\2\6\1\22\1\1\1\23\1\24\21\2\1\21" + - "\12\2\1\0\1\10\4\2\2\21\11\2\1\21\2\2" + - "\1\21\17\2\1\25\10\0\1\1\1\16\1\0\2\17" + - "\1\2\1\4\1\26\2\4\1\20\1\4\6\2\1\21" + - "\4\2\1\6\1\27\1\6\1\1\1\0\1\30\5\2" + - "\1\21\23\2\1\21\11\2\1\30\20\2\1\21\4\2" + - "\1\30\12\2\10\0\1\1\1\2\1\4\10\2\1\6" + - "\1\1\1\31\5\2\1\0\1\32\13\2\1\33\3\2" + - "\1\33\40\2\2\0\1\34\2\0\1\35\1\1\1\2" + - "\1\4\7\2\1\6\1\1\4\2\1\21\1\0\17\2" + - "\1\33\23\2\4\0\1\1\1\2\1\4\6\2\1\6" + - "\1\1\4\2\1\0\35\2\1\1\2\2\1\0\24\2" + - "\1\33\1\2\1\21\25\2\1\33\40\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[531]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\20\1\10\1\0\1\20\1\16\22\0\1\71\1\47\1\15"+ + "\1\17\1\1\1\47\1\51\1\7\2\54\1\22\1\42\1\41\1\30"+ + "\1\31\1\21\1\4\3\6\4\6\2\3\1\52\1\41\1\43\1\44"+ + "\1\46\1\50\1\53\1\77\1\5\1\75\1\25\1\27\1\73\1\1"+ + "\1\113\1\112\1\1\1\100\1\24\1\101\1\102\1\103\1\107\1\114"+ + "\1\111\1\105\1\76\1\110\1\106\1\1\1\23\2\1\1\54\1\11"+ + "\1\54\1\45\1\2\1\0\1\35\1\14\1\63\1\61\1\34\1\26"+ + "\1\72\1\55\1\57\1\104\1\62\1\36\1\66\1\13\1\64\1\56"+ + "\1\67\1\33\1\37\1\32\1\12\1\74\1\60\1\70\1\65\1\1"+ + "\1\40\1\45\1\40\1\50\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\1\2\2\3\1\2\1\4\1\5\3\2"+ + "\1\6\2\1\1\7\2\10\3\2\1\10\7\2\1\11"+ + "\1\2\5\10\22\2\1\12\1\13\5\12\1\14\3\12"+ + "\1\1\1\15\1\3\1\16\1\15\1\16\1\15\1\17"+ + "\1\15\1\2\1\20\1\4\5\2\1\21\3\2\2\6"+ + "\1\22\1\1\1\23\1\24\21\2\1\21\12\2\1\0"+ + "\1\10\4\2\2\21\11\2\1\21\2\2\1\21\17\2"+ + "\1\25\10\0\1\1\1\16\1\0\2\17\1\2\3\4"+ + "\6\2\1\21\4\2\1\6\1\26\1\6\1\1\1\0"+ + "\1\27\5\2\1\21\23\2\1\21\11\2\1\27\20\2"+ + "\1\21\4\2\1\27\12\2\10\0\1\1\1\2\1\30"+ + "\2\4\10\2\1\6\1\1\1\31\5\2\1\0\1\32"+ + "\13\2\1\33\3\2\1\33\40\2\2\0\1\34\2\0"+ + "\1\35\1\1\1\2\1\4\7\2\1\6\1\1\4\2"+ + "\1\21\1\0\17\2\1\33\23\2\4\0\1\1\1\2"+ + "\1\4\6\2\1\6\1\1\4\2\1\0\35\2\1\1"+ + "\2\2\1\0\24\2\1\33\1\2\1\21\25\2\1\33"+ + "\40\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[528]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u03e9\0\u02b5\0\u0436"+ + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e"+ + "\0\u06eb\0\u0738\0\u0785\0\u07d2\0\u081f\0\u086c\0\u02b5\0\u02b5"+ + "\0\u08b9\0\u0906\0\u0953\0\u02b5\0\u09a0\0\u09ed\0\u0a3a\0\u0a87"+ + "\0\u0ad4\0\u0b21\0\u0b6e\0\u0bbb\0\u0c08\0\u0c55\0\u0ca2\0\u0cef"+ + "\0\u0d3c\0\u0d89\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd\0\u0f0a\0\u0f57"+ + "\0\u02b5\0\u0fa4\0\u0ff1\0\u103e\0\u108b\0\u10d8\0\u02b5\0\u1125"+ + "\0\u1172\0\u11bf\0\u120c\0\u1259\0\u1259\0\u1259\0\u12a6\0\u12f3"+ + "\0\u1340\0\u138d\0\u13da\0\u1427\0\u02b5\0\u1474\0\u14c1\0\u150e"+ + "\0\u155b\0\u15a8\0\u15f5\0\u1642\0\u168f\0\u16dc\0\u1729\0\u1776"+ + "\0\u17c3\0\u02b5\0\u1810\0\u02b5\0\u185d\0\u18aa\0\u18f7\0\u1944"+ + "\0\u1991\0\u19de\0\u1a2b\0\u1a78\0\u1ac5\0\u1b12\0\u1b5f\0\u1bac"+ + "\0\u1bf9\0\u1c46\0\u1c93\0\u1ce0\0\u1d2d\0\u1d7a\0\u0134\0\u1dc7"+ + "\0\u1e14\0\u1e61\0\u1eae\0\u1efb\0\u1f48\0\u1f95\0\u1fe2\0\u202f"+ + "\0\u207c\0\u051d\0\u20c9\0\u2116\0\u2163\0\u21b0\0\u21fd\0\u224a"+ + "\0\u2297\0\u22e4\0\u2331\0\u237e\0\u23cb\0\u2418\0\u2465\0\u24b2"+ + "\0\u24ff\0\u254c\0\u2599\0\u25e6\0\u2633\0\u2680\0\u26cd\0\u271a"+ + "\0\u2767\0\u27b4\0\u2801\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982"+ + "\0\u29cf\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u02b5\0\u2b50\0\u2b9d"+ + "\0\u2bea\0\u2c37\0\u2c84\0\u2cd1\0\u2d1e\0\u2d6b\0\u2db8\0\u2e05"+ + "\0\u2e52\0\u1259\0\u2e9f\0\u2eec\0\u2f39\0\u2f86\0\u2fd3\0\u3020"+ + "\0\u306d\0\u30ba\0\u3107\0\u3154\0\u31a1\0\u31ee\0\u323b\0\u3288"+ + "\0\u32d5\0\u3322\0\u336f\0\u02b5\0\u33bc\0\u3409\0\u3456\0\u34a3"+ + "\0\u34f0\0\u353d\0\u358a\0\u35d7\0\u3624\0\u3671\0\u36be\0\u370b"+ + "\0\u3758\0\u37a5\0\u37f2\0\u383f\0\u388c\0\u38d9\0\u3926\0\u3973"+ + "\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb"+ + "\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c\0\u3da9\0\u3df6\0\u3e43"+ + "\0\u3e90\0\u3edd\0\u3f2a\0\u3f77\0\u3fc4\0\u4011\0\u405e\0\u40ab"+ + "\0\u40f8\0\u4145\0\u4192\0\u41df\0\u422c\0\u4279\0\u42c6\0\u4313"+ + "\0\u4360\0\u43ad\0\u43fa\0\u4447\0\u4494\0\u44e1\0\u452e\0\u457b"+ + "\0\u45c8\0\u0134\0\u4615\0\u4662\0\u46af\0\u46fc\0\u4749\0\u4796"+ + "\0\u47e3\0\u4830\0\u487d\0\u48ca\0\u4917\0\u4964\0\u49b1\0\u49fe"+ + "\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f\0\u4bcc\0\u02b5\0\u4c19"+ + "\0\u4c66\0\u4cb3\0\u4d00\0\u4d4d\0\u4d9a\0\u4de7\0\u4e34\0\u4e81"+ + "\0\u4ece\0\u4f1b\0\u4f68\0\u02b5\0\u4fb5\0\u5002\0\u504f\0\u509c"+ + "\0\u50e9\0\u5136\0\u0134\0\u5183\0\u51d0\0\u521d\0\u526a\0\u52b7"+ + "\0\u5304\0\u5351\0\u539e\0\u53eb\0\u5438\0\u5485\0\u0134\0\u54d2"+ + "\0\u551f\0\u556c\0\u55b9\0\u5606\0\u5653\0\u56a0\0\u56ed\0\u573a"+ + "\0\u5787\0\u57d4\0\u5821\0\u586e\0\u58bb\0\u5908\0\u5955\0\u59a2"+ + "\0\u59ef\0\u5a3c\0\u5a89\0\u5ad6\0\u5b23\0\u5b70\0\u5bbd\0\u5c0a"+ + "\0\u5c57\0\u5ca4\0\u5cf1\0\u5d3e\0\u5d8b\0\u5dd8\0\u5e25\0\u5e72"+ + "\0\u5ebf\0\u5f0c\0\u5f59\0\u5fa6\0\u5ff3\0\u6040\0\u608d\0\u60da"+ + "\0\u6127\0\u6174\0\u61c1\0\u620e\0\u625b\0\u62a8\0\u62f5\0\u6342"+ + "\0\u638f\0\u63dc\0\u6429\0\u6476\0\u64c3\0\u6510\0\u655d\0\u65aa"+ + "\0\u65f7\0\u6644\0\u6691\0\u66de\0\u672b\0\u6778\0\u67c5\0\u6812"+ + "\0\u685f\0\u68ac\0\u68f9\0\u6946\0\u6993\0\u69e0\0\u6a2d\0\u6a7a"+ + "\0\u6ac7\0\u6b14\0\u6b61\0\u6bae\0\u6bfb\0\u6c48\0\u6c95\0\u6ce2"+ + "\0\u6d2f\0\u6d7c\0\u6dc9\0\u6e16\0\u6e63\0\u6eb0\0\u6efd\0\u6f4a"+ + "\0\u6f97\0\u6fe4\0\u7031\0\u707e\0\u70cb\0\u7118\0\u7165\0\u6040"+ + "\0\u71b2\0\u6127\0\u71ff\0\u724c\0\u7299\0\u72e6\0\u7333\0\u7380"+ + "\0\u73cd\0\u741a\0\u7467\0\u74b4\0\u7501\0\u754e\0\u759b\0\u75e8"+ + "\0\u7635\0\u7682\0\u76cf\0\u771c\0\u7769\0\u77b6\0\u7803\0\u7850"+ + "\0\u789d\0\u78ea\0\u7937\0\u7984\0\u79d1\0\u7a1e\0\u7a6b\0\u7ab8"+ + "\0\u7b05\0\u7b52\0\u7b9f\0\u7bec\0\u7c39\0\u7c86\0\u7cd3\0\u7d20"+ + "\0\u7d6d\0\u7dba\0\u7e07\0\u7e54\0\u7ea1\0\u7eee\0\u7f3b\0\u7f88"+ + "\0\u7fd5\0\u8022\0\u806f\0\u80bc\0\u8109\0\u8156\0\u81a3\0\u81f0"+ + "\0\u823d\0\u828a\0\u82d7\0\u8324\0\u8371\0\u83be\0\u840b\0\u8458"+ + "\0\u84a5\0\u84f2\0\u853f\0\u858c\0\u85d9\0\u8626\0\u8673\0\347"+ + "\0\u86c0\0\u02b5\0\u870d\0\u875a\0\u87a7\0\u87f4\0\u8841\0\u888e"+ + "\0\u88db\0\u8928\0\u8975\0\u89c2\0\u8a0f\0\u8a5c\0\u8aa9\0\u8af6"+ + "\0\u8b43\0\u8b90\0\u8bdd\0\u8c2a\0\u8c77\0\u8cc4\0\u8d11\0\u8d5e"+ + "\0\u8dab\0\u8df8\0\u8e45\0\u8e92\0\u8edf\0\u8f2c\0\u8f79\0\u8fc6"+ + "\0\u9013\0\u9060\0\u90ad\0\u90fa\0\u9147\0\u9194\0\u91e1\0\u922e"+ + "\0\u927b\0\u92c8\0\u9315\0\u9362\0\u93af\0\u93fc\0\u9449\0\u9496"+ + "\0\u94e3\0\u9530\0\u957d\0\u95ca\0\u9617\0\u9664\0\u96b1\0\u96fe"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[528]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222" + - "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u02be\0\u0444" + - "\0\u0492\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4" + - "\0\u0702\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u02be\0\u02be" + - "\0\u08d6\0\u0924\0\u0972\0\u02be\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa" + - "\0\u0af8\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc\0\u0d1a" + - "\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0f8a" + - "\0\u02be\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110\0\u02be\0\u115e" + - "\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u1296\0\u1296\0\u12e4\0\u1332" + - "\0\u1380\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u02be\0\u1506\0\u1554" + - "\0\u15a2\0\u15f0\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4" + - "\0\u1812\0\u1860\0\u18ae\0\u02be\0\u18fc\0\u02be\0\u194a\0\u1998" + - "\0\u19e6\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08" + - "\0\u1c56\0\u1ca4\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78" + - "\0\u0138\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a" + - "\0\u20e8\0\u2136\0\u2184\0\u052e\0\u21d2\0\u2220\0\u226e\0\u22bc" + - "\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c" + - "\0\u257a\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c" + - "\0\u27ea\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c" + - "\0\u2a5a\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u02be" + - "\0\u2c7c\0\u2cca\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e" + - "\0\u2eec\0\u2f3a\0\u2f88\0\u1296\0\u2fd6\0\u3024\0\u3072\0\u02be" + - "\0\u30c0\0\u310e\0\u1506\0\u315c\0\u31aa\0\u31f8\0\u3246\0\u3294" + - "\0\u32e2\0\u3330\0\u337e\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504" + - "\0\u02be\0\u3552\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726" + - "\0\u3774\0\u37c2\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996" + - "\0\u39e4\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06" + - "\0\u3c54\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76" + - "\0\u3ec4\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6" + - "\0\u4134\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356" + - "\0\u43a4\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6" + - "\0\u4614\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u0138\0\u47e8" + - "\0\u4836\0\u4884\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58" + - "\0\u4aa6\0\u4af4\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8" + - "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38" + - "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u02be\0\u515a" + - "\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u0138\0\u532e\0\u537c" + - "\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec" + - "\0\u563a\0\u0138\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e" + - "\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e" + - "\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee" + - "\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e" + - "\0\u5fac\0\u5ffa\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce" + - "\0\u621c\0\u626a\0\u62b8\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e" + - "\0\u648c\0\u64da\0\u6528\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae" + - "\0\u66fc\0\u674a\0\u6798\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e" + - "\0\u696c\0\u69ba\0\u6a08\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e" + - "\0\u6bdc\0\u6c2a\0\u6c78\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe" + - "\0\u6e4c\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e" + - "\0\u70bc\0\u710a\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de" + - "\0\u732c\0\u737a\0\u621c\0\u73c8\0\u6306\0\u7416\0\u7464\0\u74b2" + - "\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638\0\u7686\0\u76d4\0\u7722" + - "\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8\0\u78f6\0\u7944\0\u7992" + - "\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca\0\u7b18\0\u7b66\0\u7bb4\0\u7c02" + - "\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a\0\u7d88\0\u7dd6\0\u7e24\0\u7e72" + - "\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa\0\u7ff8\0\u8046\0\u8094\0\u80e2" + - "\0\u8130\0\u817e\0\u81cc\0\u821a\0\u8268\0\u82b6\0\u8304\0\u8352" + - "\0\u83a0\0\u83ee\0\u843c\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2" + - "\0\u8610\0\u865e\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832" + - "\0\u8880\0\u88ce\0\352\0\u891c\0\u02be\0\u896a\0\u89b8\0\u8a06" + - "\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda\0\u8c28\0\u8c76" + - "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a\0\u8e98\0\u8ee6" + - "\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba\0\u9108\0\u9156" + - "\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a\0\u9378\0\u93c6" + - "\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a\0\u95e8\0\u9636" + - "\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6" + - "\0\u98f4\0\u9942\0\u9990"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[531]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\2\5\1\6\1\7\1\10\1\6\1\11\1\12"+ + "\1\4\1\13\1\14\1\15\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\1\24\1\5\1\25\1\26\1\5\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37"+ + "\1\40\1\41\1\42\2\23\1\43\1\23\1\44\1\45"+ + "\1\44\1\4\1\37\1\5\1\46\1\47\1\50\1\51"+ + "\1\5\1\52\1\53\1\5\1\54\2\5\1\21\1\55"+ + "\1\56\1\57\1\60\1\5\1\61\1\62\1\63\1\64"+ + "\1\65\1\5\1\66\1\67\6\5\10\70\1\71\11\70"+ + "\1\72\3\70\1\73\26\70\1\74\2\70\1\75\34\70"+ + "\10\76\1\77\15\76\1\100\26\76\1\101\2\76\1\102"+ + "\34\76\7\4\2\0\4\4\2\0\1\4\3\0\5\4"+ + "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\24\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\104\2\6\1\104\1\6\2\0\4\104\2\0\1\104"+ + "\3\0\1\104\1\105\2\106\1\107\1\0\1\110\2\104"+ + "\1\107\1\104\1\105\1\104\13\0\1\104\1\0\4\104"+ + "\1\106\7\104\1\0\1\104\1\106\24\104\1\111\1\112"+ + "\1\104\1\112\2\0\4\104\2\0\1\104\3\0\1\113"+ + "\1\105\2\106\1\107\1\0\1\110\2\104\1\107\1\104"+ + "\1\105\1\104\13\0\1\104\1\0\4\104\1\106\6\104"+ + "\1\113\1\0\1\104\1\106\21\104\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\114\4\5\1\0\23\5"+ + "\7\11\1\115\1\11\1\116\103\11\115\0\1\4\6\5"+ + "\2\0\1\103\1\5\1\117\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\5\5\1\120\13\0\1\4\1\0\1\5"+ + "\1\121\1\122\11\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\123\2\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\124\1\125\2\5\13\0\1\4\1\0\7\5"+ + "\1\126\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\127"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\10\16"+ + "\1\130\1\131\3\16\1\132\77\16\7\4\2\0\4\4"+ + "\2\0\1\4\3\0\5\4\2\0\6\4\13\0\1\4"+ + "\1\0\2\4\1\133\11\4\1\0\23\4\20\0\1\21"+ + "\50\0\1\21\44\0\1\134\1\135\21\0\1\44\114\0"+ + "\1\44\50\0\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\7\5\1\136\13\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\137\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\140\2\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\141\1\5\1\142\13\0"+ + "\1\4\1\0\2\5\1\143\4\5\1\144\4\5\1\0"+ + "\23\5\30\0\1\44\13\0\1\44\53\0\2\110\1\0"+ + "\1\110\106\0\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\145\1\146\1\147"+ + "\2\5\13\0\1\4\1\0\1\150\6\5\1\151\1\152"+ + "\3\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\153\1\154"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\155\1\156\13\0\1\4\1\0\12\5"+ + "\1\157\1\160\1\0\2\5\1\161\20\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\162\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\162"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\157\1\5\1\157"+ + "\1\163\2\5\13\0\1\4\1\0\7\5\1\164\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\165\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\166\1\5\1\167"+ + "\3\5\13\0\1\4\1\0\3\5\1\170\2\5\1\171"+ + "\5\5\1\0\23\5\42\0\1\44\1\0\1\44\113\0"+ + "\1\172\1\44\114\0\1\44\1\0\1\173\112\0\1\44"+ + "\4\0\1\44\43\0\1\4\6\5\2\0\1\103\1\174"+ + "\2\5\2\0\1\4\3\0\5\5\2\0\1\5\1\175"+ + "\1\5\1\176\1\177\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\200"+ + "\1\5\2\0\1\4\3\0\3\5\1\201\1\5\2\0"+ + "\5\5\1\202\13\0\1\4\1\0\11\5\1\203\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\1\204\1\5\1\205\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\206\3\5\13\0\1\4\1\0\7\5\1\157"+ + "\1\207\3\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\210"+ + "\1\211\1\5\13\0\1\4\1\0\7\5\1\212\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\213"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\1\5\1\157"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\2\5\1\214"+ + "\20\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\215\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\157\1\5"+ + "\1\216\3\5\13\0\1\4\1\0\7\5\1\217\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\220\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\221"+ + "\2\5\13\0\1\4\1\0\7\5\1\222\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ + "\1\223\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\224"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\225\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\3\5\1\226\2\5\13\0"+ + "\1\4\1\0\7\5\1\227\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\230\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\2\5\1\231\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\232\1\5\1\233"+ + "\3\5\13\0\1\4\1\0\7\5\1\234\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\235\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\10\70\1\0\11\70\1\0"+ + "\3\70\1\0\26\70\1\0\2\70\1\0\34\70\21\0"+ + "\1\236\125\0\1\237\24\0\1\240\67\0\1\241\142\0"+ + "\1\242\34\0\10\76\1\0\15\76\1\0\26\76\1\0"+ + "\2\76\1\0\34\76\32\0\1\243\24\0\1\244\67\0"+ + "\1\245\142\0\1\246\34\0\7\4\2\0\1\4\1\247"+ + "\2\4\2\0\1\4\3\0\5\4\2\0\6\4\13\0"+ + "\1\4\1\0\14\4\1\0\23\4\7\104\2\0\4\104"+ + "\2\0\1\104\3\0\5\104\2\0\6\104\13\0\1\104"+ + "\1\0\14\104\1\0\26\104\2\250\1\104\1\250\2\0"+ + "\4\104\2\0\1\104\3\0\5\104\1\251\1\0\6\104"+ + "\2\0\1\251\10\0\1\104\1\0\14\104\1\0\26\104"+ + "\2\110\1\104\1\110\2\0\4\104\2\0\1\104\3\0"+ + "\2\104\2\106\1\107\2\0\2\104\1\107\3\104\13\0"+ + "\1\104\1\0\4\104\1\106\7\104\1\0\1\104\1\106"+ + "\24\104\2\111\1\104\1\111\2\0\4\104\2\0\1\104"+ + "\3\0\2\104\2\106\1\107\1\0\1\110\2\104\1\107"+ + "\3\104\13\0\1\104\1\0\4\104\1\106\7\104\1\0"+ + "\1\104\1\106\24\104\1\111\1\112\1\104\1\112\2\0"+ + "\4\104\2\0\1\104\3\0\1\104\1\252\2\106\1\107"+ + "\1\0\1\110\2\104\1\107\1\104\1\252\1\104\13\0"+ + "\1\104\1\0\4\104\1\106\7\104\1\0\1\104\1\106"+ + "\24\104\4\253\2\0\3\104\1\253\2\0\1\104\3\0"+ + "\2\104\3\253\2\0\2\104\2\253\2\104\13\0\1\104"+ + "\1\0\4\104\1\253\1\104\1\253\5\104\1\0\1\104"+ + "\1\253\1\104\1\253\1\104\1\253\15\104\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\254\4\5\1\0"+ + "\23\5\4\255\1\11\1\255\2\11\1\256\1\11\1\257"+ + "\3\11\10\255\1\11\3\255\2\11\61\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\260\1\5\1\261\1\5\13\0\1\4\1\0"+ + "\4\5\1\262\7\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\157\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\263"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\264\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\265\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\3\5"+ + "\1\266\7\5\1\267\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\270"+ + "\5\5\13\0\1\4\1\0\11\5\1\271\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\157\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\272\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\11\130\1\273"+ + "\3\130\1\274\103\130\1\16\1\130\2\16\1\0\1\16"+ + "\1\275\3\16\10\130\1\16\3\130\2\16\61\130\7\4"+ + "\2\0\2\4\1\276\1\4\2\0\1\4\3\0\5\4"+ + "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\23\4"+ + "\22\0\1\277\72\0\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\1\5\1\300\3\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\301\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\302\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\303\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\304\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\305\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\306"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\307\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\310\2\5\13\0\1\4\1\0"+ + "\10\5\1\157\3\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\311\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\5\1\312\4\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\313\4\5"+ + "\13\0\1\4\1\0\2\5\1\314\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\315\22\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\1\5\1\316\12\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\317"+ + "\5\5\13\0\1\4\1\0\11\5\1\320\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\321\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\5\5\1\120"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\322\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\323\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\3\5\1\324\2\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\4\5\1\157\7\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\2\5\1\325\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\3\5\1\326\2\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\1\5\1\327\12\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\330\2\5\13\0\1\4"+ + "\1\0\7\5\1\331\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\332\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\333"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\334\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\44\0\1\44"+ + "\1\0\1\23\46\0\1\4\6\5\2\0\1\103\2\5"+ + "\1\335\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\336\3\5\13\0\1\4\1\0\2\5\1\337\4\5"+ + "\1\340\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\341"+ + "\4\5\13\0\1\4\1\0\6\5\1\342\5\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\343\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\344\5\5"+ + "\13\0\1\4\1\0\6\5\1\345\5\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\5\1\346\21\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\1\5\1\347\6\5\1\350\12\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\351"+ + "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\352\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\353\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\3\5\1\354\1\5\2\0\4\5\1\355\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\5\1\356\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\357\3\5\1\324\1\120\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\360"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\5\1\361\1\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\3\5\1\362\17\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\363\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\13\5\1\364"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\365\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\366\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\367\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\5\1\157\4\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\162\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\370\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\371\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\10\5\1\372\3\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\373\5\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\374\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\2\5\1\375\20\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\376\1\5\13\0\1\4\1\0\11\5\1\377"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\12\5\1\u0100\10\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u0101\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u0102\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0103\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\6\5\1\u0104\5\5\1\0"+ + "\23\5\56\0\1\u0105\74\0\1\u0106\110\0\1\u0107\142\0"+ + "\1\u0108\112\0\1\u0109\74\0\1\u010a\110\0\1\u010b\142\0"+ + "\1\u010c\34\0\3\4\4\u010d\2\0\3\4\1\u010d\2\0"+ + "\1\4\3\0\2\4\3\u010d\2\0\2\4\2\u010d\2\4"+ + "\13\0\1\4\1\0\4\4\1\u010d\1\4\1\u010d\5\4"+ + "\1\0\1\4\1\u010d\1\4\1\u010d\1\4\1\u010d\15\4"+ + "\3\104\2\250\1\104\1\250\2\0\4\104\2\0\1\104"+ + "\3\0\2\104\2\106\1\104\2\0\6\104\13\0\1\104"+ + "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\21\104"+ + "\3\0\2\250\1\0\1\250\106\0\3\104\4\253\2\0"+ + "\3\104\1\253\2\0\1\104\3\0\1\104\1\252\3\253"+ + "\2\0\2\104\2\253\1\252\1\104\13\0\1\104\1\0"+ + "\4\104\1\253\1\104\1\253\5\104\1\0\1\104\1\253"+ + "\1\104\1\253\1\104\1\253\15\104\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u010e\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\7\255\1\u010f\1\255\1\u0110\103\255\7\256\1\u010f\105\256"+ + "\3\255\4\u0111\1\u010f\1\255\1\u0110\2\255\1\u0111\10\255"+ + "\3\u0111\4\255\2\u0111\23\255\1\u0111\1\255\1\u0111\7\255"+ + "\1\u0111\1\255\1\u0111\1\255\1\u0111\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\156\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0112"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u0113\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u0114\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\372\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\157\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u0115\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\u0116\5\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u0117\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u0118\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u0119\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\10\130\1\0\107\130\4\u011a"+ + "\2\130\1\273\2\130\1\u011a\1\274\7\130\3\u011a\4\130"+ + "\2\u011a\23\130\1\u011a\1\130\1\u011a\7\130\1\u011a\1\130"+ + "\1\u011a\1\130\1\u011a\15\130\7\4\2\0\4\4\2\0"+ + "\1\4\3\0\5\4\2\0\6\4\13\0\1\4\1\0"+ + "\6\4\1\u011b\5\4\1\0\23\4\21\0\1\u011c\73\0"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\10\5\1\u011d\2\5\1\u011e\7\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\372\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u011f"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\307\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u0120\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u0121\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\u0122\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u0123"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\6\5\1\u0124\5\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\u0125\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\1\u0126\22\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u0127\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\5\5\1\157\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\1\u0128\22\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u0129\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\u012a\2\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u012b\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\4\5\1\u012c\7\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u012d\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u012e"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\u012f\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\265\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\u0130\7\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\221\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\u0131\1\u0132\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\1\5\1\u0133\12\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\15\5\1\u0134\5\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\357\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u0135\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u0131\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\2\5\1\u0116\20\5\1\4"+ + "\6\5\2\0\1\103\1\5\1\u0136\1\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\2\5\1\u0137\20\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u0138\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u0139\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\5\5\1\u013a"+ + "\6\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\10\5\1\u012f\3\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\2\5\1\u013b\3\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u013c\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\u013d"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u013e\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\3\5\1\u013f\2\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u0140\1\5\13\0\1\4\1\0\7\5\1\u0141\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\120\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\157\13\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u0142\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u0143\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u0144\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\353"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\314\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u0145"+ + "\4\5\1\126\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\u0146\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\u0147\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u0148\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\4\5\1\u0149\7\5\1\u014a\1\u0134\1\u014b\4\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u014c\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\6\5\1\u014d\5\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u014e\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\225\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\1\372\13\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\5\5"+ + "\1\301\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u014f\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\372\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\2\5\1\u0150\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u0151\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\2\5\1\u0152\11\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\367\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u0153\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\370\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\52\0\1\u0154\76\0"+ + "\1\u0105\136\0\1\u0155\67\0\1\u0156\135\0\1\u0157\76\0"+ + "\1\u0109\136\0\1\u0158\67\0\1\u0159\63\0\3\4\4\u015a"+ + "\2\0\3\4\1\u015a\2\0\1\4\3\0\2\4\3\u015a"+ + "\2\0\2\4\2\u015a\2\4\13\0\1\4\1\0\4\4"+ + "\1\u015a\1\4\1\u015a\5\4\1\0\1\4\1\u015a\1\4"+ + "\1\u015a\1\4\1\u015a\16\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u015b\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\10\255\1\256"+ + "\107\255\4\u015c\1\u010f\1\255\1\u0110\2\255\1\u015c\10\255"+ + "\3\u015c\4\255\2\u015c\23\255\1\u015c\1\255\1\u015c\7\255"+ + "\1\u015c\1\255\1\u015c\1\255\1\u015c\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u015d\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\3\5\1\u015e\1\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u015f\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\2\5\1\u0160\11\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\1\5\1\u0161\11\5\1\u0162\7\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\2\5\1\120"+ + "\20\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\5\5\1\u0163\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\5\5\1\157\6\5\1\0\23\5\3\130\4\u0164"+ + "\2\130\1\273\2\130\1\u0164\1\274\7\130\3\u0164\4\130"+ + "\2\u0164\23\130\1\u0164\1\130\1\u0164\7\130\1\u0164\1\130"+ + "\1\u0164\1\130\1\u0164\15\130\7\4\2\0\4\4\2\0"+ + "\1\4\3\0\5\4\2\0\4\4\1\u0165\1\4\13\0"+ + "\1\4\1\0\14\4\1\0\24\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\7\5\1\u0166\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u0167\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u0168\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\11\5\1\u0169\2\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\4\5\1\u016a\1\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\34\0\1\u016b\60\0\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u012f\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\4\5\1\u016c\16\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u016d\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\3\5\1\157\10\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u016e\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\7\5\1\u016f\4\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\1\5\1\u0170\4\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u0171\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\7\5\1\u0172\4\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\u0124"+ + "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\u0173\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0174"+ + "\4\5\1\u0175\6\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u0176\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u0177\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\2\5\1\u0178\2\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\5\5\1\u0179\15\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\5"+ + "\1\u017a\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\324\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\u017b\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u0143\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u017c\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u017d\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u017e\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\1\5\1\u017f\4\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0180\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\3\5\1\u0181\2\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0182\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\10\5\1\u012f\12\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u0183\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\126\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\u0184\2\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\1\120\5\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ + "\1\u0131\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u0185\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0186\11\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u0187\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\6\5\1\171\5\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0188"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u0189\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\17\5\1\u018a"+ + "\3\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\5\5\1\u018b\15\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u018c\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\372\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\u018d\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u014e"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\6\5\1\264\5\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\u018e"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\372\7\5\1\0\23\5"+ + "\21\0\1\u018f\132\0\1\u0105\12\0\1\u0154\43\0\1\u0156"+ + "\1\u0190\4\u0156\1\u0190\2\0\3\u0156\2\0\1\u0190\1\0"+ + "\1\u0156\1\u0190\5\u0156\2\u0190\6\u0156\1\0\2\u0190\1\0"+ + "\1\u0190\2\0\6\u0190\14\u0156\1\0\23\u0156\21\0\1\u0191"+ + "\132\0\1\u0109\12\0\1\u0157\43\0\1\u0159\1\u0192\4\u0159"+ + "\1\u0192\2\0\3\u0159\2\0\1\u0192\1\0\1\u0159\1\u0192"+ + "\5\u0159\2\u0192\6\u0159\1\0\2\u0192\1\0\1\u0192\2\0"+ + "\6\u0192\14\u0159\1\0\23\u0159\3\4\4\u0193\2\0\3\4"+ + "\1\u0193\2\0\1\4\3\0\2\4\3\u0193\2\0\2\4"+ + "\2\u0193\2\4\13\0\1\4\1\0\4\4\1\u0193\1\4"+ + "\1\u0193\5\4\1\0\1\4\1\u0193\1\4\1\u0193\1\4"+ + "\1\u0193\16\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u0194\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\3\255\4\u0195\1\u010f\1\255"+ + "\1\u0110\2\255\1\u0195\10\255\3\u0195\4\255\2\u0195\23\255"+ + "\1\u0195\1\255\1\u0195\7\255\1\u0195\1\255\1\u0195\1\255"+ + "\1\u0195\15\255\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\4\5\1\u0196\7\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\2\5\1\u0197\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u0198\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5"+ + "\1\u0124\1\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u0199\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5"+ + "\1\u019a\5\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\1\5\1\u019b\12\5\1\0\23\5\3\130"+ + "\4\u019c\2\130\1\273\2\130\1\u019c\1\274\7\130\3\u019c"+ + "\4\130\2\u019c\23\130\1\u019c\1\130\1\u019c\7\130\1\u019c"+ + "\1\130\1\u019c\1\130\1\u019c\15\130\7\4\2\0\1\4"+ + "\1\u019d\2\4\2\0\1\4\3\0\5\4\2\0\6\4"+ + "\13\0\1\4\1\0\14\4\1\0\24\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\4\5\1\301\7\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u019e"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u019f\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\11\5\1\u01a0\2\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\4\5\1\u01a1\1\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\35\0\1\u01a2\57\0\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01a3\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u01a4\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01a5"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\3\5"+ + "\1\157\1\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\157"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u01a6\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u012f"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\4\5\1\314\7\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u01a7\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\3\5\1\u01a8\2\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\6\5\1\157\5\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\2\5"+ + "\1\u0178\2\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u01a9\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u01aa\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u01ab"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\5\5\1\u01ac\2\5\1\u01ad\12\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u01ae"+ + "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\1\5\1\u01af\16\5\1\u01b0\2\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\120\22\5\1\4\6\5\2\0\1\103\1\5\1\u01b1"+ + "\1\5\2\0\1\4\3\0\3\5\1\u019b\1\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\4\5\1\120\7\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\11\5\1\u01b2\2\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\2\5\1\u01b3\11\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u01b4"+ + "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\126\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\u01b5\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\1\5"+ + "\1\u01b6\12\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u0180\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\11\5\1\u01b7\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\5\1\u01b8\4\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\1\5\1\u012f\3\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u01b9\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01ba\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\3\5\1\u01bb"+ + "\17\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\1\372\22\5\21\0\1\u0156\114\0\1\u0159\73\0"+ + "\3\4\4\5\2\0\3\4\1\5\2\0\1\4\3\0"+ + "\2\4\3\5\2\0\2\4\2\5\2\4\13\0\1\4"+ + "\1\0\4\4\1\5\1\4\1\5\5\4\1\0\1\4"+ + "\1\5\1\4\1\5\1\4\1\5\16\4\6\5\2\0"+ + "\1\103\1\5\1\372\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\255\4\11\1\u010f\1\255\1\u0110\2\255\1\11\10\255"+ + "\3\11\4\255\2\11\23\255\1\11\1\255\1\11\7\255"+ + "\1\11\1\255\1\11\1\255\1\11\15\255\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0174"+ + "\13\5\1\4\6\5\2\0\1\103\1\5\1\u01bc\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\5\5\1\u01bd\15\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01be\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u0160\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u01bf\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\3\130\4\16\2\130\1\273\2\130\1\16\1\274\7\130"+ + "\3\16\4\130\2\16\23\130\1\16\1\130\1\16\7\130"+ + "\1\16\1\130\1\16\1\130\1\16\15\130\7\4\2\0"+ + "\4\4\2\0\1\4\3\0\5\4\2\0\6\4\13\0"+ + "\1\4\1\0\4\4\1\u01c0\7\4\1\0\24\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\5\5\1\u01c1\6\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5"+ + "\1\u0170\4\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\u01c2"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\10\5\1\157\3\5"+ + "\1\0\23\5\63\0\1\u01c3\31\0\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\5"+ + "\1\u01c4\4\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\15\5\1\u01c5\5\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\21\5\1\u01c6\1\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u01c7"+ + "\13\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\2\5\1\u01c8\20\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\5\1\u01c9"+ + "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01ca\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\4\5\1\u01cb\1\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\5\1\u01cc\12\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\5\5\1\u01cd\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\u0172\2\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\1\u01bc\5\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u01ce\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01cf\1\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\265"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\2\5\1\u01d0\3\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u0124\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01d1"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\1\120\2\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\4\5\1\u01d2\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\u01d3\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\5\5\1\u01d4\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\u01d5"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u0194\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\4\5\1\u01d6\1\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\162\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\3\5\1\u01d7\1\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\11\5\1\u0124\2\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\6\5\1\120\5\5\1\0\23\5\7\4\2\0\4\4"+ + "\2\0\1\4\3\0\5\4\2\0\2\4\1\u01d8\3\4"+ + "\13\0\1\4\1\0\14\4\1\0\24\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\264\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\1\5\1\u01d9\1\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\55\0\1\u01da\37\0\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\1\u01db\22\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u01dc\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01dd\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\7\5\1\u01de\4\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01df\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\2\5\1\u01e0\11\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\u012f"+ + "\22\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\13\5\1\u01e1\7\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01e2"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\4\5\1\u01e3\1\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\7\5\1\u01e4\4\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u012f"+ + "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\1\5"+ + "\1\u01e5\3\5\2\0\6\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\u01e6"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\2\5\1\u01e7\20\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\1\5\1\u012f\4\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01e8\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\13\5\1\u01e9"+ + "\1\5\1\u01ea\5\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01eb\11\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u01ec\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\u012f"+ + "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\2\5\1\126\3\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\u01ed\5\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\1\u01ee\22\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u01ef\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\2\5"+ + "\1\u01f0\3\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\3\5\1\u01f1\2\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\7\5\1\u01f2\4\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\1\5\1\u01f3\4\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01f4\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\3\5\1\u01cf"+ + "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f5\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\314\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\2\5\1\u01f6"+ + "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f7\4\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\1\u01f8\5\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\4\5\1\177"+ + "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\372\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u01f9\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\1\u012f\13\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\u01fa\13\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5"+ + "\1\u01fb\11\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\10\5\1\u01ad\12\5\1\4"+ + "\6\5\2\0\1\103\2\5\1\u01fc\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\1\u01fd\2\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\343\5\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\1\u01fe"+ + "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u01ff\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\1\5\1\126"+ + "\1\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\1\5\1\u012f\1\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0200"+ + "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\1\5\1\u0201\4\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\22\5\1\u0202"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\2\5\1\u0203\3\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\4\5\1\u0204\1\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\1\5\1\u0205\1\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0"+ + "\23\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5"+ + "\1\u0206\2\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\4\5\1\u01bc\7\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\u012f\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\4\5\1\u0207\2\0\6\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\1\u0208\2\5\2\0\1\4\3\0\5\5\2\0\6\5"+ + "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5"+ + "\2\0\1\103\3\5\2\0\1\4\3\0\5\5\2\0"+ + "\6\5\13\0\1\4\1\0\14\5\1\0\3\5\1\u0209"+ + "\17\5\1\4\6\5\2\0\1\103\3\5\2\0\1\4"+ + "\3\0\5\5\2\0\2\5\1\u020a\3\5\13\0\1\4"+ + "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103"+ + "\3\5\2\0\1\4\3\0\5\5\2\0\6\5\13\0"+ + "\1\4\1\0\4\5\1\u020b\7\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\3\5\1\u020c\2\5\13\0\1\4\1\0\14\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0"+ + "\14\5\1\0\2\5\1\u020d\20\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\3\5"+ + "\1\u020e\2\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\4\5\1\u020f\1\5\13\0\1\4\1\0"+ + "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\5\5\1\u01f0\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\5\5"+ + "\1\u012f\13\0\1\4\1\0\14\5\1\0\23\5\1\4"+ + "\6\5\2\0\1\103\3\5\2\0\1\4\3\0\5\5"+ + "\2\0\6\5\13\0\1\4\1\0\1\5\1\u01f0\12\5"+ + "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\2\0"+ + "\1\4\3\0\5\5\2\0\2\5\1\u01b0\3\5\13\0"+ + "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0"+ + "\1\103\3\5\2\0\1\4\3\0\5\5\2\0\4\5"+ + "\1\u0210\1\5\13\0\1\4\1\0\14\5\1\0\23\5"+ + "\1\4\6\5\2\0\1\103\3\5\2\0\1\4\3\0"+ + "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0200"+ + "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5"+ + "\2\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4"+ + "\1\0\2\5\1\u01f3\11\5\1\0\23\5"; + + private static int [] zzUnpackTrans() { + int [] result = new int[38731]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\2\5\1\6\1\7\1\10\1\6\1\11\1\12" + - "\1\4\1\13\1\14\1\15\1\16\1\6\1\17\1\20" + - "\1\21\1\22\1\23\1\24\1\5\1\25\1\26\1\5" + - "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\36" + - "\1\37\1\40\1\41\1\42\2\23\1\43\1\23\1\44" + - "\1\45\1\44\1\4\1\37\1\5\1\46\1\47\1\50" + - "\1\51\1\5\1\52\1\53\1\5\1\54\2\5\1\21" + - "\1\55\1\56\1\57\1\60\1\5\1\61\1\62\1\63" + - "\1\64\1\65\1\5\1\66\1\67\6\5\10\70\1\71" + - "\12\70\1\72\3\70\1\73\26\70\1\74\2\70\1\75" + - "\34\70\10\76\1\77\16\76\1\100\26\76\1\101\2\76" + - "\1\102\34\76\7\4\2\0\4\4\1\0\1\4\1\0" + - "\1\4\3\0\5\4\2\0\6\4\13\0\1\4\1\0" + - "\14\4\1\0\24\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\3\104\2\6\1\104" + - "\1\6\2\0\4\104\1\0\1\6\1\0\1\104\3\0" + - "\1\104\1\105\2\106\1\107\1\0\1\110\2\104\1\107" + - "\1\104\1\105\1\104\13\0\1\104\1\0\4\104\1\106" + - "\7\104\1\0\1\104\1\106\24\104\1\111\1\112\1\104" + - "\1\112\2\0\4\104\1\0\1\112\1\0\1\104\3\0" + - "\1\113\1\105\2\106\1\107\1\0\1\110\2\104\1\107" + - "\1\104\1\105\1\104\13\0\1\104\1\0\4\104\1\106" + - "\6\104\1\113\1\0\1\104\1\106\21\104\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\114" + - "\4\5\1\0\23\5\7\115\1\116\1\117\1\120\104\115" + - "\116\0\1\4\6\5\2\0\1\103\1\5\1\121\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\5\5" + - "\1\122\13\0\1\4\1\0\1\5\1\123\1\124\11\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\1\125\2\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\126\1\127\2\5\13\0\1\4\1\0\7\5\1\130" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\131\4\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\10\16\1\132\1\133\3\16\1\134\100\16\7\4\2\0" + - "\4\4\1\0\1\4\1\0\1\4\3\0\5\4\2\0" + - "\6\4\13\0\1\4\1\0\2\4\1\135\11\4\1\0" + - "\23\4\21\0\1\21\50\0\1\21\45\0\1\136\1\137" + - "\21\0\1\44\115\0\1\44\50\0\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\7\5" + - "\1\140\13\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\141" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\1\142\2\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\3\5\1\143\1\5\1\144" + - "\13\0\1\4\1\0\2\5\1\145\4\5\1\146\4\5" + - "\1\0\23\5\31\0\1\44\13\0\1\44\53\0\2\110" + - "\1\0\1\110\7\0\1\110\77\0\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\5\1\147\1\150\1\151\2\5\13\0\1\4" + - "\1\0\1\152\6\5\1\153\1\154\3\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\155\1\156\2\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\4\5\1\157\1\160\13\0\1\4\1\0" + - "\12\5\1\161\1\162\1\0\2\5\1\163\20\5\1\4" + - "\6\5\2\0\1\103\1\5\1\164\1\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\4\5\1\164\7\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\161\1\5\1\161\1\165\2\5\13\0" + - "\1\4\1\0\7\5\1\166\4\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\1\167\2\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\170\1\5\1\171\3\5" + - "\13\0\1\4\1\0\3\5\1\172\2\5\1\173\5\5" + - "\1\0\23\5\43\0\1\44\1\0\1\44\114\0\1\174" + - "\1\44\115\0\1\44\1\0\1\175\113\0\1\44\4\0" + - "\1\44\43\0\1\4\6\5\2\0\1\103\1\176\2\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\177\1\5\1\200\1\201\1\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5" + - "\1\202\1\5\1\0\1\5\1\0\1\4\3\0\3\5" + - "\1\203\1\5\2\0\5\5\1\204\13\0\1\4\1\0" + - "\11\5\1\205\2\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\1\206\1\5\1\207" + - "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\210\3\5\13\0\1\4\1\0\7\5\1\161\1\211" + - "\3\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\212\1\213\1\5\13\0\1\4\1\0\7\5\1\214" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5" + - "\1\215\1\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\5\1\161\4\5\13\0\1\4\1\0\14\5" + - "\1\0\2\5\1\216\20\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\3\5\1\217\2\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\161\1\5\1\220" + - "\3\5\13\0\1\4\1\0\7\5\1\221\4\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\222\2\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\223\2\5\13\0\1\4\1\0\7\5" + - "\1\224\4\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\7\5\1\225\4\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\5\1\226\4\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\227\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\230\2\5\13\0\1\4\1\0\7\5\1\231\4\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\1\232\2\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\2\5\1\233\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\234\1\5" + - "\1\235\3\5\13\0\1\4\1\0\7\5\1\236\4\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\237" + - "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\10\70" + - "\1\0\12\70\1\0\3\70\1\0\26\70\1\0\2\70" + - "\1\0\34\70\22\0\1\240\126\0\1\241\24\0\1\242" + - "\70\0\1\243\143\0\1\244\34\0\10\76\1\0\16\76" + - "\1\0\26\76\1\0\2\76\1\0\34\76\33\0\1\245" + - "\24\0\1\246\70\0\1\247\143\0\1\250\34\0\7\4" + - "\2\0\1\4\1\251\2\4\1\0\1\4\1\0\1\4" + - "\3\0\5\4\2\0\6\4\13\0\1\4\1\0\14\4" + - "\1\0\23\4\7\104\2\0\4\104\1\0\1\104\1\0" + - "\1\104\3\0\5\104\2\0\6\104\13\0\1\104\1\0" + - "\14\104\1\0\26\104\2\252\1\104\1\252\2\0\4\104" + - "\1\0\1\252\1\0\1\104\3\0\5\104\1\253\1\0" + - "\6\104\2\0\1\253\10\0\1\104\1\0\14\104\1\0" + - "\26\104\2\110\1\104\1\110\2\0\4\104\1\0\1\110" + - "\1\0\1\104\3\0\2\104\2\106\1\107\2\0\2\104" + - "\1\107\3\104\13\0\1\104\1\0\4\104\1\106\7\104" + - "\1\0\1\104\1\106\24\104\2\111\1\104\1\111\2\0" + - "\4\104\1\0\1\111\1\0\1\104\3\0\2\104\2\106" + - "\1\107\1\0\1\110\2\104\1\107\3\104\13\0\1\104" + - "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\24\104" + - "\1\111\1\112\1\104\1\112\2\0\4\104\1\0\1\112" + - "\1\0\1\104\3\0\1\104\1\254\2\106\1\107\1\0" + - "\1\110\2\104\1\107\1\104\1\254\1\104\13\0\1\104" + - "\1\0\4\104\1\106\7\104\1\0\1\104\1\106\24\104" + - "\4\255\2\0\3\104\1\255\1\0\1\255\1\0\1\104" + - "\3\0\2\104\3\255\2\0\2\104\2\255\2\104\13\0" + - "\1\104\1\0\4\104\1\255\1\104\1\255\5\104\1\0" + - "\1\104\1\255\1\104\1\255\1\104\1\255\15\104\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5" + - "\1\256\4\5\1\0\23\5\7\257\1\260\1\0\105\257" + - "\7\0\1\260\106\0\4\257\1\261\1\257\1\262\1\263" + - "\1\0\1\115\1\264\3\115\1\261\10\257\1\115\3\257" + - "\2\115\61\257\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\265" + - "\1\5\1\266\1\5\13\0\1\4\1\0\4\5\1\267" + - "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\161\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\4\5\1\270\7\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\5\1\271\1\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\272" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\3\5" + - "\1\273\7\5\1\274\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\275\5\5\13\0\1\4\1\0\11\5\1\276" + - "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\161" + - "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\277\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\11\132\1\300\3\132\1\301" + - "\104\132\1\16\1\132\2\16\1\0\1\16\1\302\4\16" + - "\10\132\1\16\3\132\2\16\61\132\7\4\2\0\2\4" + - "\1\303\1\4\1\0\1\4\1\0\1\4\3\0\5\4" + - "\2\0\6\4\13\0\1\4\1\0\14\4\1\0\23\4" + - "\23\0\1\304\72\0\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\1\5\1\305\3\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\306\5\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\1\5\1\307\1\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\4\5\1\310\1\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\311" + - "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5" + - "\1\312\1\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\5\1\313\4\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\314\2\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\3\5\1\315\2\5\13\0\1\4\1\0" + - "\10\5\1\161\3\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\316\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\317" + - "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\5\1\320\4\5\13\0\1\4" + - "\1\0\2\5\1\321\11\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\1\322\22\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\1\5\1\323\12\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\324\5\5\13\0\1\4\1\0" + - "\11\5\1\325\2\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\5\1\326\1\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\5\5\1\122" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\327" + - "\5\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\330" + - "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\3\5\1\331\2\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\4\5\1\161\7\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\2\5\1\332\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\333\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\1\5\1\334\12\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\3\5\1\335\2\5\13\0\1\4" + - "\1\0\7\5\1\336\4\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\337\5\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\2\5\1\340\11\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\5\1\341\4\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\45\0\1\44\1\0\1\23" + - "\46\0\1\4\6\5\2\0\1\103\2\5\1\342\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\2\5\1\343\3\5\13\0\1\4\1\0\2\5" + - "\1\344\4\5\1\345\4\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\5\1\346\4\5\13\0\1\4\1\0" + - "\6\5\1\347\5\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\350\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\351\5\5" + - "\13\0\1\4\1\0\6\5\1\352\5\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\1\5\1\353\21\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\5" + - "\1\354\6\5\1\355\12\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\1\5\1\356\12\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\2\5\1\357\11\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\360\5\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\3\5\1\361\1\5\2\0" + - "\4\5\1\362\1\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\363\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\364\3\5\1\331\1\122\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\3\5\1\365\2\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\366\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\3\5\1\367\17\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\370\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\13\5\1\371\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\372\5\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\373\5\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\1\5\1\374\1\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\5\1\161\4\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\164" + - "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5" + - "\1\375\1\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\5\1\376\4\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\10\5\1\377\3\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\u0100\5\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\1\u0101\2\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\2\5\1\u0102\20\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\4\5\1\u0103\1\5\13\0\1\4\1\0\11\5\1\u0104" + - "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\12\5\1\u0105\10\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\5\1\u0106\4\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\u0107\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\1\u0108\2\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\6\5\1\u0109" + - "\5\5\1\0\23\5\57\0\1\u010a\75\0\1\u010b\111\0" + - "\1\u010c\143\0\1\u010d\113\0\1\u010e\75\0\1\u010f\111\0" + - "\1\u0110\143\0\1\u0111\34\0\3\4\4\u0112\2\0\3\4" + - "\1\u0112\1\0\1\u0112\1\0\1\4\3\0\2\4\3\u0112" + - "\2\0\2\4\2\u0112\2\4\13\0\1\4\1\0\4\4" + - "\1\u0112\1\4\1\u0112\5\4\1\0\1\4\1\u0112\1\4" + - "\1\u0112\1\4\1\u0112\15\4\3\104\2\252\1\104\1\252" + - "\2\0\4\104\1\0\1\252\1\0\1\104\3\0\2\104" + - "\2\106\1\104\2\0\6\104\13\0\1\104\1\0\4\104" + - "\1\106\7\104\1\0\1\104\1\106\21\104\3\0\2\252" + - "\1\0\1\252\7\0\1\252\77\0\3\104\4\255\2\0" + - "\3\104\1\255\1\0\1\255\1\0\1\104\3\0\1\104" + - "\1\254\3\255\2\0\2\104\2\255\1\254\1\104\13\0" + - "\1\104\1\0\4\104\1\255\1\104\1\255\5\104\1\0" + - "\1\104\1\255\1\104\1\255\1\104\1\255\15\104\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\4\5\1\u0113\1\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\7\257\1\116\1\0\111\257" + - "\1\262\1\257\1\262\1\260\1\0\5\257\1\262\103\257" + - "\1\115\1\257\1\115\1\260\1\0\5\257\1\115\102\257" + - "\4\u0114\1\116\1\0\3\257\1\u0114\1\257\1\u0114\7\257" + - "\3\u0114\4\257\2\u0114\23\257\1\u0114\1\257\1\u0114\7\257" + - "\1\u0114\1\257\1\u0114\1\257\1\u0114\15\257\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\5\5\1\160\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\7\5\1\u0115\4\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\u0116\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\3\5\1\u0117\2\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\377\5\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\161\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0118" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\u0119\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\2\5\1\u011a\11\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\u011b\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\u011c\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\10\132\1\0\110\132\4\u011d\2\132\1\300" + - "\2\132\1\u011d\1\301\1\u011d\7\132\3\u011d\4\132\2\u011d" + - "\23\132\1\u011d\1\132\1\u011d\7\132\1\u011d\1\132\1\u011d" + - "\1\132\1\u011d\15\132\7\4\2\0\4\4\1\0\1\4" + - "\1\0\1\4\3\0\5\4\2\0\6\4\13\0\1\4" + - "\1\0\6\4\1\u011e\5\4\1\0\23\4\22\0\1\u011f" + - "\73\0\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\10\5\1\u0120\2\5\1\u0121\7\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\377\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\6\5\1\u0122\5\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\5\5\1\314" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0123" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\u0124\2\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\u0125\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u0126\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\6\5\1\u0127\5\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\u0128\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\1\u0129\22\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u012a" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\5\5" + - "\1\161\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\1\u012b\22\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u012c\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\1\u012d\2\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\7\5\1\u012e\4\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\4\5\1\u012f\7\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\3\5\1\u0130\2\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u0131\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\4\5\1\u0132\1\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\2\5\1\272\3\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\4\5\1\u0133\7\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\223\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\u0134\1\u0135\4\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\1\5\1\u0136\12\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\15\5\1\u0137\5\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\364" + - "\5\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5" + - "\1\u0138\4\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\4\5\1\u0134\1\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\2\5\1\u0119\20\5\1\4\6\5" + - "\2\0\1\103\1\5\1\u0139\1\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\2\5\1\u013a\20\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\u013b\5\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\5\5\1\u013c\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\5\5\1\u013d\6\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\10\5\1\u0132\3\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\u013e\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\4\5\1\u013f\1\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\5\1\u0140\4\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u0141" + - "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\u0142\2\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\4\5\1\u0143\1\5\13\0" + - "\1\4\1\0\7\5\1\u0144\4\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\4\5\1\122\1\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\1\161\13\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\3\5\1\u0145\2\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\2\5\1\u0146\3\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0147" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5" + - "\1\360\5\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\5\5\1\321\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\u0148\4\5\1\130\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\u0149\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\u014a" + - "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\5\5\1\u014b\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\4\5\1\u014c\7\5" + - "\1\u014d\1\u0137\1\u014e\4\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\7\5\1\u014f\4\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\6\5\1\u0150\5\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0151" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\227\2\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\377\13\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\5\5\1\306\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u0152\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\377\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\2\5\1\u0153" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u0154\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\2\5\1\u0155\11\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\374\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\5\1\u0156\1\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\375\5\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\53\0\1\u0157" + - "\77\0\1\u010a\137\0\1\u0158\70\0\1\u0159\136\0\1\u015a" + - "\77\0\1\u010e\137\0\1\u015b\70\0\1\u015c\63\0\3\4" + - "\4\u015d\2\0\3\4\1\u015d\1\0\1\u015d\1\0\1\4" + - "\3\0\2\4\3\u015d\2\0\2\4\2\u015d\2\4\13\0" + - "\1\4\1\0\4\4\1\u015d\1\4\1\u015d\5\4\1\0" + - "\1\4\1\u015d\1\4\1\u015d\1\4\1\u015d\16\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u015e\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\3\257\4\u015f\1\116\1\0\3\257" + - "\1\u015f\1\257\1\u015f\7\257\3\u015f\4\257\2\u015f\23\257" + - "\1\u015f\1\257\1\u015f\7\257\1\u015f\1\257\1\u015f\1\257" + - "\1\u015f\15\257\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0160" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\3\5\1\u0161\1\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\u0162\5\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u0163\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\1\5" + - "\1\u0164\11\5\1\u0165\7\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\2\5\1\122" + - "\20\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\5\5\1\u0166\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\5\5\1\161\6\5" + - "\1\0\23\5\3\132\4\u0167\2\132\1\300\2\132\1\u0167" + - "\1\301\1\u0167\7\132\3\u0167\4\132\2\u0167\23\132\1\u0167" + - "\1\132\1\u0167\7\132\1\u0167\1\132\1\u0167\1\132\1\u0167" + - "\15\132\7\4\2\0\4\4\1\0\1\4\1\0\1\4" + - "\3\0\5\4\2\0\4\4\1\u0168\1\4\13\0\1\4" + - "\1\0\14\4\1\0\24\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\7\5\1\u0169\4\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\7\5\1\u016a\4\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\u016b\5\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\11\5\1\u016c\2\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\4\5\1\u016d\1\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\35\0\1\u016e\60\0\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u0132\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\4\5\1\u016f\16\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\u0170\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\3\5\1\161\10\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0171" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5" + - "\1\u0172\4\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\5\1\u0173\4\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\2\5\1\u0174\20\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0175" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\1\5\1\u0127\12\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\1\5\1\u0176\1\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\7\5" + - "\1\u0177\4\5\1\u0178\6\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\2\5\1\u0179\11\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\u017a\5\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\2\5" + - "\1\u017b\2\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\5\5\1\u017c\15\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\5\1\u017d\4\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\4\5\1\331\1\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\u017e\5\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0146" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\u017f\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\2\5\1\u0180\3\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\3\5\1\u0181\2\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\5\1\u0182\4\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\u0183" + - "\2\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\3\5\1\u0184\2\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\1\5\1\u0185\1\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\10\5\1\u0132\12\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u0186\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\130\4\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\1\u0187\2\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\1\122\5\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\11\5\1\u0134\2\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0188\11\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\2\5\1\u0189\11\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\5\1\u018a\4\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\6\5\1\173\5\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\2\5\1\u018b\11\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u018c\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\17\5\1\u018d\3\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\5\5\1\u018e\15\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\u018f\5\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\5\1\377\4\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\u0190\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u0151\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\6\5\1\271\5\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\5\1\u0191\1\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\4\5\1\377\7\5\1\0\23\5\22\0" + - "\1\u0192\133\0\1\u010a\12\0\1\u0157\43\0\1\u0159\1\u0193" + - "\4\u0159\1\u0193\2\0\3\u0159\1\0\1\u0159\1\0\1\u0193" + - "\1\0\1\u0159\1\u0193\5\u0159\2\u0193\6\u0159\1\0\2\u0193" + - "\1\0\1\u0193\2\0\6\u0193\14\u0159\1\0\23\u0159\22\0" + - "\1\u0194\133\0\1\u010e\12\0\1\u015a\43\0\1\u015c\1\u0195" + - "\4\u015c\1\u0195\2\0\3\u015c\1\0\1\u015c\1\0\1\u0195" + - "\1\0\1\u015c\1\u0195\5\u015c\2\u0195\6\u015c\1\0\2\u0195" + - "\1\0\1\u0195\2\0\6\u0195\14\u015c\1\0\23\u015c\3\4" + - "\4\u0196\2\0\3\4\1\u0196\1\0\1\u0196\1\0\1\4" + - "\3\0\2\4\3\u0196\2\0\2\4\2\u0196\2\4\13\0" + - "\1\4\1\0\4\4\1\u0196\1\4\1\u0196\5\4\1\0" + - "\1\4\1\u0196\1\4\1\u0196\1\4\1\u0196\16\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\3\5\1\u0197\2\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\3\257\4\u0198\1\116\1\0\3\257" + - "\1\u0198\1\257\1\u0198\7\257\3\u0198\4\257\2\u0198\23\257" + - "\1\u0198\1\257\1\u0198\7\257\1\u0198\1\257\1\u0198\1\257" + - "\1\u0198\15\257\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\4\5\1\u0199\7\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5" + - "\1\u019a\11\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\2\5\1\u019b\3\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0127\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\5\1\u019c\4\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\6\5\1\u019d\5\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\5\1\u019e\12\5\1\0\23\5\3\132\4\u019f\2\132" + - "\1\300\2\132\1\u019f\1\301\1\u019f\7\132\3\u019f\4\132" + - "\2\u019f\23\132\1\u019f\1\132\1\u019f\7\132\1\u019f\1\132" + - "\1\u019f\1\132\1\u019f\15\132\7\4\2\0\1\4\1\u01a0" + - "\2\4\1\0\1\4\1\0\1\4\3\0\5\4\2\0" + - "\6\4\13\0\1\4\1\0\14\4\1\0\24\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\4\5\1\306" + - "\7\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\6\5\1\u01a1\5\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u01a2\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\11\5\1\u01a3\2\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u01a4" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\36\0" + - "\1\u01a5\57\0\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u01a6" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\u01a7\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u01a8\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\3\5\1\161\1\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\1\5\1\161\1\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u01a9" + - "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5" + - "\1\u0132\2\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\4\5\1\321\7\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\7\5\1\u01aa\4\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\3\5\1\u01ab\2\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\6\5\1\161\5\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\2\5\1\u017b\2\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\5\1\u01ac\4\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u01ad" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\7\5" + - "\1\u01ae\4\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\5\5\1\u01af" + - "\2\5\1\u01b0\12\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\6\5\1\u01b1\5\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\1\5\1\u01b2\16\5\1\u01b3\2\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\1\122\22\5\1\4\6\5\2\0\1\103\1\5" + - "\1\u01b4\1\5\1\0\1\5\1\0\1\4\3\0\3\5" + - "\1\u019e\1\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\4\5\1\122\7\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\11\5" + - "\1\u01b5\2\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\2\5\1\u01b6\11\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\11\5\1\u01b7\2\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\4\5\1\130\1\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5" + - "\1\u01b8\1\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\5\1\u01b9\12\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\2\5\1\u0183\11\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\11\5\1\u01ba\2\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\5\1\u01bb\4\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\1\5\1\u0132" + - "\3\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01bc\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u01bd" + - "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\3\5\1\u01be\17\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\1\377\22\5\22\0\1\u0159\115\0\1\u015c" + - "\73\0\3\4\4\5\2\0\3\4\1\5\1\0\1\5" + - "\1\0\1\4\3\0\2\4\3\5\2\0\2\4\2\5" + - "\2\4\13\0\1\4\1\0\4\4\1\5\1\4\1\5" + - "\5\4\1\0\1\4\1\5\1\4\1\5\1\4\1\5" + - "\16\4\6\5\2\0\1\103\1\5\1\377\1\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\3\257\4\115\1\116" + - "\1\0\3\257\1\115\1\257\1\115\7\257\3\115\4\257" + - "\2\115\23\257\1\115\1\257\1\115\7\257\1\115\1\257" + - "\1\115\1\257\1\115\15\257\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\7\5\1\u0177" + - "\13\5\1\4\6\5\2\0\1\103\1\5\1\u01bf\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\5\5\1\u01c0\15\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\3\5" + - "\1\u01c1\2\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\u0163\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\u01c2\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\3\132\4\16\2\132\1\300\2\132\1\16" + - "\1\301\1\16\7\132\3\16\4\132\2\16\23\132\1\16" + - "\1\132\1\16\7\132\1\16\1\132\1\16\1\132\1\16" + - "\15\132\7\4\2\0\4\4\1\0\1\4\1\0\1\4" + - "\3\0\5\4\2\0\6\4\13\0\1\4\1\0\4\4" + - "\1\u01c3\7\4\1\0\24\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\5\5\1\u01c4\6\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\7\5\1\u0173\4\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\u01c5\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\10\5\1\161\3\5\1\0\23\5\64\0" + - "\1\u01c6\31\0\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\5\1\u01c7" + - "\4\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\15\5\1\u01c8\5\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\21\5\1\u01c9" + - "\1\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\7\5\1\u01ca\13\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\2\5\1\u01cb\20\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\u01cc\4\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\3\5\1\u01cd\2\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\4\5\1\u01ce\1\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\1\5\1\u01cf\12\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\5\5\1\u01d0\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\u0175" + - "\2\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\u01bf\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5" + - "\1\u01d1\1\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\1\5\1\u01d2\1\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\272\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u01d3" + - "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\u0127\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u01d4\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\1\122\2\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\4\5\1\u01d5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\u01d6\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\5\5\1\u01d7\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\4\5\1\u01d8\7\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u0197" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5" + - "\1\u01d9\1\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\2\5\1\164\3\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\3\5" + - "\1\u01da\1\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\11\5\1\u0127\2\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\6\5" + - "\1\122\5\5\1\0\23\5\7\4\2\0\4\4\1\0" + - "\1\4\1\0\1\4\3\0\5\4\2\0\2\4\1\u01db" + - "\3\4\13\0\1\4\1\0\14\4\1\0\24\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\2\5\1\271\3\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\1\5" + - "\1\u01dc\1\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\56\0\1\u01dd\37\0\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\1\u01de\22\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\3\5\1\u01df\2\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\2\5\1\u01e0\11\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\7\5\1\u01e1\4\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\2\5\1\u01e2" + - "\11\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\2\5\1\u01e3\11\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\1\u0132\22\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\14\5\1\0\13\5\1\u01e4" + - "\7\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\2\5\1\u01e5\3\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\4\5" + - "\1\u01e6\1\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\7\5\1\u01e7\4\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\1\u0132\5\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\1\5\1\u01e8" + - "\3\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\u01e9\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\2\5\1\u01ea\20\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\u0132\4\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u01eb\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\13\5" + - "\1\u01ec\1\5\1\u01ed\5\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\2\5\1\u01ee\11\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\1\u01ef\5\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\4\5\1\u0132\7\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\130" + - "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\u01f0\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\1\u01f1\22\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\2\5\1\u01f2\20\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\2\5\1\u01f3\3\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\3\5\1\u01f4\2\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\7\5\1\u01f5" + - "\4\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\1\5" + - "\1\u01f6\4\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u01f7\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\3\5\1\u01d2\2\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\7\5\1\u01f8\4\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\1\321\5\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u01f9\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\7\5\1\u01fa\4\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\1\u01fb\5\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\4\5\1\201\1\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\1\5\1\377" + - "\12\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\2\5" + - "\1\u01fc\3\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\u0132\13\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\1\u01fd\13\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\2\5\1\u01fe\11\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\10\5" + - "\1\u01b0\12\5\1\4\6\5\2\0\1\103\2\5\1\u01ff" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\1\u0200\2\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\1\350\5\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\u0201\5\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\3\5\1\u0202" + - "\2\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\1\5\1\130\1\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\1\5\1\u0132\1\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\7\5\1\u0203\4\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\1\5\1\u0204\4\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\22\5\1\u0205\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\2\5\1\u0206\3\5\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\4\5\1\u0207\1\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\5\1\u0208\1\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\14\5\1\0\23\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\6\5\13\0\1\4\1\0\11\5\1\u0209" + - "\2\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\6\5" + - "\13\0\1\4\1\0\4\5\1\u01bf\7\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\5\1\u0132\12\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\4\5" + - "\1\u020a\2\0\6\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\1\u020b\2\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\6\5\13\0" + - "\1\4\1\0\14\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\6\5\13\0\1\4\1\0\14\5\1\0\3\5" + - "\1\u020c\17\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\2\5\1\u020d" + - "\3\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\4\5" + - "\1\u020e\7\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\3\5\1\u020f\2\5\13\0\1\4\1\0\14\5\1\0" + - "\23\5\1\4\6\5\2\0\1\103\3\5\1\0\1\5" + - "\1\0\1\4\3\0\5\5\2\0\6\5\13\0\1\4" + - "\1\0\14\5\1\0\2\5\1\u0210\20\5\1\4\6\5" + - "\2\0\1\103\3\5\1\0\1\5\1\0\1\4\3\0" + - "\5\5\2\0\3\5\1\u0211\2\5\13\0\1\4\1\0" + - "\14\5\1\0\23\5\1\4\6\5\2\0\1\103\3\5" + - "\1\0\1\5\1\0\1\4\3\0\5\5\2\0\4\5" + - "\1\u0212\1\5\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\5\5\1\u01f3\13\0\1\4" + - "\1\0\14\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\5\5\1\u0132\13\0\1\4\1\0\14\5\1\0\23\5" + - "\1\4\6\5\2\0\1\103\3\5\1\0\1\5\1\0" + - "\1\4\3\0\5\5\2\0\6\5\13\0\1\4\1\0" + - "\1\5\1\u01f3\12\5\1\0\23\5\1\4\6\5\2\0" + - "\1\103\3\5\1\0\1\5\1\0\1\4\3\0\5\5" + - "\2\0\2\5\1\u01b3\3\5\13\0\1\4\1\0\14\5" + - "\1\0\23\5\1\4\6\5\2\0\1\103\3\5\1\0" + - "\1\5\1\0\1\4\3\0\5\5\2\0\4\5\1\u0213" + - "\1\5\13\0\1\4\1\0\14\5\1\0\23\5\1\4" + - "\6\5\2\0\1\103\3\5\1\0\1\5\1\0\1\4" + - "\3\0\5\5\2\0\6\5\13\0\1\4\1\0\2\5" + - "\1\u0203\11\5\1\0\23\5\1\4\6\5\2\0\1\103" + - "\3\5\1\0\1\5\1\0\1\4\3\0\5\5\2\0" + - "\6\5\13\0\1\4\1\0\2\5\1\u01f6\11\5\1\0" + - "\23\5"; - - private static int[] zzUnpackTrans() { - int[] result = new int[39390]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\6\1\1\11\4\1\1\11\17\1\2\11\3\1" + - "\1\11\24\1\1\11\5\1\1\11\16\1\1\11\1\0" + - "\14\1\1\11\1\1\1\11\35\1\1\0\43\1\1\11" + - "\10\0\2\1\1\0\4\1\1\11\20\1\1\11\2\1" + - "\1\0\105\1\10\0\15\1\1\11\5\1\1\0\61\1" + - "\2\0\1\1\2\0\22\1\1\0\43\1\4\0\17\1" + - "\1\0\40\1\1\0\26\1\1\11\66\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[531]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public ActionScriptTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addHyperlinkToken(int, int, int) - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, false); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - super.addToken(array, start, end, tokenType, startOffset, hyperlink); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\6\1\1\11\4\1\1\11\17\1\2\11\3\1"+ + "\1\11\24\1\1\11\5\1\1\11\15\1\1\11\14\1"+ + "\1\11\1\1\1\11\35\1\1\0\43\1\1\11\10\0"+ + "\2\1\1\0\22\1\1\11\2\1\1\0\105\1\10\0"+ + "\2\1\1\11\14\1\1\11\5\1\1\0\61\1\2\0"+ + "\1\1\2\0\22\1\1\0\43\1\4\0\17\1\1\0"+ + "\40\1\1\0\26\1\1\11\66\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[528]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ActionScriptTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ActionScriptTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public ActionScriptTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public ActionScriptTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 190) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 5: { - addNullToken(); - return firstToken; - } - case 30: - break; - case 22: { - addToken(Token.LITERAL_CHAR); - } - case 31: - break; - case 21: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 32: - break; - case 25: { - addToken(Token.COMMENT_MULTILINE); - } - case 33: - break; - case 20: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 34: - break; - case 7: { - addToken(Token.WHITESPACE); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 35: - break; - case 15: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 36: - break; - case 23: { - addToken(Token.ERROR_STRING_DOUBLE); - } - case 37: - break; - case 14: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 38: - break; - case 17: { - addToken(Token.RESERVED_WORD); - } - case 39: - break; - case 9: { - addToken(Token.SEPARATOR); - } - case 40: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 41: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 42: - break; - case 19: { - start = zzMarkedPos - 2; - yybegin(EOL_COMMENT); - } - case 43: - break; - case 27: { - addToken(Token.FUNCTION); - } - case 44: - break; - case 4: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 45: - break; - case 6: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 46: - break; - case 24: { - addToken(Token.DATA_TYPE); - } - case 47: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 48: - break; - case 16: { - addToken(Token.ERROR_CHAR); - } - case 49: - break; - case 26: { - addToken(Token.LITERAL_BOOLEAN); - } - case 50: - break; - case 18: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 51: - break; - case 29: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 52: - break; - case 28: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 53: - break; - case 13: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 54: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 55: - break; - case 8: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 5: + { addNullToken(); return firstToken; + } + case 30: break; + case 16: + { addToken(Token.LITERAL_CHAR); + } + case 31: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 32: break; + case 25: + { addToken(Token.COMMENT_MULTILINE); + } + case 33: break; + case 20: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 34: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 35: break; + case 15: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 36: break; + case 22: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 37: break; + case 14: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 38: break; + case 17: + { addToken(Token.RESERVED_WORD); + } + case 39: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 40: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 41: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 42: break; + case 19: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 43: break; + case 27: + { addToken(Token.FUNCTION); + } + case 44: break; + case 4: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 45: break; + case 6: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 46: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 47: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 48: break; + case 24: + { addToken(Token.ERROR_CHAR); + } + case 49: break; + case 26: + { addToken(Token.LITERAL_BOOLEAN); + } + case 50: break; + case 18: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 51: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 52: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 53: break; + case 13: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 54: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 55: break; + case 8: + { addToken(Token.OPERATOR); + } + case 56: break; + case 10: + { + } + case 57: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 58: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 56: - break; - case 10: { + case 529: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 57: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 530: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 58: - break; + case 531: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 532: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 533: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 534: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex old mode 100644 new mode 100755 index d63625b4f..101d77e45 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.flex @@ -3,23 +3,9 @@ * * AssemblerX86TokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing X86 assembler. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -51,7 +37,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
        - *
      • The generated AssemblerX86TokenMaker.java file will contain two + *
      • The generated AssemblerX86TokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -73,7 +59,6 @@ import org.fife.ui.rsyntaxtextarea.*; %public %class AssemblerX86TokenMaker %extends AbstractJFlexTokenMaker -%implements TokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token @@ -122,6 +107,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -129,13 +115,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } @@ -171,7 +154,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -182,9 +165,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -199,7 +181,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java old mode 100644 new mode 100755 index bfccb0210..ff313ec9d --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/AssemblerX86TokenMaker.java @@ -5,23 +5,9 @@ * * AssemblerX86TokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing X86 assembler. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -30,1851 +16,1851 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * This class takes plain text and returns tokens representing x86 assembler. - *

        - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

        - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

        - * + * This class takes plain text and returns tokens representing x86 + * assembler.

        + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

        + * * If you wish to regenerate this file yourself, keep in mind the following: *

          - *
        • The generated AssemblerX86TokenMaker.java file will contain two definitions of both zzRefill - * and yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
        • - *
        • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
        • - *
        • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
        • + *
        • The generated AssemblerX86TokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
        • + *
        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
        • + *
        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
        • *
        - * + * * @author Robert Futrell * @version 0.2 - * + * */ -public class AssemblerX86TokenMaker extends AbstractJFlexTokenMaker implements TokenMaker { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int YYINITIAL = 0; - - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l ZZ_LEXSTATE[l+1] is the state in the DFA for the - * lexical state l at the beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 1 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\10\1\7\1\0\1\10\23\0\1\10\1\14\1\4\2\0" + - "\1\13\1\14\1\5\2\0\1\12\1\12\1\3\1\12\1\15\1\12" + - "\1\27\1\16\1\21\1\24\1\25\1\26\1\20\1\23\1\17\1\2" + - "\1\11\1\6\1\14\1\14\1\14\1\50\1\0\1\30\1\33\1\40" + - "\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36\1\31\1\55" + - "\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46\1\61\1\52" + - "\1\54\1\60\1\53\1\3\1\0\1\3\1\14\1\57\1\0\1\30" + - "\1\33\1\40\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36" + - "\1\31\1\55\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46" + - "\1\61\1\52\1\54\1\60\1\53\1\0\1\14\1\0\1\14\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\2\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7" + - "\1\10\32\1\1\11\1\1\1\12\5\13\2\1\1\14" + - "\1\15\25\0\16\1\2\16\23\1\1\13\11\1\1\16" + - "\14\1\2\16\7\1\1\16\10\1\1\13\4\1\1\11" + - "\3\1\1\16\1\1\1\11\15\1\1\13\1\12\13\1" + - "\1\16\42\1\31\0\1\12\11\0\20\1\1\13\1\12" + - "\14\1\2\13\3\1\1\13\4\1\1\12\6\1\1\13" + - "\3\1\1\13\5\1\1\12\5\1\1\13\4\1\1\12" + - "\1\1\1\13\2\1\1\13\10\1\1\13\4\1\1\13" + - "\4\1\1\13\5\1\1\12\3\1\3\13\24\1\1\13" + - "\37\1\1\13\3\1\1\13\3\1\1\0\1\12\10\0" + - "\1\12\17\0\3\1\1\13\11\1\1\13\14\1\2\13" + - "\1\1\1\17\1\13\3\1\2\12\10\1\1\12\7\1" + - "\1\12\1\13\12\1\1\12\15\1\1\13\5\1\2\13" + - "\1\1\1\13\14\1\1\13\3\1\1\13\4\1\1\0" + - "\1\12\3\0\1\12\5\0\1\12\5\0\16\1\1\12" + - "\5\1\1\12\16\1\1\12\1\1\1\13\4\1\1\13" + - "\1\1\1\13\4\1\7\0\1\12\7\1\2\12\10\1" + - "\1\0\1\12\2\0\1\12\1\0\4\1\1\12\1\1" + - "\3\0\2\1\2\0\1\1\1\12\2\0"; - - private static int[] zzUnpackAction() { - int[] result = new int[668]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; +public class AssemblerX86TokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 1 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\10\1\7\1\0\1\10\23\0\1\10\1\14\1\4\2\0"+ + "\1\13\1\14\1\5\2\0\1\12\1\12\1\3\1\12\1\15\1\12"+ + "\1\27\1\16\1\21\1\24\1\25\1\26\1\20\1\23\1\17\1\2"+ + "\1\11\1\6\1\14\1\14\1\14\1\50\1\0\1\30\1\33\1\40"+ + "\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36\1\31\1\55"+ + "\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46\1\61\1\52"+ + "\1\54\1\60\1\53\1\3\1\0\1\3\1\14\1\57\1\0\1\30"+ + "\1\33\1\40\1\42\1\35\1\47\1\51\1\32\1\45\1\1\1\36"+ + "\1\31\1\55\1\43\1\41\1\22\1\56\1\34\1\37\1\44\1\46"+ + "\1\61\1\52\1\54\1\60\1\53\1\0\1\14\1\0\1\14\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\32\1\1\11\1\1\1\12\5\13\2\1\1\14"+ + "\1\15\25\0\16\1\2\16\23\1\1\13\11\1\1\16"+ + "\14\1\2\16\7\1\1\16\10\1\1\13\4\1\1\11"+ + "\3\1\1\16\1\1\1\11\15\1\1\13\1\12\13\1"+ + "\1\16\42\1\31\0\1\12\11\0\20\1\1\13\1\12"+ + "\14\1\2\13\3\1\1\13\4\1\1\12\6\1\1\13"+ + "\3\1\1\13\5\1\1\12\5\1\1\13\4\1\1\12"+ + "\1\1\1\13\2\1\1\13\10\1\1\13\4\1\1\13"+ + "\4\1\1\13\5\1\1\12\3\1\3\13\24\1\1\13"+ + "\37\1\1\13\3\1\1\13\3\1\1\0\1\12\10\0"+ + "\1\12\17\0\3\1\1\13\11\1\1\13\14\1\2\13"+ + "\1\1\1\17\1\13\3\1\2\12\10\1\1\12\7\1"+ + "\1\12\1\13\12\1\1\12\15\1\1\13\5\1\2\13"+ + "\1\1\1\13\14\1\1\13\3\1\1\13\4\1\1\0"+ + "\1\12\3\0\1\12\5\0\1\12\5\0\16\1\1\12"+ + "\5\1\1\12\16\1\1\12\1\1\1\13\4\1\1\13"+ + "\1\1\1\13\4\1\7\0\1\12\7\1\2\12\10\1"+ + "\1\0\1\12\2\0\1\12\1\0\4\1\1\12\1\1"+ + "\3\0\2\1\2\0\1\1\1\12\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[668]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e"+ + "\0\144\0\u0190\0\144\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a"+ + "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ + "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ + "\0\u05dc\0\u060e\0\u0640\0\u0672\0\u06a4\0\u06d6\0\u0708\0\u0708"+ + "\0\u073a\0\u076c\0\u079e\0\u0352\0\u07d0\0\u0802\0\u0834\0\144"+ + "\0\144\0\u0866\0\u0898\0\u08ca\0\u08fc\0\u092e\0\u0960\0\u0992"+ + "\0\u09c4\0\u09f6\0\u0a28\0\u0a5a\0\u0a8c\0\u0abe\0\u0af0\0\u0b22"+ + "\0\u0b54\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2"+ + "\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42"+ + "\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a\0\u0f3c\0\u0352\0\u0f6e\0\u0fa0"+ + "\0\u0fd2\0\u1004\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130"+ + "\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u12c0"+ + "\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e\0\u1450"+ + "\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c\0\u15ae\0\u15e0"+ + "\0\u1612\0\u1644\0\u1676\0\u16a8\0\u16da\0\u170c\0\u173e\0\u1770"+ + "\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a\0\u189c\0\u18ce\0\u1900"+ + "\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa\0\u1a2c\0\u1a5e\0\u1a90"+ + "\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a\0\u1bbc\0\u1bee\0\u0352"+ + "\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u186a\0\u1d1a\0\u1d4c"+ + "\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa\0\u1edc"+ + "\0\u1f0e\0\u1f40\0\u1f72\0\u1fa4\0\u1fd6\0\u2008\0\u203a\0\u206c"+ + "\0\u209e\0\u20d0\0\u2102\0\u2134\0\u2166\0\u2198\0\u21ca\0\u21fc"+ + "\0\u222e\0\u2260\0\u2292\0\u22c4\0\u22f6\0\u2328\0\u235a\0\u238c"+ + "\0\u23be\0\u23f0\0\u2422\0\u2454\0\u2486\0\u24b8\0\u24ea\0\u251c"+ + "\0\u254e\0\u2580\0\u25b2\0\u25e4\0\u2616\0\u2648\0\u267a\0\u26ac"+ + "\0\u26de\0\u2710\0\u2742\0\u2774\0\u27a6\0\u27d8\0\u280a\0\u283c"+ + "\0\u286e\0\u07d0\0\u28a0\0\u28d2\0\u2904\0\u2936\0\u2968\0\u299a"+ + "\0\u29cc\0\u29fe\0\u2a30\0\u2a62\0\u2a94\0\u2ac6\0\u2af8\0\u2b2a"+ + "\0\u2b5c\0\u2b8e\0\u2bc0\0\u2bf2\0\u2c24\0\u2c56\0\u2c88\0\u2cba"+ + "\0\u2cec\0\u2d1e\0\u2d50\0\u2d82\0\144\0\u2db4\0\u2de6\0\u2e18"+ + "\0\u2e4a\0\u2e7c\0\u2eae\0\u2ee0\0\u2f12\0\u2f44\0\u2f76\0\u2fa8"+ + "\0\u2fda\0\u300c\0\u303e\0\u3070\0\u30a2\0\u30d4\0\u3106\0\u3138"+ + "\0\u316a\0\u319c\0\u31ce\0\u3200\0\u3232\0\u3264\0\u3296\0\u0352"+ + "\0\u32c8\0\u32fa\0\u332c\0\u335e\0\u3390\0\u33c2\0\u33f4\0\u3426"+ + "\0\u3458\0\u348a\0\u34bc\0\u34ee\0\u3520\0\u3552\0\u3584\0\u35b6"+ + "\0\u35e8\0\u361a\0\u364c\0\u367e\0\u36b0\0\u36e2\0\u3714\0\u3746"+ + "\0\u3778\0\u37aa\0\u37dc\0\u380e\0\u3840\0\u3872\0\u38a4\0\u38d6"+ + "\0\u3908\0\u393a\0\u396c\0\u399e\0\u39d0\0\u3a02\0\u3a34\0\u3a66"+ + "\0\u3a98\0\u3aca\0\u3afc\0\u3b2e\0\u3b60\0\u3b92\0\u3bc4\0\u3bf6"+ + "\0\u3c28\0\u3c5a\0\u3c8c\0\u3cbe\0\u3cf0\0\u3d22\0\u3d54\0\u3d86"+ + "\0\u3db8\0\u3dea\0\u3e1c\0\u3e4e\0\u3e80\0\u3eb2\0\u3ee4\0\u3f16"+ + "\0\u3f48\0\u3f7a\0\u3fac\0\u3fde\0\u4010\0\u36e2\0\u4042\0\u4074"+ + "\0\u40a6\0\u40d8\0\u410a\0\u413c\0\u416e\0\u41a0\0\u41d2\0\u4204"+ + "\0\u4236\0\u4268\0\u429a\0\u42cc\0\u42fe\0\u4330\0\u4362\0\u4394"+ + "\0\u43c6\0\u43f8\0\u442a\0\u445c\0\u448e\0\u44c0\0\u44f2\0\u4524"+ + "\0\u4556\0\u4588\0\u45ba\0\u45ec\0\u461e\0\u3b92\0\u4650\0\u4682"+ + "\0\u46b4\0\u361a\0\u46e6\0\u4718\0\u474a\0\u477c\0\u47ae\0\u47e0"+ + "\0\u4812\0\u4844\0\u4876\0\u48a8\0\u48da\0\u490c\0\u493e\0\u4970"+ + "\0\u49a2\0\u49d4\0\u4a06\0\u4a38\0\u4a6a\0\u4a9c\0\u4ace\0\u4b00"+ + "\0\u4b32\0\u4b64\0\u4b96\0\u4bc8\0\u4bfa\0\u4c2c\0\u4c5e\0\u4c90"+ + "\0\u4cc2\0\u4cf4\0\u4d26\0\u4d58\0\u4d8a\0\u4dbc\0\u410a\0\u4dee"+ + "\0\u4e20\0\u4e52\0\u4e84\0\u4eb6\0\u4ee8\0\u4f1a\0\u4f4c\0\u4f7e"+ + "\0\u4fb0\0\u4fe2\0\u5014\0\u5046\0\u5078\0\u50aa\0\u50dc\0\u510e"+ + "\0\u5140\0\u5172\0\u51a4\0\u51d6\0\u5208\0\u523a\0\u526c\0\u529e"+ + "\0\u52d0\0\u5302\0\u5334\0\u5366\0\u5398\0\u53ca\0\u53fc\0\u542e"+ + "\0\u5460\0\u5492\0\u54c4\0\u54f6\0\u5528\0\u555a\0\u558c\0\u55be"+ + "\0\u55f0\0\u5622\0\u55f0\0\u5654\0\u5686\0\u56b8\0\u56ea\0\u571c"+ + "\0\u574e\0\u5780\0\u57b2\0\u4d58\0\u57e4\0\u076c\0\u5816\0\u5848"+ + "\0\u587a\0\u58ac\0\u0352\0\u58de\0\u5910\0\u5942\0\u5974\0\u59a6"+ + "\0\u1f40\0\u59d8\0\u5a0a\0\u5a3c\0\u5a6e\0\u5aa0\0\u5ad2\0\u5b04"+ + "\0\u5b36\0\u5b68\0\u5b9a\0\u5bcc\0\u5bfe\0\u5c30\0\u5c62\0\u5c94"+ + "\0\u5cc6\0\u5cf8\0\u5d2a\0\u5d5c\0\u5d8e\0\u5dc0\0\u5df2\0\u5e24"+ + "\0\u5e56\0\u5e88\0\u5eba\0\u5eec\0\u5f1e\0\u5f50\0\u5f82\0\u5fb4"+ + "\0\u5fe6\0\u6018\0\u604a\0\u607c\0\u60ae\0\u60e0\0\u6112\0\u6144"+ + "\0\u6176\0\u61a8\0\u5460\0\u0834\0\u61da\0\u620c\0\u623e\0\u6270"+ + "\0\u62a2\0\u62d4\0\u6306\0\u6338\0\u636a\0\u639c\0\u63ce\0\u6400"+ + "\0\u6432\0\u6464\0\u6496\0\u64c8\0\u64fa\0\u652c\0\u655e\0\u6590"+ + "\0\u65c2\0\u65f4\0\u6626\0\u6658\0\u668a\0\u66bc\0\u66ee\0\u6720"+ + "\0\u6752\0\u6784\0\u67b6\0\u67e8\0\u681a\0\u684c\0\u687e\0\u68b0"+ + "\0\u68e2\0\u6914\0\u6946\0\u6978\0\u69aa\0\u69dc\0\u6a0e\0\u6a40"+ + "\0\u6a72\0\u6aa4\0\u6ad6\0\u6b08\0\u6b3a\0\u6b6c\0\u6b9e\0\u6bd0"+ + "\0\u6c02\0\u6c34\0\u6c66\0\u4236\0\u6c98\0\u6cca\0\u65f4\0\u6cfc"+ + "\0\u6d2e\0\u6d60\0\u6d92\0\u6dc4\0\u6df6\0\u6e28\0\u6e5a\0\u5a6e"+ + "\0\u6e8c\0\u6ebe\0\u6ef0\0\u6f22\0\u6f54\0\u6f86\0\u6fb8\0\u6fea"+ + "\0\u701c\0\u704e\0\u7080\0\u70b2\0\u70e4\0\u7116\0\u7148\0\u717a"+ + "\0\u61da\0\u71ac\0\u71de\0\u7210\0\u7242\0\u1194\0\u7274\0\u72a6"+ + "\0\u72d8\0\u730a\0\u733c\0\u736e\0\u73a0\0\u73d2\0\u7404\0\u7436"+ + "\0\u7468\0\u749a\0\u74cc\0\u74fe\0\u7530\0\u7562\0\u7594\0\u587a"+ + "\0\u75c6\0\u75f8\0\u762a\0\u765c\0\u768e\0\u76c0\0\u76f2\0\u7724"+ + "\0\u7756\0\u7788\0\u77ba\0\u77ec\0\u781e\0\u7850\0\u7882\0\u4ee8"+ + "\0\u78b4\0\u78e6\0\u7918\0\u794a\0\u797c\0\u79ae\0\u79e0\0\u7a12"+ + "\0\u7a44\0\u7a76\0\u7aa8\0\u7ada\0\u7b0c\0\u7b3e\0\u7b70\0\u7ba2"+ + "\0\u6d60\0\u7bd4\0\u7c06\0\u7c38"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[668]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\u015e" + - "\0\144\0\u0190\0\144\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a" + - "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a" + - "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa" + - "\0\u05dc\0\u060e\0\u0640\0\u0672\0\u06a4\0\u06d6\0\u0708\0\u0708" + - "\0\u073a\0\u076c\0\u079e\0\u0352\0\u07d0\0\u0802\0\u0834\0\144" + - "\0\144\0\u0866\0\u0898\0\u08ca\0\u08fc\0\u092e\0\u0960\0\u0992" + - "\0\u09c4\0\u09f6\0\u0a28\0\u0a5a\0\u0a8c\0\u0abe\0\u0af0\0\u0b22" + - "\0\u0b54\0\u0b86\0\u0bb8\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2" + - "\0\u0ce4\0\u0d16\0\u0d48\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42" + - "\0\u0e74\0\u0ea6\0\u0ed8\0\u0f0a\0\u0f3c\0\u0352\0\u0f6e\0\u0fa0" + - "\0\u0fd2\0\u1004\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130" + - "\0\u1162\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u12c0" + - "\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e\0\u1450" + - "\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c\0\u15ae\0\u15e0" + - "\0\u1612\0\u1644\0\u1676\0\u16a8\0\u16da\0\u170c\0\u173e\0\u1770" + - "\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a\0\u189c\0\u18ce\0\u1900" + - "\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa\0\u1a2c\0\u1a5e\0\u1a90" + - "\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a\0\u1bbc\0\u1bee\0\u0352" + - "\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u186a\0\u1d1a\0\u1d4c" + - "\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa\0\u1edc" + - "\0\u1f0e\0\u1f40\0\u1f72\0\u1fa4\0\u1fd6\0\u2008\0\u203a\0\u206c" + - "\0\u209e\0\u20d0\0\u2102\0\u2134\0\u2166\0\u2198\0\u21ca\0\u21fc" + - "\0\u222e\0\u2260\0\u2292\0\u22c4\0\u22f6\0\u2328\0\u235a\0\u238c" + - "\0\u23be\0\u23f0\0\u2422\0\u2454\0\u2486\0\u24b8\0\u24ea\0\u251c" + - "\0\u254e\0\u2580\0\u25b2\0\u25e4\0\u2616\0\u2648\0\u267a\0\u26ac" + - "\0\u26de\0\u2710\0\u2742\0\u2774\0\u27a6\0\u27d8\0\u280a\0\u283c" + - "\0\u286e\0\u07d0\0\u28a0\0\u28d2\0\u2904\0\u2936\0\u2968\0\u299a" + - "\0\u29cc\0\u29fe\0\u2a30\0\u2a62\0\u2a94\0\u2ac6\0\u2af8\0\u2b2a" + - "\0\u2b5c\0\u2b8e\0\u2bc0\0\u2bf2\0\u2c24\0\u2c56\0\u2c88\0\u2cba" + - "\0\u2cec\0\u2d1e\0\u2d50\0\u2d82\0\144\0\u2db4\0\u2de6\0\u2e18" + - "\0\u2e4a\0\u2e7c\0\u2eae\0\u2ee0\0\u2f12\0\u2f44\0\u2f76\0\u2fa8" + - "\0\u2fda\0\u300c\0\u303e\0\u3070\0\u30a2\0\u30d4\0\u3106\0\u3138" + - "\0\u316a\0\u319c\0\u31ce\0\u3200\0\u3232\0\u3264\0\u3296\0\u0352" + - "\0\u32c8\0\u32fa\0\u332c\0\u335e\0\u3390\0\u33c2\0\u33f4\0\u3426" + - "\0\u3458\0\u348a\0\u34bc\0\u34ee\0\u3520\0\u3552\0\u3584\0\u35b6" + - "\0\u35e8\0\u361a\0\u364c\0\u367e\0\u36b0\0\u36e2\0\u3714\0\u3746" + - "\0\u3778\0\u37aa\0\u37dc\0\u380e\0\u3840\0\u3872\0\u38a4\0\u38d6" + - "\0\u3908\0\u393a\0\u396c\0\u399e\0\u39d0\0\u3a02\0\u3a34\0\u3a66" + - "\0\u3a98\0\u3aca\0\u3afc\0\u3b2e\0\u3b60\0\u3b92\0\u3bc4\0\u3bf6" + - "\0\u3c28\0\u3c5a\0\u3c8c\0\u3cbe\0\u3cf0\0\u3d22\0\u3d54\0\u3d86" + - "\0\u3db8\0\u3dea\0\u3e1c\0\u3e4e\0\u3e80\0\u3eb2\0\u3ee4\0\u3f16" + - "\0\u3f48\0\u3f7a\0\u3fac\0\u3fde\0\u4010\0\u36e2\0\u4042\0\u4074" + - "\0\u40a6\0\u40d8\0\u410a\0\u413c\0\u416e\0\u41a0\0\u41d2\0\u4204" + - "\0\u4236\0\u4268\0\u429a\0\u42cc\0\u42fe\0\u4330\0\u4362\0\u4394" + - "\0\u43c6\0\u43f8\0\u442a\0\u445c\0\u448e\0\u44c0\0\u44f2\0\u4524" + - "\0\u4556\0\u4588\0\u45ba\0\u45ec\0\u461e\0\u3b92\0\u4650\0\u4682" + - "\0\u46b4\0\u361a\0\u46e6\0\u4718\0\u474a\0\u477c\0\u47ae\0\u47e0" + - "\0\u4812\0\u4844\0\u4876\0\u48a8\0\u48da\0\u490c\0\u493e\0\u4970" + - "\0\u49a2\0\u49d4\0\u4a06\0\u4a38\0\u4a6a\0\u4a9c\0\u4ace\0\u4b00" + - "\0\u4b32\0\u4b64\0\u4b96\0\u4bc8\0\u4bfa\0\u4c2c\0\u4c5e\0\u4c90" + - "\0\u4cc2\0\u4cf4\0\u4d26\0\u4d58\0\u4d8a\0\u4dbc\0\u410a\0\u4dee" + - "\0\u4e20\0\u4e52\0\u4e84\0\u4eb6\0\u4ee8\0\u4f1a\0\u4f4c\0\u4f7e" + - "\0\u4fb0\0\u4fe2\0\u5014\0\u5046\0\u5078\0\u50aa\0\u50dc\0\u510e" + - "\0\u5140\0\u5172\0\u51a4\0\u51d6\0\u5208\0\u523a\0\u526c\0\u529e" + - "\0\u52d0\0\u5302\0\u5334\0\u5366\0\u5398\0\u53ca\0\u53fc\0\u542e" + - "\0\u5460\0\u5492\0\u54c4\0\u54f6\0\u5528\0\u555a\0\u558c\0\u55be" + - "\0\u55f0\0\u5622\0\u55f0\0\u5654\0\u5686\0\u56b8\0\u56ea\0\u571c" + - "\0\u574e\0\u5780\0\u57b2\0\u4d58\0\u57e4\0\u076c\0\u5816\0\u5848" + - "\0\u587a\0\u58ac\0\u0352\0\u58de\0\u5910\0\u5942\0\u5974\0\u59a6" + - "\0\u1f40\0\u59d8\0\u5a0a\0\u5a3c\0\u5a6e\0\u5aa0\0\u5ad2\0\u5b04" + - "\0\u5b36\0\u5b68\0\u5b9a\0\u5bcc\0\u5bfe\0\u5c30\0\u5c62\0\u5c94" + - "\0\u5cc6\0\u5cf8\0\u5d2a\0\u5d5c\0\u5d8e\0\u5dc0\0\u5df2\0\u5e24" + - "\0\u5e56\0\u5e88\0\u5eba\0\u5eec\0\u5f1e\0\u5f50\0\u5f82\0\u5fb4" + - "\0\u5fe6\0\u6018\0\u604a\0\u607c\0\u60ae\0\u60e0\0\u6112\0\u6144" + - "\0\u6176\0\u61a8\0\u5460\0\u0834\0\u61da\0\u620c\0\u623e\0\u6270" + - "\0\u62a2\0\u62d4\0\u6306\0\u6338\0\u636a\0\u639c\0\u63ce\0\u6400" + - "\0\u6432\0\u6464\0\u6496\0\u64c8\0\u64fa\0\u652c\0\u655e\0\u6590" + - "\0\u65c2\0\u65f4\0\u6626\0\u6658\0\u668a\0\u66bc\0\u66ee\0\u6720" + - "\0\u6752\0\u6784\0\u67b6\0\u67e8\0\u681a\0\u684c\0\u687e\0\u68b0" + - "\0\u68e2\0\u6914\0\u6946\0\u6978\0\u69aa\0\u69dc\0\u6a0e\0\u6a40" + - "\0\u6a72\0\u6aa4\0\u6ad6\0\u6b08\0\u6b3a\0\u6b6c\0\u6b9e\0\u6bd0" + - "\0\u6c02\0\u6c34\0\u6c66\0\u4236\0\u6c98\0\u6cca\0\u65f4\0\u6cfc" + - "\0\u6d2e\0\u6d60\0\u6d92\0\u6dc4\0\u6df6\0\u6e28\0\u6e5a\0\u5a6e" + - "\0\u6e8c\0\u6ebe\0\u6ef0\0\u6f22\0\u6f54\0\u6f86\0\u6fb8\0\u6fea" + - "\0\u701c\0\u704e\0\u7080\0\u70b2\0\u70e4\0\u7116\0\u7148\0\u717a" + - "\0\u61da\0\u71ac\0\u71de\0\u7210\0\u7242\0\u1194\0\u7274\0\u72a6" + - "\0\u72d8\0\u730a\0\u733c\0\u736e\0\u73a0\0\u73d2\0\u7404\0\u7436" + - "\0\u7468\0\u749a\0\u74cc\0\u74fe\0\u7530\0\u7562\0\u7594\0\u587a" + - "\0\u75c6\0\u75f8\0\u762a\0\u765c\0\u768e\0\u76c0\0\u76f2\0\u7724" + - "\0\u7756\0\u7788\0\u77ba\0\u77ec\0\u781e\0\u7850\0\u7882\0\u4ee8" + - "\0\u78b4\0\u78e6\0\u7918\0\u794a\0\u797c\0\u79ae\0\u79e0\0\u7a12" + - "\0\u7a44\0\u7a76\0\u7aa8\0\u7ada\0\u7b0c\0\u7b3e\0\u7b70\0\u7ba2" + - "\0\u6d60\0\u7bd4\0\u7c06\0\u7c38"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[668]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11"+ + "\1\12\1\3\3\13\1\14\4\5\1\15\5\5\1\16"+ + "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\3"+ + "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\24"+ + "\1\45\1\3\1\4\1\5\1\3\1\6\1\7\1\10"+ + "\1\11\1\12\1\3\1\13\1\46\1\13\1\14\4\5"+ + "\1\15\5\5\1\16\1\17\1\20\1\21\1\22\1\23"+ + "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\35\1\3\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\24\1\45\62\0\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\51"+ + "\5\24\2\52\1\24\1\52\1\24\1\53\1\24\1\54"+ + "\1\55\1\54\1\24\1\56\4\24\1\47\1\52\1\24"+ + "\1\54\1\24\1\57\4\24\1\47\1\24\1\5\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\5\1\24"+ + "\5\5\20\24\1\47\11\24\4\6\1\60\55\6\5\7"+ + "\1\61\54\7\7\10\1\0\52\10\10\0\1\12\67\0"+ + "\1\62\1\63\1\64\1\65\2\0\1\65\2\64\1\0"+ + "\1\66\1\67\1\0\1\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\0\1\76\1\77\1\100\1\101\1\102\1\103"+ + "\2\0\1\104\1\0\1\105\1\106\4\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\107\3\24\1\110\1\111\1\24\1\112\1\113\1\114"+ + "\2\24\1\115\1\116\1\117\1\24\1\47\3\24\1\120"+ + "\1\121\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\1\122\5\24\1\123\3\24\1\124"+ + "\1\125\1\126\1\24\1\127\2\24\1\130\2\24\1\131"+ + "\1\132\4\24\1\47\3\24\1\126\5\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\133\1\134\2\24\1\135\1\136\1\24\1\137\1\24"+ + "\1\140\1\141\1\24\1\142\1\134\1\24\1\143\1\47"+ + "\1\144\3\24\1\145\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\146\13\24"+ + "\1\147\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\126\6\24"+ + "\2\126\4\24\1\150\1\24\1\151\2\24\1\152\1\153"+ + "\2\24\1\47\3\24\1\126\3\24\1\154\1\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\155\1\24\1\156\2\157\1\160\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\161\1\162\1\24\1\163\3\24"+ + "\1\164\1\165\1\24\1\166\1\167\4\24\1\47\3\24"+ + "\1\170\1\171\1\172\2\24\1\173\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\126\5\24\1\174\1\134\1\175"+ + "\1\176\1\24\1\177\1\24\1\126\1\200\1\24\1\43"+ + "\1\24\1\201\1\202\1\203\1\204\1\47\1\134\1\205"+ + "\2\24\1\145\1\206\1\24\1\207\1\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\210\5\24\1\211\1\212\1\126\1\213\1\214\2\24"+ + "\1\126\1\24\1\215\1\216\5\24\1\47\1\24\1\217"+ + "\1\24\1\126\1\220\3\24\1\221\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\1\122\3\24"+ + "\1\222\1\24\1\123\7\24\1\223\11\24\1\224\1\225"+ + "\1\47\10\24\1\226\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\227\2\126\1\230"+ + "\1\231\1\232\1\24\1\126\1\24\1\233\1\230\1\24"+ + "\1\230\1\234\1\235\1\230\1\47\1\24\1\236\1\24"+ + "\1\126\1\24\1\230\3\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\237\4\24"+ + "\1\240\3\24\1\241\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ + "\1\242\1\243\1\244\1\245\7\24\1\246\2\24\1\47"+ + "\1\24\1\205\5\24\1\247\1\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\250"+ + "\1\251\1\24\1\252\2\24\1\253\1\254\3\24\1\255"+ + "\1\47\4\24\1\256\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\257\3\24"+ + "\1\260\1\261\2\24\1\262\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\3\24\1\263\1\264\5\24\1\265\1\266\1\24\1\267"+ + "\1\270\2\24\1\271\1\272\1\273\1\274\1\275\1\276"+ + "\1\277\1\300\1\301\1\47\1\24\1\302\1\24\1\303"+ + "\1\304\2\24\1\305\1\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\306\2\24"+ + "\1\307\2\24\1\126\1\24\1\310\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\311\1\24\1\312\1\313\1\314\4\24"+ + "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\316\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\317\1\320\6\24\1\321"+ + "\1\322\6\24\1\47\4\24\1\323\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\324\10\24\1\325\3\24\1\326\1\327\1\24\1\47"+ + "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\24\1\205"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\6\24\1\330\2\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\331\12\24\1\47\11\24\1\0\2\46\13\0"+ + "\32\46\1\0\11\46\3\47\1\0\3\47\2\0\1\47"+ + "\2\0\1\47\1\0\45\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\54\3\24\1\54"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\54\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\332\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\3\24\1\333\5\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ + "\5\24\2\52\1\24\1\52\1\24\1\54\1\24\3\54"+ + "\6\24\1\47\1\52\1\24\1\54\6\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\54\25\24\1\47\11\24\17\0\1\334\71\0\1\335"+ + "\51\0\1\336\61\0\1\337\73\0\1\340\60\0\1\341"+ + "\14\0\1\342\1\0\1\343\46\0\1\344\2\0\1\345"+ + "\52\0\1\346\4\0\1\347\55\0\1\350\2\0\1\351"+ + "\6\0\1\352\10\0\1\353\31\0\1\354\65\0\1\341"+ + "\4\0\1\355\6\0\1\356\2\0\1\343\46\0\1\357"+ + "\4\0\1\360\50\0\1\361\10\0\1\362\61\0\1\363"+ + "\55\0\1\364\11\0\1\343\61\0\1\365\55\0\1\366"+ + "\46\0\1\367\63\0\1\370\57\0\1\341\1\371\6\0"+ + "\1\372\14\0\1\373\43\0\1\374\1\0\1\375\13\0"+ + "\1\376\4\0\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\16\24\1\377\3\24\1\u0100\1\24"+ + "\1\u0101\1\u0102\4\24\1\47\1\u0103\7\24\1\u0104\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0105\3\24\1\u0106\3\24\1\u0107\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\3\24\1\u0108\5\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u0109\1\u010a\1\u010b\1\24\1\u010c\11\24\1\u010d"+ + "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u010e"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u010f\11\24\1\54\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u0110\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u0111\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\u0112"+ + "\1\u0113\2\24\1\u0114\3\24\1\u0115\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\23\24\1\142\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u0116\10\24\1\u0117\3\24\1\u0118\1\u0119\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\2\24\1\u0110\27\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\3\24\1\u0110\26\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\54"+ + "\6\24\1\54\2\24\1\54\5\24\1\47\4\24\1\54"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u011a\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u011b\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u011c"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\22\24\1\54\1\24\1\u011d"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\u011e\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u011f\1\u0120\1\54\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\24\24\1\146\5\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\23\24\1\u0121\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0122"+ + "\6\24\1\54\3\24\1\u0123\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\54\5\24\1\54\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\22\24\1\u0124\1\u0125\1\u0126\5\24\1\47\1\24\1\u0127"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\54\10\24\1\47\4\24\1\u0128"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\54\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\54\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\54"+ + "\2\24\1\146\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\213"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\54\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\1\u0129\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\54\12\24\1\54\1\47\1\24\1\u012a\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\30\24\1\u012b\1\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\54"+ + "\2\24\2\54\7\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u012c"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u012d\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u012e\5\24\1\u012f\6\24\1\u0130"+ + "\1\u0131\3\24\1\u0132\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\4\24\1\54\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\54\2\24"+ + "\1\54\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u0133\21\24"+ + "\1\u0134\3\24\1\47\4\24\1\u0135\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\3\24\1\126\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u0136\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\126\25\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\126\22\24\1\126\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\14\24\1\u0137\15\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\27\24\1\126\2\24\1\47\3\24"+ + "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u0138\1\24\1\u0139\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\u013a\21\24\1\u013b\1\u013c"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\143"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\230\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u013d\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\54"+ + "\1\u011f\1\24\1\54\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\1\u013e\2\24\1\u013e\4\24\1\u013f\4\24\1\u0140\1\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\7\24"+ + "\1\154\1\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0141\3\24\1\u0142\3\24"+ + "\1\47\1\u0143\10\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\u0126\17\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\1\126\1\24\2\126\1\24\5\126\1\u0144"+ + "\3\24\1\u0145\3\24\1\54\1\u0126\1\54\2\24\1\54"+ + "\2\24\1\47\4\24\1\u0128\4\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\146"+ + "\5\24\1\47\1\u0146\1\24\1\u0147\6\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\u0148\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0149\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\315\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u014a\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u014b\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\30\24\1\u014c\1\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\13\24\1\u011b\2\24\1\u014d\7\24"+ + "\1\u014e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\54\1\24"+ + "\1\54\1\24\1\143\1\54\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\126"+ + "\2\24\2\126\1\24\1\126\20\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u014f\5\24\1\47\4\24\1\u0150\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\5\24\1\54\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\52"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u0151\15\24\1\54"+ + "\1\u0152\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0153\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\u0154\13\24\1\u0155\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\143\25\24\1\47\1\u0110"+ + "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0156\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u0157\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0158\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\54\6\24\1\54\4\24"+ + "\1\u0159\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\1\126\1\24\2\126"+ + "\1\24\5\126\20\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\54"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u015a\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\10\24\1\u015b\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\230\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u0103\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\115\17\24\1\47\1\54"+ + "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\54\14\24\1\u015c\4\24\1\54"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u012c\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\7\24\1\154\1\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\2\24\1\126\2\24\4\126\21\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\146\10\24\1\47\3\24\1\u015d\5\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u015e\3\24\1\47\4\24\1\u015f\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0160\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u0161"+ + "\12\24\1\146\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0162"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0163\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u0164\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0165\1\u0166\3\24\1\u0167\3\24\1\47\10\24"+ + "\1\u0168\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24"+ + "\1\u0110\4\24\1\u0169\1\u016a\1\24\1\u016b\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\4\24\1\u013a\23\24\1\u011b\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\3\24\1\54\26\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u016c\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u016d"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u016e\22\24\1\u016f"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0170"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u0171\3\24\1\u0172\7\24\1\u0173"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\143\1\u0110\5\24"+ + "\1\u0174\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0175\5\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\13\24\1\u0176\5\24\1\u0177\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u0178\3\24\1\u0179\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\12\24\1\u017a\7\24\1\u017b\3\24"+ + "\1\u017c\1\u017d\1\u017e\1\24\1\47\5\24\1\u017f\3\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u0180\1\143\6\24\1\u0181\6\24\1\47"+ + "\4\24\1\u0182\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\16\24\1\u0161\13\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u0183\7\24\1\u0184\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\u0185\1\u0186\1\57\3\24\1\u0187"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\146\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\317\1\u0176\5\24\1\u0188\1\u0189"+ + "\1\24\1\u018a\1\u018b\4\24\1\47\4\24\1\u018c\4\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\22\24\1\u018d\7\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u018e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\311\10\24"+ + "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\156\3\24"+ + "\1\u018f\2\24\1\u0190\1\u0191\3\24\1\u0192\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u0193\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u0194\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u0195"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u0196\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0137\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\27\24\1\u015e"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u0197\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0110\3\24\1\47\4\24\1\u0135"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u0198\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\16\24\1\u0199\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u0176"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\12\24\1\u019a\17\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u019b\15\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\16\24\1\u019c\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u019d\1\u019e\7\24"+ + "\1\47\3\24\1\u019f\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\u01a0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\25\24\1\u019f\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u015b\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01a1"+ + "\15\24\1\u01a2\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\16\24\1\u01a3\13\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\2\24\1\54\6\24"+ + "\20\0\1\365\60\0\1\u01a4\62\0\1\u01a5\61\0\1\u01a5"+ + "\2\0\1\365\60\0\1\u01a6\70\0\1\u01a7\67\0\1\u01a8"+ + "\62\0\1\u01a9\56\0\1\u01aa\63\0\1\365\64\0\1\u01ab"+ + "\41\0\1\u01ac\76\0\1\u01ad\56\0\1\u01ae\67\0\1\u01af"+ + "\64\0\1\u01b0\56\0\1\365\75\0\1\365\33\0\1\u01b1"+ + "\66\0\1\101\66\0\1\u01b2\1\u01b3\62\0\1\u01b4\54\0"+ + "\1\u01b5\41\0\1\u01b6\11\0\1\u01b7\6\0\1\372\75\0"+ + "\1\u01b0\51\0\1\u01b8\51\0\1\u01b9\72\0\1\u01ba\61\0"+ + "\1\u01bb\50\0\1\357\102\0\1\365\53\0\1\u01bc\54\0"+ + "\1\u01bd\73\0\1\365\5\0\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u01be\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\20\24\1\u01bf\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u01c0\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ + "\1\u01c1\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0110\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\1\u01c2\10\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u01c3\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0110\3\24"+ + "\1\u0137\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\u01c4\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u01c5\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u01c6\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01c7"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\30\24\1\u01c8\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u01c9\1\u01c7\16\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\15\24\1\u01c0\14\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\u01ca\25\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\u01cb\7\24"+ + "\1\u01cc\6\24\1\u01cb\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c5"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u01cd\16\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\1\u0103\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24"+ + "\1\u010f\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01ce\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u01cf\5\24\1\47\3\24"+ + "\1\u01d0\5\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\10\24\1\u01d1\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u01d0\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01d2"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d3\10\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\54\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ + "\1\237\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\11\24"+ + "\1\u0110\2\24\1\143\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\20\24\1\u01d4\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ + "\1\54\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\u01d5\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\31\24\1\225\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\10\24\1\u01d6\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d7\10\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\u01d5\5\24\1\54\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\4\24\1\u01d8\25\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01d9\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ + "\1\u0131\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\3\24\1\u01da\5\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\14\24\1\u0127\15\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\57\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0176\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u0110\10\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u01db\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u01dc\5\24\1\u01dd\1\u0110\3\24\1\47\2\24\1\54"+ + "\6\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u01de\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\15\24\1\230\6\24\1\230\1\24\1\230\3\24\1\47"+ + "\1\24\1\230\3\24\1\230\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u01df"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\54\3\24\1\54"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\4\24\1\232\4\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\232\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\142\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e0\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u0110\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\4\24\1\u0110\14\24\1\u01e1\5\24\1\u01e2\2\24"+ + "\1\47\4\24\1\u0110\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\142\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u013f\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u013d\1\u01e3\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u01e4\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0110"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\54\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u01e5\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\31\24\1\u01d4\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0155\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\51\5\24\2\52\1\24"+ + "\1\52\1\24\1\54\1\24\3\54\1\24\1\56\4\24"+ + "\1\47\1\52\1\24\1\54\6\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\u01e6\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\22\24\1\u01e7\7\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u01e8\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u01e9\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u01ea"+ + "\12\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\143\14\24\1\u01eb"+ + "\4\24\1\u01ec\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u01ed"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u019f\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u01ee\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u0176\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u01ef"+ + "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u01f0\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u015a\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01f1\2\24\1\47\4\24\1\u01f2\4\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\143\14\24\1\u01f3\10\24\1\47\3\24\1\u01f4"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\10\24\1\u0142\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\u01f5\14\24\1\u01f6\4\24\1\u01f7\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\u01f0\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ + "\1\u016f\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u01f8\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\16\24\1\u01f9\13\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\12\24\1\u015a\17\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01fa\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\14\24"+ + "\1\143\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01fb\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\u01fc\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u0103\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u01fd\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01fe\12\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0110\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u0110\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u01ff\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24"+ + "\1\54\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\15\24\1\54\6\24\1\54\1\24\1\115"+ + "\3\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0200"+ + "\1\24\1\u0201\14\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\54"+ + "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u0202\7\24\1\u0203"+ + "\1\54\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e2\7\24"+ + "\1\u0204\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\u0110\6\24"+ + "\1\u0205\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0206\5\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\1\122\5\24\1\123\12\24\1\u0110"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u0207"+ + "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0208\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\23\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\4\24\1\u0209\4\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0173\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u020a\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u020b\17\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u020c"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\1\54\3\24\1\u020d\6\24"+ + "\1\u020e\3\24\1\u020f\2\24\1\213\7\24\1\47\2\24"+ + "\1\54\6\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\57\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\120\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24"+ + "\1\u0210\5\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\12\24\1\u0211\17\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\54\12\24\1\u020f\1\24"+ + "\2\213\7\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0212\4\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\u0213\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\146\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u0214\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\54\10\24"+ + "\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\23\24\1\u0216\6\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0217\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\10\24\1\u0213\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ + "\13\24\1\u0218\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0180"+ + "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\311\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u020c\1\24\1\u0219\1\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u021a\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u021b\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u0217"+ + "\4\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\30\24\1\u011b"+ + "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u021c\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\17\24\1\u01d6\12\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0178\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a"+ + "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\14\24\1\54\15\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\16\24\1\u021d\13\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\1\u020c\16\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\u021e"+ + "\26\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\u021f\14\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\30\24\1\u0220\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\25\24\1\u0221\4\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u01db"+ + "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\u01e9\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0222\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\54\10\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\25\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\20\24\1\u0223\11\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\16\24\1\u0137\13\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u01d4\1\u0224\1\u0225\4\24\1\u0226\2\24\1\54\1\u0227"+ + "\2\24\1\u01d4\1\24\1\47\2\24\1\u0214\1\24\1\u0228"+ + "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\27\24\1\u0229\2\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\27\24\1\u022a\2\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\54\13\24\1\47\1\24\1\54\7\24\20\0\1\365"+ + "\2\0\1\365\60\0\1\365\71\0\1\u022b\60\0\1\365"+ + "\74\0\1\u022c\56\0\1\u022d\50\0\1\u022e\76\0\1\376"+ + "\51\0\1\u022f\61\0\1\u0230\42\0\1\365\2\0\1\365"+ + "\11\0\1\365\1\0\1\365\4\0\1\u0231\1\u0232\1\0"+ + "\1\u0233\61\0\1\101\4\0\1\365\53\0\1\365\51\0"+ + "\1\u0234\3\0\1\u022e\56\0\1\365\63\0\1\u01b0\4\0"+ + "\1\u0235\45\0\1\u0236\70\0\1\u0237\45\0\1\365\103\0"+ + "\1\u0238\61\0\1\u0239\56\0\1\u023a\50\0\1\u01b2\67\0"+ + "\1\u01b0\53\0\1\u023b\65\0\1\u01a7\24\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u01ef\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\u023c\6\24"+ + "\1\u023d\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\15\24\1\54\3\24"+ + "\1\u01c2\2\24\1\54\3\24\1\u023e\1\24\1\47\1\24"+ + "\1\54\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\25\24\1\54\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\15\24\1\54\14\24\1\47\1\24\1\54\7\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u023f\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24"+ + "\1\u0240\17\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\16\24\1\213\13\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\213\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\54\5\24\1\47\1\24\1\54\3\24"+ + "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\31\24\1\213\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\54\5\24\1\47\1\24\1\54\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0241\12\24\1\47\1\u0242\10\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\23\24"+ + "\1\u0243\6\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0244\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0245\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\24\24\1\u0246\5\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\213\6\24\1\u0247\1\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\4\24\1\u0248\4\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\213\1\u0249"+ + "\15\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u024a\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u0110\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\26\24\1\u024b\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\5\24\1\u01dd\4\24\1\47\2\24\1\54\6\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\15\24\1\54\6\24\1\54\5\24\1\47\1\24\1\54"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0135\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\12\24\1\u01e5\17\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\12\24\1\47\2\24\1\54\6\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\1\u024c\1\u01db"+ + "\5\24\1\u01db\22\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u0162"+ + "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u024d\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\31\24\1\u0110\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24"+ + "\1\u024e\13\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u0110\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\26\24\1\u0110\3\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\17\24\1\u024f\12\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\20\24"+ + "\1\u0110\11\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0250\7\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\50\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u01f0\1\24\1\u01e2\6\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\54\4\24\1\115\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u01d5\1\u0251\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u01d6"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u0252\4\24\1\47"+ + "\3\24\1\311\5\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\7\24\1\u01e9"+ + "\1\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\115\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\143\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u024f"+ + "\3\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\54"+ + "\3\24\1\54\2\24\1\54\5\24\1\47\1\24\1\54"+ + "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\22\24\1\u0253\7\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0254\5\24\1\u0255\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0256\5\24\1\u0257\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0258\14\24\1\u0259\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u01e5\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u025a"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\17\24\1\u025b\12\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\13\24\1\u025c\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u025d\12\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\21\24\1\230\10\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\24\24\1\u0205\5\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\30\24\1\u0244\1\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24"+ + "\1\u025e\1\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u013d\2\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\4\24\1\u019b\25\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\20\24\1\u0103\11\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24"+ + "\1\u025f\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\17\24\1\u01e2\12\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\25\24\1\u025f\4\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01f1\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\20\24\1\u0260"+ + "\11\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\1\54\31\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\4\24\1\u0261\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24"+ + "\1\54\2\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0262\21\24"+ + "\1\257\4\24\1\47\1\257\10\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0164"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\27\24\1\u0263\2\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\13\24\1\u01d6\16\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\22\24\1\u0264\7\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54"+ + "\11\24\1\u020c\13\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\3\24\1\54\5\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u020c\22\24\1\u020c"+ + "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\10\24\1\u0265"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\u0177\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24"+ + "\1\u020f\1\24\2\213\7\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\u0266\14\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24"+ + "\1\u020c\4\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\10\24\1\u0266\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0267"+ + "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0268"+ + "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\12\24\1\u01d5\17\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\u0110\25\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\10\24\1\u0176\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\4\24\1\u0269\4\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\7\24\1\u01d4\15\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24"+ + "\1\143\6\24\1\u01d4\16\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24"+ + "\1\54\3\24\1\54\2\24\1\54\5\24\1\47\1\24"+ + "\1\54\1\24\1\54\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u026a\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\21\24\1\u026b\10\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\25\24\1\u026c\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\1\u026c\16\24\1\47\11\24\30\0\1\365\61\0\1\341"+ + "\14\0\1\101\7\0\1\u026d\47\0\1\354\54\0\1\365"+ + "\53\0\1\u01b0\76\0\1\101\51\0\1\101\7\0\1\u026e"+ + "\47\0\1\365\6\0\1\357\10\0\1\365\50\0\1\u026f"+ + "\63\0\1\u0270\62\0\1\u0271\64\0\1\365\46\0\1\u0272"+ + "\63\0\1\u0273\53\0\1\u0274\60\0\1\361\72\0\1\u022f"+ + "\20\0\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\21\24\1\u0275\10\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\21\24\1\u0276\10\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c2"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\26\24\1\u0277\3\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\26\24\1\u0103\3\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\5\24\1\u0278\3\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u0278"+ + "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\25\24\1\u0279\4\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\20\24\1\u027a\11\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\1\24\1\u0176\7\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u027b"+ + "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\30\24\1\213\1\24\1\47"+ + "\1\24\1\54\7\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\15\24\1\u0110\14\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\14\24\1\u027c\15\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\11\24\1\u01db\20\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u027d"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\25\24\1\u01fe\4\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\25\24\1\u01e5\4\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24"+ + "\1\u015e\3\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0139\3\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\14\24\1\u027e\15\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\3\24\1\u027f\26\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\3\24"+ + "\1\u01d4\26\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0280\26\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\3\24\1\u01f1\26\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\21\24\1\u0254\10\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24"+ + "\1\u0256\10\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\13\24\1\u0281\16\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\32\24\1\47\1\u0110\10\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\27\24\1\u01e5\2\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\5\24\1\172\3\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\24\24\1\u0282\5\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\27\24\1\u0110\2\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\13\24\2\u01d4\15\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54"+ + "\6\24\1\54\3\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\146"+ + "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\23\24\1\143\6\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\15\24\1\52\1\24\1\54\5\24\1\u0283"+ + "\2\24\1\54\1\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\146"+ + "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\4\24\1\u0209\25\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u0284\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\4\24\1\143\25\24\1\47\5\24\1\54\3\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\20\24\1\u01d4\11\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u0285"+ + "\12\24\1\47\11\24\30\0\1\u0286\100\0\1\u0287\55\0"+ + "\1\u0287\64\0\1\u0288\56\0\1\u0289\67\0\1\365\54\0"+ + "\1\u028a\55\0\1\u028b\21\0\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\24\24\1\213\5\24"+ + "\1\47\1\24\1\u0247\7\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24"+ + "\1\u0247\7\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\22\24\1\u0191\7\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\26\24\1\u028c\3\24\1\47\11\24\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24"+ + "\2\u028d\15\24\1\47\11\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\20\24\1\u0247\11\24"+ + "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50"+ + "\2\0\1\47\1\0\23\24\1\u01e2\6\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24\1\u0110"+ + "\4\24\1\u0205\1\u016a\1\24\1\u028e\2\24\1\47\11\24"+ + "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47"+ + "\1\0\32\24\1\47\1\u0222\10\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u020d"+ + "\25\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\21\24\1\u020d\10\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\23\24\1\u028f\6\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0290\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\52"+ + "\1\24\1\54\10\24\1\54\1\24\1\47\11\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\32\24\1\47\10\24\1\216\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\6\24"+ + "\1\u0291\2\24\40\0\1\u0292\66\0\1\365\62\0\1\u01b2"+ + "\60\0\1\101\7\0\1\u0293\60\0\1\u0294\5\0\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\17\24\1\u0295\12\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\213"+ + "\6\24\1\216\5\24\1\47\1\24\1\u0176\7\24\1\47"+ + "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0"+ + "\24\24\1\u013d\5\24\1\47\11\24\1\47\2\24\1\0"+ + "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47"+ + "\1\24\1\u01e9\7\24\1\47\2\24\1\0\3\47\2\0"+ + "\1\50\2\0\1\47\1\0\13\24\1\u0296\16\24\1\47"+ + "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0"+ + "\1\47\1\0\32\24\1\47\6\24\1\u0110\2\24\34\0"+ + "\1\u0297\55\0\1\u0298\104\0\1\365\6\0\1\47\2\24"+ + "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24"+ + "\1\47\3\24\1\u01e5\5\24\1\47\2\24\1\0\3\47"+ + "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0299\2\24"+ + "\1\47\11\24\41\0\1\u029a\60\0\1\u029b\51\0\1\341"+ + "\65\0\1\u029c\66\0\1\365\20\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[31850]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\1\11\5\1\1\11\1\1\1\11\44\1\2\11"+ + "\25\0\225\1\31\0\1\11\11\0\245\1\1\0\1\1"+ + "\10\0\1\1\17\0\155\1\1\0\1\1\3\0\1\1"+ + "\5\0\1\1\5\0\61\1\7\0\22\1\1\0\1\1"+ + "\2\0\1\1\1\0\6\1\3\0\2\1\2\0\2\1"+ + "\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[668]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\3\1\4\1\5\1\3\1\6\1\7\1\10\1\11" + - "\1\12\1\3\3\13\1\14\4\5\1\15\5\5\1\16" + - "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26" + - "\1\27\1\30\1\31\1\32\1\33\1\34\1\35\1\3" + - "\1\36\1\37\1\40\1\41\1\42\1\43\1\44\1\24" + - "\1\45\1\3\1\4\1\5\1\3\1\6\1\7\1\10" + - "\1\11\1\12\1\3\1\13\1\46\1\13\1\14\4\5" + - "\1\15\5\5\1\16\1\17\1\20\1\21\1\22\1\23" + - "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33" + - "\1\34\1\35\1\3\1\36\1\37\1\40\1\41\1\42" + - "\1\43\1\44\1\24\1\45\62\0\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\51" + - "\5\24\2\52\1\24\1\52\1\24\1\53\1\24\1\54" + - "\1\55\1\54\1\24\1\56\4\24\1\47\1\52\1\24" + - "\1\54\1\24\1\57\4\24\1\47\1\24\1\5\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\5\1\24" + - "\5\5\20\24\1\47\11\24\4\6\1\60\55\6\5\7" + - "\1\61\54\7\7\10\1\0\52\10\10\0\1\12\67\0" + - "\1\62\1\63\1\64\1\65\2\0\1\65\2\64\1\0" + - "\1\66\1\67\1\0\1\70\1\71\1\72\1\73\1\74" + - "\1\75\1\0\1\76\1\77\1\100\1\101\1\102\1\103" + - "\2\0\1\104\1\0\1\105\1\106\4\0\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\107\3\24\1\110\1\111\1\24\1\112\1\113\1\114" + - "\2\24\1\115\1\116\1\117\1\24\1\47\3\24\1\120" + - "\1\121\4\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\1\122\5\24\1\123\3\24\1\124" + - "\1\125\1\126\1\24\1\127\2\24\1\130\2\24\1\131" + - "\1\132\4\24\1\47\3\24\1\126\5\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\133\1\134\2\24\1\135\1\136\1\24\1\137\1\24" + - "\1\140\1\141\1\24\1\142\1\134\1\24\1\143\1\47" + - "\1\144\3\24\1\145\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\13\24\1\146\13\24" + - "\1\147\2\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\126\6\24" + - "\2\126\4\24\1\150\1\24\1\151\2\24\1\152\1\153" + - "\2\24\1\47\3\24\1\126\3\24\1\154\1\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\155\1\24\1\156\2\157\1\160\5\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\12\24\1\161\1\162\1\24\1\163\3\24" + - "\1\164\1\165\1\24\1\166\1\167\4\24\1\47\3\24" + - "\1\170\1\171\1\172\2\24\1\173\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\4\24\1\126\5\24\1\174\1\134\1\175" + - "\1\176\1\24\1\177\1\24\1\126\1\200\1\24\1\43" + - "\1\24\1\201\1\202\1\203\1\204\1\47\1\134\1\205" + - "\2\24\1\145\1\206\1\24\1\207\1\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\210\5\24\1\211\1\212\1\126\1\213\1\214\2\24" + - "\1\126\1\24\1\215\1\216\5\24\1\47\1\24\1\217" + - "\1\24\1\126\1\220\3\24\1\221\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\1\122\3\24" + - "\1\222\1\24\1\123\7\24\1\223\11\24\1\224\1\225" + - "\1\47\10\24\1\226\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\12\24\1\227\2\126\1\230" + - "\1\231\1\232\1\24\1\126\1\24\1\233\1\230\1\24" + - "\1\230\1\234\1\235\1\230\1\47\1\24\1\236\1\24" + - "\1\126\1\24\1\230\3\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\12\24\1\237\4\24" + - "\1\240\3\24\1\241\6\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24" + - "\1\242\1\243\1\244\1\245\7\24\1\246\2\24\1\47" + - "\1\24\1\205\5\24\1\247\1\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\250" + - "\1\251\1\24\1\252\2\24\1\253\1\254\3\24\1\255" + - "\1\47\4\24\1\256\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\15\24\1\257\3\24" + - "\1\260\1\261\2\24\1\262\4\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\3\24\1\263\1\264\5\24\1\265\1\266\1\24\1\267" + - "\1\270\2\24\1\271\1\272\1\273\1\274\1\275\1\276" + - "\1\277\1\300\1\301\1\47\1\24\1\302\1\24\1\303" + - "\1\304\2\24\1\305\1\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\13\24\1\306\2\24" + - "\1\307\2\24\1\126\1\24\1\310\6\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\12\24\1\311\1\24\1\312\1\313\1\314\4\24" + - "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\316\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\12\24\1\317\1\320\6\24\1\321" + - "\1\322\6\24\1\47\4\24\1\323\4\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\324\10\24\1\325\3\24\1\326\1\327\1\24\1\47" + - "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\1\24\1\205" + - "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\6\24\1\330\2\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\331\12\24\1\47\11\24\1\0\2\46\13\0" + - "\32\46\1\0\11\46\3\47\1\0\3\47\2\0\1\47" + - "\2\0\1\47\1\0\45\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\17\24\1\54\3\24\1\54" + - "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\17\24\1\54\12\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\22\24\1\332\7\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\3\24\1\333\5\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54" + - "\5\24\2\52\1\24\1\52\1\24\1\54\1\24\3\54" + - "\6\24\1\47\1\52\1\24\1\54\6\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\54\25\24\1\47\11\24\17\0\1\334\71\0\1\335" + - "\51\0\1\336\61\0\1\337\73\0\1\340\60\0\1\341" + - "\14\0\1\342\1\0\1\343\46\0\1\344\2\0\1\345" + - "\52\0\1\346\4\0\1\347\55\0\1\350\2\0\1\351" + - "\6\0\1\352\10\0\1\353\31\0\1\354\65\0\1\341" + - "\4\0\1\355\6\0\1\356\2\0\1\343\46\0\1\357" + - "\4\0\1\360\50\0\1\361\10\0\1\362\61\0\1\363" + - "\55\0\1\364\11\0\1\343\61\0\1\365\55\0\1\366" + - "\46\0\1\367\63\0\1\370\57\0\1\341\1\371\6\0" + - "\1\372\14\0\1\373\43\0\1\374\1\0\1\375\13\0" + - "\1\376\4\0\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\16\24\1\377\3\24\1\u0100\1\24" + - "\1\u0101\1\u0102\4\24\1\47\1\u0103\7\24\1\u0104\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u0105\3\24\1\u0106\3\24\1\u0107\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\3\24\1\u0108\5\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\12\24\1\u0109\1\u010a\1\u010b\1\24\1\u010c\11\24\1\u010d" + - "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u010e" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\4\24\1\u010f\11\24\1\54\13\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\16\24\1\u0110\13\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\25\24\1\u0111\4\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\u0112" + - "\1\u0113\2\24\1\u0114\3\24\1\u0115\4\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\23\24\1\142\6\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\u0116\10\24\1\u0117\3\24\1\u0118\1\u0119\1\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\2\24\1\u0110\27\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\3\24\1\u0110\26\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\54" + - "\6\24\1\54\2\24\1\54\5\24\1\47\4\24\1\54" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\27\24\1\u011a\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\u011b\25\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u011c" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\22\24\1\54\1\24\1\u011d" + - "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\24\24\1\u011e\5\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\14\24\1\u011f\1\u0120\1\54\13\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\24\24\1\146\5\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\23\24\1\u0121\6\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0122" + - "\6\24\1\54\3\24\1\u0123\4\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\13\24\1\54\5\24\1\54\10\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\22\24\1\u0124\1\u0125\1\u0126\5\24\1\47\1\24\1\u0127" + - "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\21\24\1\54\10\24\1\47\4\24\1\u0128" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\16\24\1\54\13\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\54\10\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\54" + - "\2\24\1\146\5\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\213" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\54\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\1\u0129\10\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24" + - "\1\54\12\24\1\54\1\47\1\24\1\u012a\7\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\30\24\1\u012b\1\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\54" + - "\2\24\2\54\7\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u012c" + - "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\u012d\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\4\24\1\u012e\5\24\1\u012f\6\24\1\u0130" + - "\1\u0131\3\24\1\u0132\3\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24" + - "\1\47\4\24\1\54\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\13\24\1\54\2\24" + - "\1\54\13\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\u0133\21\24" + - "\1\u0134\3\24\1\47\4\24\1\u0135\4\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24" + - "\1\47\3\24\1\126\5\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\21\24\1\u0136\10\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\126\25\24\1\47\3\24" + - "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\126\22\24\1\126\2\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\14\24\1\u0137\15\24\1\47\3\24" + - "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\27\24\1\126\2\24\1\47\3\24" + - "\1\126\5\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\24\24\1\u0138\1\24\1\u0139\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\u013a\21\24\1\u013b\1\u013c" + - "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\143" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\30\24\1\230\1\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u013d\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\54" + - "\1\u011f\1\24\1\54\13\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24" + - "\1\u013e\2\24\1\u013e\4\24\1\u013f\4\24\1\u0140\1\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\7\24" + - "\1\154\1\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\22\24\1\u0141\3\24\1\u0142\3\24" + - "\1\47\1\u0143\10\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\12\24\1\u0126\17\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\1\126\1\24\2\126\1\24\5\126\1\u0144" + - "\3\24\1\u0145\3\24\1\54\1\u0126\1\54\2\24\1\54" + - "\2\24\1\47\4\24\1\u0128\4\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\146" + - "\5\24\1\47\1\u0146\1\24\1\u0147\6\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24" + - "\1\u0148\14\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0149\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\23\24\1\315\6\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\16\24\1\u014a\13\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\u014b\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\30\24\1\u014c\1\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\13\24\1\u011b\2\24\1\u014d\7\24" + - "\1\u014e\3\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\22\24\1\54\1\24" + - "\1\54\1\24\1\143\1\54\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\126" + - "\2\24\2\126\1\24\1\126\20\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\24\24\1\u014f\5\24\1\47\4\24\1\u0150\4\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\5\24\1\54\3\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\52" + - "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\4\24\1\u0151\15\24\1\54" + - "\1\u0152\6\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0153\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\12\24\1\u0154\13\24\1\u0155\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\143\25\24\1\47\1\u0110" + - "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u0156\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\31\24\1\u0157\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0158\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\12\24\1\54\6\24\1\54\4\24" + - "\1\u0159\3\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\1\126\1\24\2\126" + - "\1\24\5\126\20\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\54" + - "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\21\24\1\u015a\10\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\10\24\1\u015b\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\230\25\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24" + - "\1\u0103\4\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\12\24\1\115\17\24\1\47\1\54" + - "\10\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\4\24\1\54\14\24\1\u015c\4\24\1\54" + - "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\27\24\1\u012c\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\7\24\1\154\1\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\2\24\1\126\2\24\4\126\21\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\146\10\24\1\47\3\24\1\u015d\5\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\26\24\1\u015e\3\24\1\47\4\24\1\u015f\4\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\u0160\25\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u0161" + - "\12\24\1\146\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0162" + - "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\u0163\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\27\24\1\u0164\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\u0165\1\u0166\3\24\1\u0167\3\24\1\47\10\24" + - "\1\u0168\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24" + - "\1\u0110\4\24\1\u0169\1\u016a\1\24\1\u016b\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\4\24\1\u013a\23\24\1\u011b\1\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\3\24\1\54\26\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u016c\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u016d" + - "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\4\24\1\u016e\22\24\1\u016f" + - "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0170" + - "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\12\24\1\u0171\3\24\1\u0172\7\24\1\u0173" + - "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\15\24\1\143\1\u0110\5\24" + - "\1\u0174\5\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0175\5\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\13\24\1\u0176\5\24\1\u0177\10\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\21\24\1\u0178\3\24\1\u0179\4\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\12\24\1\u017a\7\24\1\u017b\3\24" + - "\1\u017c\1\u017d\1\u017e\1\24\1\47\5\24\1\u017f\3\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\13\24\1\u0180\1\143\6\24\1\u0181\6\24\1\47" + - "\4\24\1\u0182\4\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\16\24\1\u0161\13\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\17\24\1\u0183\7\24\1\u0184\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\21\24\1\u0185\1\u0186\1\57\3\24\1\u0187" + - "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\21\24\1\146\10\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\12\24\1\317\1\u0176\5\24\1\u0188\1\u0189" + - "\1\24\1\u018a\1\u018b\4\24\1\47\4\24\1\u018c\4\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\22\24\1\u018d\7\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24" + - "\1\u018e\13\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\12\24\1\311\10\24" + - "\1\315\6\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\12\24\1\156\3\24" + - "\1\u018f\2\24\1\u0190\1\u0191\3\24\1\u0192\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\30\24\1\u0193\1\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\13\24\1\u0194\16\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u0195" + - "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\23\24\1\u0196\6\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u0137\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\27\24\1\u015e" + - "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\27\24\1\u0197\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u0110\3\24\1\47\4\24\1\u0135" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\16\24\1\u0198\13\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\16\24\1\u0199\13\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u0176" + - "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\12\24\1\u019a\17\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\14\24\1\u019b\15\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\16\24\1\u019c\13\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\4\24\1\231\4\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\21\24\1\u019d\1\u019e\7\24" + - "\1\47\3\24\1\u019f\5\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24" + - "\1\u01a0\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\25\24\1\u019f\4\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\13\24\1\u015b\16\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01a1" + - "\15\24\1\u01a2\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\16\24\1\u01a3\13\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\2\24\1\54\6\24" + - "\20\0\1\365\60\0\1\u01a4\62\0\1\u01a5\61\0\1\u01a5" + - "\2\0\1\365\60\0\1\u01a6\70\0\1\u01a7\67\0\1\u01a8" + - "\62\0\1\u01a9\56\0\1\u01aa\63\0\1\365\64\0\1\u01ab" + - "\41\0\1\u01ac\76\0\1\u01ad\56\0\1\u01ae\67\0\1\u01af" + - "\64\0\1\u01b0\56\0\1\365\75\0\1\365\33\0\1\u01b1" + - "\66\0\1\101\66\0\1\u01b2\1\u01b3\62\0\1\u01b4\54\0" + - "\1\u01b5\41\0\1\u01b6\11\0\1\u01b7\6\0\1\372\75\0" + - "\1\u01b0\51\0\1\u01b8\51\0\1\u01b9\72\0\1\u01ba\61\0" + - "\1\u01bb\50\0\1\357\102\0\1\365\53\0\1\u01bc\54\0" + - "\1\u01bd\73\0\1\365\5\0\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\27\24\1\u01be\2\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\20\24\1\u01bf\11\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\24\24\1\u01c0\5\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24" + - "\1\u01c1\5\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u0110\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\1\u01c2\10\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\31\24\1\u01c3\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0110\3\24" + - "\1\u0137\3\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24" + - "\1\u01c4\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u01c5\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\24\24\1\u01c6\5\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01c7" + - "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\30\24\1\u01c8\1\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\12\24\1\u01c9\1\u01c7\16\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\15\24\1\u01c0\14\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\u01ca\25\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\12\24\1\u01cb\7\24" + - "\1\u01cc\6\24\1\u01cb\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c5" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\13\24\1\u01cd\16\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\1\u0103\10\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\14\24" + - "\1\u010f\15\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01ce\25\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\24\24\1\u01cf\5\24\1\47\3\24" + - "\1\u01d0\5\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\10\24\1\u01d1\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\25\24\1\u01d0\4\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u01d2" + - "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d3\10\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\13\24\1\54\16\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24" + - "\1\237\1\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\11\24" + - "\1\u0110\2\24\1\143\10\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\143\20\24\1\u01d4\4\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24" + - "\1\54\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\17\24\1\u01d5\12\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\31\24\1\225\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24" + - "\1\47\10\24\1\u01d6\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\1\u01d7\10\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\12\24\1\u01d5\5\24\1\54\11\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\4\24\1\u01d8\25\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\u01d9\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24" + - "\1\u0131\7\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\3\24\1\u01da\5\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\14\24\1\u0127\15\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\57\17\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0176\4\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\21\24\1\u0110\10\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\17\24\1\u01db\12\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24" + - "\1\u01dc\5\24\1\u01dd\1\u0110\3\24\1\47\2\24\1\54" + - "\6\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\13\24\1\u01de\16\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\15\24\1\230\6\24\1\230\1\24\1\230\3\24\1\47" + - "\1\24\1\230\3\24\1\230\3\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\u01df" + - "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\25\24\1\54\3\24\1\54" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\4\24\1\232\4\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\21\24\1\232\10\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\142\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e0\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\23\24\1\u0110\6\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\4\24\1\u0110\14\24\1\u01e1\5\24\1\u01e2\2\24" + - "\1\47\4\24\1\u0110\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\142\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\23\24\1\u013f\6\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\16\24\1\u013d\1\u01e3\12\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\26\24\1\u01e4\3\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0110" + - "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\24\24\1\54\5\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\16\24\1\u01e5\13\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\31\24\1\u01d4\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0155\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\51\5\24\2\52\1\24" + - "\1\52\1\24\1\54\1\24\3\54\1\24\1\56\4\24" + - "\1\47\1\52\1\24\1\54\6\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\4\24\1\u01e6\4\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\22\24\1\u01e7\7\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\30\24\1\u01e8\1\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\25\24\1\u01e9\4\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u01ea" + - "\12\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\4\24\1\143\14\24\1\u01eb" + - "\4\24\1\u01ec\3\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u01ed" + - "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\u019f\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\17\24\1\u01ee\12\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\u0176\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u01ef" + - "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\21\24\1\u01f0\10\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\17\24\1\u015a\12\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\u01f1\2\24\1\47\4\24\1\u01f2\4\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\143\14\24\1\u01f3\10\24\1\47\3\24\1\u01f4" + - "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\10\24\1\u0142\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\u01f5\14\24\1\u01f6\4\24\1\u01f7\3\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\26\24\1\u01f0\3\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24" + - "\1\u016f\2\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\21\24\1\u01f8\10\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\16\24\1\u01f9\13\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\12\24\1\u015a\17\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\u01fa\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\14\24" + - "\1\143\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\u01fb\25\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\26\24\1\u01fc\3\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\13\24\1\u0103\16\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24" + - "\1\u01fd\12\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01fe\12\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\22\24\1\u0110\7\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\24\24\1\u0110\5\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24" + - "\1\u01ff\13\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\10\24" + - "\1\54\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\15\24\1\54\6\24\1\54\1\24\1\115" + - "\3\24\1\47\1\24\1\54\7\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0200" + - "\1\24\1\u0201\14\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\23\24\1\54" + - "\6\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\13\24\1\u0202\7\24\1\u0203" + - "\1\54\5\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\17\24\1\u01e2\7\24" + - "\1\u0204\2\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\15\24\1\u0110\6\24" + - "\1\u0205\5\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\24\24\1\u0206\5\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\1\122\5\24\1\123\12\24\1\u0110" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\4\24\1\u0207" + - "\4\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\22\24\1\u0208\7\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\23\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\4\24\1\u0209\4\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\u0173\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\17\24\1\u020a\12\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\12\24\1\u020b\17\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u020c" + - "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\1\54\3\24\1\u020d\6\24" + - "\1\u020e\3\24\1\u020f\2\24\1\213\7\24\1\47\2\24" + - "\1\54\6\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\26\24\1\57\3\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\26\24\1\120\3\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\24\24" + - "\1\u0210\5\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\12\24\1\u0211\17\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\54\12\24\1\u020f\1\24" + - "\2\213\7\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\25\24\1\u0212\4\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\15\24\1\u0213\14\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\16\24\1\146\13\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24" + - "\1\u0214\12\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\21\24\1\54\10\24" + - "\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\23\24\1\u0216\6\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\22\24\1\u0217\7\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\32\24\1\47\10\24\1\u0213\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a" + - "\13\24\1\u0218\3\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\13\24\1\u0180" + - "\16\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\25\24\1\311\4\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u020c\1\24\1\u0219\1\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\23\24\1\u021a\6\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\u021b\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u0217" + - "\4\24\1\146\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\30\24\1\u011b" + - "\1\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\23\24\1\u021c\6\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\17\24\1\u01d6\12\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\u0178\10\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u017a" + - "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\14\24\1\54\15\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\16\24\1\u021d\13\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\13\24\1\u020c\16\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\3\24\1\u021e" + - "\26\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\15\24\1\u021f\14\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\30\24\1\u0220\1\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\25\24\1\u0221\4\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\24\24\1\u01db" + - "\5\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\23\24\1\u01e9\6\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u0222\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\1\54\10\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\4\24\1\143\25\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\20\24\1\u0223\11\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\16\24\1\u0137\13\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\u01d4\1\u0224\1\u0225\4\24\1\u0226\2\24\1\54\1\u0227" + - "\2\24\1\u01d4\1\24\1\47\2\24\1\u0214\1\24\1\u0228" + - "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\27\24\1\u0229\2\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\27\24\1\u022a\2\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24" + - "\1\54\13\24\1\47\1\24\1\54\7\24\20\0\1\365" + - "\2\0\1\365\60\0\1\365\71\0\1\u022b\60\0\1\365" + - "\74\0\1\u022c\56\0\1\u022d\50\0\1\u022e\76\0\1\376" + - "\51\0\1\u022f\61\0\1\u0230\42\0\1\365\2\0\1\365" + - "\11\0\1\365\1\0\1\365\4\0\1\u0231\1\u0232\1\0" + - "\1\u0233\61\0\1\101\4\0\1\365\53\0\1\365\51\0" + - "\1\u0234\3\0\1\u022e\56\0\1\365\63\0\1\u01b0\4\0" + - "\1\u0235\45\0\1\u0236\70\0\1\u0237\45\0\1\365\103\0" + - "\1\u0238\61\0\1\u0239\56\0\1\u023a\50\0\1\u01b2\67\0" + - "\1\u01b0\53\0\1\u023b\65\0\1\u01a7\24\0\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24" + - "\1\u01ef\3\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\21\24\1\u023c\6\24" + - "\1\u023d\1\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\15\24\1\54\3\24" + - "\1\u01c2\2\24\1\54\3\24\1\u023e\1\24\1\47\1\24" + - "\1\54\7\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\25\24\1\54\4\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\15\24\1\54\14\24\1\47\1\24\1\54\7\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\17\24\1\u023f\12\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\12\24" + - "\1\u0240\17\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\16\24\1\213\13\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\15\24\1\213\14\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\24\24\1\54\5\24\1\47\1\24\1\54\3\24" + - "\1\54\3\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\31\24\1\213\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\24\24\1\54\5\24\1\47\1\24\1\54\7\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u0241\12\24\1\47\1\u0242\10\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\23\24" + - "\1\u0243\6\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0244\2\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\22\24\1\u0245\7\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\24\24\1\u0246\5\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\213\6\24\1\u0247\1\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24" + - "\1\47\4\24\1\u0248\4\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\13\24\1\213\1\u0249" + - "\15\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\25\24\1\u024a\4\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\13\24\1\u0110\16\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\26\24\1\u024b\3\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54" + - "\5\24\1\u01dd\4\24\1\47\2\24\1\54\6\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\15\24\1\54\6\24\1\54\5\24\1\47\1\24\1\54" + - "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\22\24\1\u0135\7\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\12\24\1\u01e5\17\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54" + - "\12\24\1\47\2\24\1\54\6\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\1\u024c\1\u01db" + - "\5\24\1\u01db\22\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\16\24\1\u0162" + - "\13\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\27\24\1\u024d\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\31\24\1\u0110\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\16\24" + - "\1\u024e\13\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24" + - "\1\u0110\4\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\26\24\1\u0110\3\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\17\24\1\u024f\12\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\20\24" + - "\1\u0110\11\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\22\24\1\u0250\7\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\50\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\u01f0\1\24\1\u01e2\6\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\54\4\24\1\115\3\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24" + - "\1\u01d5\1\u0251\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\u01d6" + - "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\25\24\1\u0252\4\24\1\47" + - "\3\24\1\311\5\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\7\24\1\u01e9" + - "\1\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\115\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\143\10\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u024f" + - "\3\24\1\u013d\6\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\54" + - "\3\24\1\54\2\24\1\54\5\24\1\47\1\24\1\54" + - "\7\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\22\24\1\u0253\7\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\u0254\5\24\1\u0255\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\u0256\5\24\1\u0257\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\u0258\14\24\1\u0259\10\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u01e5\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u025a" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\17\24\1\u025b\12\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\13\24\1\u025c\16\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24" + - "\1\u025d\12\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\21\24\1\230\10\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\24\24\1\u0205\5\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\30\24\1\u0244\1\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\30\24" + - "\1\u025e\1\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\27\24\1\u013d\2\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\4\24\1\u019b\25\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\20\24\1\u0103\11\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\31\24" + - "\1\u025f\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\17\24\1\u01e2\12\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\25\24\1\u025f\4\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\u01f1\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\20\24\1\u0260" + - "\11\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\1\54\31\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\32\24\1\47\4\24\1\u0261\4\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\27\24" + - "\1\54\2\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0262\21\24" + - "\1\257\4\24\1\47\1\257\10\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\u0164" + - "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\27\24\1\u0263\2\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\13\24\1\u01d6\16\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\22\24\1\u0264\7\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\54" + - "\11\24\1\u020c\13\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\3\24\1\54\5\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\4\24\1\u020c\22\24\1\u020c" + - "\2\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\10\24\1\u0265" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\21\24\1\u0177\10\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\17\24" + - "\1\u020f\1\24\2\213\7\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24" + - "\1\u0266\14\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\4\24" + - "\1\u020c\4\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\10\24\1\u0266\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\4\24\1\u0215\4\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\12\24\1\u0267" + - "\17\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\32\24\1\47\3\24\1\u0268" + - "\5\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\12\24\1\u01d5\17\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\u0110\25\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\10\24\1\u0176\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\15\24\1\54\14\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\32\24\1\47\4\24\1\u0269\4\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\143\7\24\1\u01d4\15\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\4\24" + - "\1\143\6\24\1\u01d4\16\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\15\24" + - "\1\54\3\24\1\54\2\24\1\54\5\24\1\47\1\24" + - "\1\54\1\24\1\54\5\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\26\24\1\u026a\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\21\24\1\u026b\10\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\25\24\1\u026c\4\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24" + - "\1\u026c\16\24\1\47\11\24\30\0\1\365\61\0\1\341" + - "\14\0\1\101\7\0\1\u026d\47\0\1\354\54\0\1\365" + - "\53\0\1\u01b0\76\0\1\101\51\0\1\101\7\0\1\u026e" + - "\47\0\1\365\6\0\1\357\10\0\1\365\50\0\1\u026f" + - "\63\0\1\u0270\62\0\1\u0271\64\0\1\365\46\0\1\u0272" + - "\63\0\1\u0273\53\0\1\u0274\60\0\1\361\72\0\1\u022f" + - "\20\0\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\21\24\1\u0275\10\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\21\24\1\u0276\10\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u01c2" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\26\24\1\u0277\3\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\26\24\1\u0103\3\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\5\24\1\u0278\3\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\26\24\1\u0278" + - "\3\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\25\24\1\u0279\4\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\20\24\1\u027a\11\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\1\24\1\u0176\7\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\21\24\1\u027b" + - "\10\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\30\24\1\213\1\24\1\47" + - "\1\24\1\54\7\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\15\24\1\u0110\14\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\14\24\1\u027c\15\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\11\24\1\u01db\20\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\31\24\1\u027d" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\25\24\1\u01fe\4\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\25\24\1\u01e5\4\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\26\24" + - "\1\u015e\3\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\26\24\1\u0139\3\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\14\24\1\u027e\15\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\3\24\1\u027f\26\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\3\24" + - "\1\u01d4\26\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\3\24\1\u0280\26\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\3\24\1\u01f1\26\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\21\24\1\u0254\10\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\21\24" + - "\1\u0256\10\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\13\24\1\u0281\16\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\32\24\1\47\1\u0110\10\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\27\24\1\u01e5\2\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\5\24\1\172\3\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\24\24\1\u0282\5\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\27\24\1\u0110\2\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\13\24\2\u01d4\15\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\54" + - "\6\24\1\54\3\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\25\24\1\146" + - "\4\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\23\24\1\143\6\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\15\24\1\52\1\24\1\54\5\24\1\u0283" + - "\2\24\1\54\1\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\22\24\1\146" + - "\7\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\4\24\1\u0209\25\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\23\24\1\u0284\6\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\4\24\1\143\25\24\1\47\5\24\1\54\3\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\20\24\1\u01d4\11\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\17\24\1\u0285" + - "\12\24\1\47\11\24\30\0\1\u0286\100\0\1\u0287\55\0" + - "\1\u0287\64\0\1\u0288\56\0\1\u0289\67\0\1\365\54\0" + - "\1\u028a\55\0\1\u028b\21\0\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\24\24\1\213\5\24" + - "\1\47\1\24\1\u0247\7\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\1\24" + - "\1\u0247\7\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\22\24\1\u0191\7\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\26\24\1\u028c\3\24\1\47\11\24\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\13\24" + - "\2\u028d\15\24\1\47\11\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\20\24\1\u0247\11\24" + - "\1\47\11\24\1\47\2\24\1\0\3\47\2\0\1\50" + - "\2\0\1\47\1\0\23\24\1\u01e2\6\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\1\u0110\2\24\1\u0110\11\24\1\u0110\1\24\1\u0110" + - "\4\24\1\u0205\1\u016a\1\24\1\u028e\2\24\1\47\11\24" + - "\1\47\2\24\1\0\3\47\2\0\1\50\2\0\1\47" + - "\1\0\32\24\1\47\1\u0222\10\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\4\24\1\u020d" + - "\25\24\1\47\11\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\21\24\1\u020d\10\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\23\24\1\u028f\6\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u0290\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\52" + - "\1\24\1\54\10\24\1\54\1\24\1\47\11\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\32\24\1\47\10\24\1\216\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\32\24\1\47\6\24" + - "\1\u0291\2\24\40\0\1\u0292\66\0\1\365\62\0\1\u01b2" + - "\60\0\1\101\7\0\1\u0293\60\0\1\u0294\5\0\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\17\24\1\u0295\12\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\15\24\1\213" + - "\6\24\1\216\5\24\1\47\1\24\1\u0176\7\24\1\47" + - "\2\24\1\0\3\47\2\0\1\50\2\0\1\47\1\0" + - "\24\24\1\u013d\5\24\1\47\11\24\1\47\2\24\1\0" + - "\3\47\2\0\1\50\2\0\1\47\1\0\32\24\1\47" + - "\1\24\1\u01e9\7\24\1\47\2\24\1\0\3\47\2\0" + - "\1\50\2\0\1\47\1\0\13\24\1\u0296\16\24\1\47" + - "\11\24\1\47\2\24\1\0\3\47\2\0\1\50\2\0" + - "\1\47\1\0\32\24\1\47\6\24\1\u0110\2\24\34\0" + - "\1\u0297\55\0\1\u0298\104\0\1\365\6\0\1\47\2\24" + - "\1\0\3\47\2\0\1\50\2\0\1\47\1\0\32\24" + - "\1\47\3\24\1\u01e5\5\24\1\47\2\24\1\0\3\47" + - "\2\0\1\50\2\0\1\47\1\0\27\24\1\u0299\2\24" + - "\1\47\11\24\41\0\1\u029a\60\0\1\u029b\51\0\1\341" + - "\65\0\1\u029c\66\0\1\365\20\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[31850]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. We must have this here as JFLex does not generate a + * no parameter constructor. + */ + public AssemblerX86TokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public AssemblerX86TokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public AssemblerX86TokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 200) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\2\0\1\11\5\1\1\11\1\1\1\11\44\1\2\11" + - "\25\0\225\1\31\0\1\11\11\0\245\1\1\0\1\1" + - "\10\0\1\1\17\0\155\1\1\0\1\1\3\0\1\1" + - "\5\0\1\1\5\0\61\1\7\0\22\1\1\0\1\1" + - "\2\0\1\1\1\0\6\1\3\0\2\1\2\0\2\1" + - "\2\0"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[668]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. We must have this here as JFLex does not generate a no parameter constructor. - */ - public AssemblerX86TokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { ";", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + if (zzMarkedPosL > zzStartRead) { + switch (zzBufferL[zzMarkedPosL-1]) { + case '\n': + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + zzAtBOL = true; + break; + case '\r': + if (zzMarkedPosL < zzEndReadL) + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + else if (zzAtEOF) + zzAtBOL = false; + else { + boolean eof = zzRefill(); + zzMarkedPosL = zzMarkedPos; + zzEndReadL = zzEndRead; + zzBufferL = zzBuffer; + if (eof) + zzAtBOL = false; + else + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + } + break; default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public AssemblerX86TokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public AssemblerX86TokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 200) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); + zzAtBOL = false; } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + } + zzAction = -1; - if (zzReader != null) - zzReader.close(); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + if (zzAtBOL) + zzState = ZZ_LEXSTATE[zzLexicalState+1]; + else + zzState = ZZ_LEXSTATE[zzLexicalState]; - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - if (zzMarkedPosL > zzStartRead) { - switch (zzBufferL[zzMarkedPosL - 1]) { - case '\n': - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - zzAtBOL = true; - break; - case '\r': - if (zzMarkedPosL < zzEndReadL) - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - else if (zzAtEOF) - zzAtBOL = false; - else { - boolean eof = zzRefill(); - zzMarkedPosL = zzMarkedPos; - zzEndReadL = zzEndRead; - zzBufferL = zzBuffer; - if (eof) - zzAtBOL = false; - else - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - } - break; - default: - zzAtBOL = false; - } + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - if (zzAtBOL) - zzState = ZZ_LEXSTATE[zzLexicalState + 1]; - else - zzState = ZZ_LEXSTATE[zzLexicalState]; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } + else { + zzInput = zzBufferL[zzCurrentPosL++]; } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 11: { - addToken(Token.RESERVED_WORD); - } - case 16: - break; - case 1: { - addToken(Token.IDENTIFIER); - } - case 17: - break; - case 12: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 18: - break; - case 9: { - addToken(Token.FUNCTION); - } - case 19: - break; - case 5: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 20: - break; - case 14: { - addToken(Token.VARIABLE); - } - case 21: - break; - case 7: { - addToken(Token.WHITESPACE); - } - case 22: - break; - case 10: { - addToken(Token.PREPROCESSOR); - } - case 23: - break; - case 15: { - addToken(Token.DATA_TYPE); - } - case 24: - break; - case 4: { - addToken(Token.ERROR_CHAR); /* addNullToken(); return firstToken; */ - } - case 25: - break; - case 8: { - addToken(Token.OPERATOR); - } - case 26: - break; - case 2: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 27: - break; - case 13: { - addToken(Token.LITERAL_CHAR); - } - case 28: - break; - case 3: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 29: - break; - case 6: { - addNullToken(); - return firstToken; + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 11: + { addToken(Token.RESERVED_WORD); + } + case 16: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 17: break; + case 12: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 18: break; + case 9: + { addToken(Token.FUNCTION); + } + case 19: break; + case 5: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 20: break; + case 14: + { addToken(Token.VARIABLE); + } + case 21: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 22: break; + case 10: + { addToken(Token.PREPROCESSOR); + } + case 23: break; + case 15: + { addToken(Token.DATA_TYPE); + } + case 24: break; + case 4: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 25: break; + case 8: + { addToken(Token.OPERATOR); + } + case 26: break; + case 2: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 27: break; + case 13: + { addToken(Token.LITERAL_CHAR); + } + case 28: break; + case 3: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 29: break; + case 6: + { addNullToken(); return firstToken; + } + case 30: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; } - case 30: - break; + case 669: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 669: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex old mode 100644 new mode 100755 index 0bda1697f..66442ca9a --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex @@ -2,23 +2,9 @@ * 11/18/2009 * * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
          - *
        • The generated BBCodeTokenMaker.java file will contain two + *
        • The generated BBCodeTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -129,6 +115,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -142,6 +129,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ + @Override public boolean getCompleteCloseTags() { return completeCloseTags; } @@ -152,7 +140,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return null always. */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } @@ -192,7 +181,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java old mode 100644 new mode 100755 index aae564414..ae87567a7 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.java @@ -4,23 +4,9 @@ * 11/18/2009 * * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,705 +15,716 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * Scanner for BBCode. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

          - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

          - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

          + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

          + * * If you wish to regenerate this file yourself, keep in mind the following: *

            - *
          • The generated BBCodeTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
          • - *
          • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
          • - *
          • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
          • + *
          • The generated BBCodeTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
          • + *
          • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
          • + *
          • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
          • *
          - * + * * @author Robert Futrell * @version 0.7 - * + * */ public class BBCodeTokenMaker extends AbstractMarkupTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int INTAG = 1; - public static final int YYINITIAL = 0; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\16\0\1\27\15\0" + - "\1\30\35\0\1\3\1\0\1\4\4\0\1\5\1\13\1\26\1\12" + - "\1\0\1\23\1\0\1\6\2\0\1\15\1\22\1\17\1\14\1\0" + - "\1\21\1\16\1\10\1\20\1\7\1\25\2\0\1\24\1\11\uff85\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7" + - "\4\10\6\5\1\11\1\12\1\4\23\5"; - - private static int[] zzUnpackAction() { - int[] result = new int[41]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\31\0\62\0\113\0\144\0\175\0\226\0\144" + - "\0\144\0\226\0\257\0\310\0\341\0\372\0\u0113\0\u012c" + - "\0\u0145\0\u015e\0\u0177\0\u0190\0\144\0\144\0\u01a9\0\u01c2" + - "\0\u01db\0\u01f4\0\u020d\0\u0226\0\u023f\0\u0258\0\u0271\0\u028a" + - "\0\u02a3\0\u02bc\0\u02d5\0\u02ee\0\u0307\0\u0320\0\u0339\0\u0352" + - "\0\u036b"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[41]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\3\1\4\1\5\1\6\25\3\1\7\1\4\1\0" + - "\1\10\1\11\1\12\1\13\1\14\1\15\2\7\1\16" + - "\1\17\1\20\3\7\1\21\1\7\1\22\1\23\2\7" + - "\1\24\1\25\1\3\3\0\25\3\1\0\1\4\107\0" + - "\1\26\1\0\1\7\4\0\22\7\2\0\1\7\4\0" + - "\15\7\1\27\4\7\2\0\1\7\4\0\10\7\1\12" + - "\1\17\10\7\2\0\1\7\4\0\1\7\1\30\20\7" + - "\2\0\1\7\4\0\5\7\1\31\1\7\1\32\12\7" + - "\2\0\1\7\4\0\10\7\1\12\11\7\2\0\1\7" + - "\4\0\1\7\1\12\20\7\2\0\1\7\4\0\2\7" + - "\1\33\17\7\2\0\1\7\4\0\20\7\1\34\1\7" + - "\2\0\1\7\4\0\7\7\1\35\12\7\6\0\1\11" + - "\24\0\1\7\4\0\16\7\1\12\3\7\2\0\1\7" + - "\4\0\4\7\1\36\15\7\2\0\1\7\4\0\12\7" + - "\1\37\7\7\2\0\1\7\4\0\10\7\1\40\11\7" + - "\2\0\1\7\4\0\7\7\1\41\12\7\2\0\1\7" + - "\4\0\1\7\1\42\20\7\2\0\1\7\4\0\2\7" + - "\1\43\17\7\2\0\1\7\4\0\5\7\1\12\14\7" + - "\2\0\1\7\4\0\13\7\1\44\6\7\2\0\1\7" + - "\4\0\7\7\1\45\12\7\2\0\1\7\4\0\13\7" + - "\1\36\6\7\2\0\1\7\4\0\21\7\1\46\2\0" + - "\1\7\4\0\13\7\1\47\6\7\2\0\1\7\4\0" + - "\5\7\1\45\14\7\2\0\1\7\4\0\11\7\1\12" + - "\10\7\2\0\1\7\4\0\5\7\1\50\14\7\2\0" + - "\1\7\4\0\2\7\1\51\17\7\2\0\1\7\4\0" + - "\7\7\1\12\12\7\2\0\1\7\4\0\1\36\21\7" + - "\2\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[900]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\2\0\2\1\1\11\2\1\2\11\13\1\2\11\23\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[41]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Token type specific to BBCodeTokenMaker; this signals that the user has ended a line with an unclosed tag; thus a - * new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG = -1; - - /** - * Whether closing markup tags are automatically completed for BBCode. - */ - private static boolean completeCloseTags = true; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public BBCodeTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INTAG = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\16\0\1\27\15\0"+ + "\1\30\35\0\1\3\1\0\1\4\4\0\1\5\1\13\1\26\1\12"+ + "\1\0\1\23\1\0\1\6\2\0\1\15\1\22\1\17\1\14\1\0"+ + "\1\21\1\16\1\10\1\20\1\7\1\25\2\0\1\24\1\11\uff85\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\4\10\6\5\1\11\1\12\1\4\23\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[41]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\31\0\62\0\113\0\144\0\175\0\226\0\144"+ + "\0\144\0\226\0\257\0\310\0\341\0\372\0\u0113\0\u012c"+ + "\0\u0145\0\u015e\0\u0177\0\u0190\0\144\0\144\0\u01a9\0\u01c2"+ + "\0\u01db\0\u01f4\0\u020d\0\u0226\0\u023f\0\u0258\0\u0271\0\u028a"+ + "\0\u02a3\0\u02bc\0\u02d5\0\u02ee\0\u0307\0\u0320\0\u0339\0\u0352"+ + "\0\u036b"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[41]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\25\3\1\7\1\4\1\0"+ + "\1\10\1\11\1\12\1\13\1\14\1\15\2\7\1\16"+ + "\1\17\1\20\3\7\1\21\1\7\1\22\1\23\2\7"+ + "\1\24\1\25\1\3\3\0\25\3\1\0\1\4\107\0"+ + "\1\26\1\0\1\7\4\0\22\7\2\0\1\7\4\0"+ + "\15\7\1\27\4\7\2\0\1\7\4\0\10\7\1\12"+ + "\1\17\10\7\2\0\1\7\4\0\1\7\1\30\20\7"+ + "\2\0\1\7\4\0\5\7\1\31\1\7\1\32\12\7"+ + "\2\0\1\7\4\0\10\7\1\12\11\7\2\0\1\7"+ + "\4\0\1\7\1\12\20\7\2\0\1\7\4\0\2\7"+ + "\1\33\17\7\2\0\1\7\4\0\20\7\1\34\1\7"+ + "\2\0\1\7\4\0\7\7\1\35\12\7\6\0\1\11"+ + "\24\0\1\7\4\0\16\7\1\12\3\7\2\0\1\7"+ + "\4\0\4\7\1\36\15\7\2\0\1\7\4\0\12\7"+ + "\1\37\7\7\2\0\1\7\4\0\10\7\1\40\11\7"+ + "\2\0\1\7\4\0\7\7\1\41\12\7\2\0\1\7"+ + "\4\0\1\7\1\42\20\7\2\0\1\7\4\0\2\7"+ + "\1\43\17\7\2\0\1\7\4\0\5\7\1\12\14\7"+ + "\2\0\1\7\4\0\13\7\1\44\6\7\2\0\1\7"+ + "\4\0\7\7\1\45\12\7\2\0\1\7\4\0\13\7"+ + "\1\36\6\7\2\0\1\7\4\0\21\7\1\46\2\0"+ + "\1\7\4\0\13\7\1\47\6\7\2\0\1\7\4\0"+ + "\5\7\1\45\14\7\2\0\1\7\4\0\11\7\1\12"+ + "\10\7\2\0\1\7\4\0\5\7\1\50\14\7\2\0"+ + "\1\7\4\0\2\7\1\51\17\7\2\0\1\7\4\0"+ + "\7\7\1\12\12\7\2\0\1\7\4\0\1\36\21\7"+ + "\2\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[900]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Sets whether markup close tags should be completed. The default value for BBCode is true. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public boolean getCompleteCloseTags() { - return completeCloseTags; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\2\1\1\11\2\1\2\11\13\1\2\11\23\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[41]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Returns null since BBCode has no comments. - * - * @return null always. - */ - public String[] getLineCommentStartAndEnd() { - return null; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to BBCodeTokenMaker; this signals that the user has + * ended a line with an unclosed tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -1; + + /** + * Whether closing markup tags are automatically completed for BBCode. + */ + private static boolean completeCloseTags = true; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public BBCodeTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Sets whether markup close tags should be completed. The default value + * for BBCode is true. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + /** + * Returns null since BBCode has no comments. + * + * @return null always. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case INTERNAL_INTAG: + state = INTAG; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public BBCodeTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public BBCodeTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 80) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Sets whether markup close tags should be completed. - * - * @param complete - * Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public BBCodeTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + throw new Error(message); + } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public BBCodeTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 80) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - addToken(Token.IDENTIFIER); - } - case 11: - break; - case 9: { - addToken(Token.MARKUP_TAG_DELIMITER); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 12: - break; - case 2: { - addToken(Token.WHITESPACE); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 13: - break; - case 10: { - addToken(Token.OPERATOR); - } - case 14: - break; - case 8: { - addToken(Token.MARKUP_TAG_NAME); - } - case 15: - break; - case 4: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(INTAG); - } - case 16: - break; - case 6: { - addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ - } - case 17: - break; - case 5: { - addToken(Token.MARKUP_TAG_ATTRIBUTE); - } - case 18: - break; - case 3: { - addNullToken(); - return firstToken; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 11: break; + case 9: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 12: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 13: break; + case 10: + { addToken(Token.OPERATOR); + } + case 14: break; + case 8: + { addToken(Token.MARKUP_TAG_NAME); + } + case 15: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 16: break; + case 6: + { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ + } + case 17: break; + case 5: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 18: break; + case 3: + { addNullToken(); return firstToken; + } + case 19: break; + case 7: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 20: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 19: - break; - case 7: { - yybegin(YYINITIAL); - addToken(Token.MARKUP_TAG_DELIMITER); + case 42: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 20: - break; + case 43: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case INTAG: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 42: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 43: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex old mode 100644 new mode 100755 index 31537124e..f36581744 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.flex @@ -3,23 +3,9 @@ * * CPlusPlusTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in C++. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -50,7 +36,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
            - *
          • The generated CPlusPlusTokenMaker.java file will contain two + *
          • The generated CPlusPlusTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -131,6 +117,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -138,13 +125,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -161,20 +145,25 @@ import org.fife.ui.rsyntaxtextarea.*; * @return The first Token in a linked list representing * the syntax highlighted text. */ + @Override public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. - int state = Token.NULL; + int state = YYINITIAL; switch (initialTokenType) { + case Token.COMMENT_EOL: + state = EOL_COMMENT; + start = text.offset; + break; case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; default: - state = Token.NULL; + state = YYINITIAL; } s = text; @@ -184,7 +173,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -195,9 +184,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -212,7 +200,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -252,7 +240,7 @@ OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) HexEscape = ([\\][xX]{HexDigit}{HexDigit}) AnyChrChr = ([^\'\n\\]) -Escape = ([\\]([abfnrtv\'\"\?\\0])) +Escape = ([\\]([abfnrtv\'\"\?\\0e])) UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) CharLiteral = ({UnclosedCharLiteral}[\']) ErrorUnclosedCharLiteral = ([\'][^\'\n]*) @@ -328,7 +316,6 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "public" | "register" | "reinterpret_cast" | - "return" | "sizeof" | "static" | "static_cast" | @@ -347,19 +334,23 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "volatile" | "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + /* Boolean literals. */ "true" | "false" | /* Data types. */ - "bool" | "char" | + "div_t" | "double" | "float" | "int" | + "ldiv_t" | "long" | "short" | "signed" | + "size_t" | "unsigned" | "void" | "wchar_t" { addToken(Token.DATA_TYPE); } @@ -622,6 +613,12 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "*=" | "/=" | "%=" | + "&=" | + "|=" | + "^=" | + ">=" | + "<=" | + "!=" | ">>=" | "<<=" | "^" | @@ -674,10 +671,15 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) } { - [^hwf\n]+ {} + [^hwf\\\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.COMMENT_EOL); + return firstToken; + } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java old mode 100644 new mode 100755 index 61ea63745..c84047760 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CPlusPlusTokenMaker.java @@ -1,2363 +1,2350 @@ -/* The following code was generated by JFlex 1.4.1 on 1/25/09 10:02 PM */ +/* The following code was generated by JFlex 1.4.1 on 1/24/17 10:44 PM */ /* * 11/19/2004 * * CPlusPlusTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in C++. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.io.Reader; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** * A parser for the C++ programming language. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

            - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

            - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

            + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

            + * * If you wish to regenerate this file yourself, keep in mind the following: *

              - *
            • The generated CPlusPlusTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
            • - *
            • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
            • - *
            • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
            • + *
            • The generated CPlusPlusTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
            • + *
            • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
            • + *
            • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
            • *
            - * + * * @author Robert Futrell * @version 0.6 - * + * */ public class CPlusPlusTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int EOL_COMMENT = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44" + - "\1\57\1\60\1\65\1\114\1\33\1\31\1\31\1\51\1\7\1\64" + - "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70" + - "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102" + - "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110" + - "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\113\1\2" + - "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13" + - "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16" + - "\1\67\1\22\1\45\1\71\1\74\1\73\1\75\1\112\1\115\1\112" + - "\1\64\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\2\2\1\3\1\4\17\2\2\4\1\5" + - "\1\4\1\6\4\4\1\2\1\7\1\10\2\2\1\3" + - "\1\11\1\4\2\1\4\2\2\4\2\12\1\13\5\12" + - "\1\14\2\12\1\2\2\15\2\3\1\16\2\2\1\17" + - "\22\2\1\17\56\2\1\0\1\20\1\21\2\22\1\23" + - "\1\6\2\10\1\24\11\2\1\15\6\1\1\0\14\2" + - "\2\0\1\25\6\0\5\2\1\3\1\0\1\3\1\15" + - "\1\16\3\2\1\26\6\2\1\26\23\2\1\27\16\2" + - "\1\26\1\2\1\26\55\2\1\6\1\30\1\6\3\22" + - "\1\6\2\10\1\31\10\2\1\32\4\1\1\33\4\1" + - "\6\0\14\2\10\0\5\2\1\16\1\0\37\2\1\27" + - "\44\2\1\26\2\2\1\26\7\2\1\6\1\10\7\2" + - "\2\32\7\1\4\0\1\33\4\0\11\2\2\0\1\34" + - "\2\0\1\35\43\2\1\17\13\2\1\32\1\33\3\1" + - "\7\0\10\2\4\0\22\2\2\1\1\33\3\0\12\2" + - "\2\0\1\33\4\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[578]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ + "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ + "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ + "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ + "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ + "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ + "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ + "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ + "\1\67\1\22\1\45\1\71\1\74\1\73\1\75\1\112\1\114\1\112"+ + "\1\64\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\2\2\1\3\1\4\17\2\2\4\1\5"+ + "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ + "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ + "\1\13\5\12\1\14\1\15\2\12\1\2\2\16\2\3"+ + "\1\17\2\2\1\20\22\2\1\20\56\2\1\0\1\21"+ + "\1\22\2\23\1\24\1\6\2\10\1\25\10\2\1\16"+ + "\6\1\1\0\14\2\2\0\1\26\4\0\1\27\2\0"+ + "\5\2\1\3\1\0\1\3\1\16\1\17\3\2\1\30"+ + "\6\2\1\30\23\2\1\31\16\2\1\30\1\2\1\30"+ + "\40\2\1\30\15\2\1\6\1\32\1\6\3\23\1\6"+ + "\2\10\1\33\7\2\1\34\4\1\1\35\4\1\6\0"+ + "\14\2\10\0\5\2\1\17\1\0\37\2\1\31\45\2"+ + "\1\30\2\2\1\30\7\2\1\6\1\10\7\2\2\34"+ + "\7\1\4\0\1\35\4\0\11\2\2\0\1\36\2\0"+ + "\1\37\44\2\1\20\14\2\1\34\1\35\3\1\7\0"+ + "\10\2\4\0\11\2\1\40\11\2\2\1\1\35\3\0"+ + "\12\2\2\0\1\35\4\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[583]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ + "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ + "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\u0924\0\352"+ + "\0\u079e\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0af8\0\u079e"+ + "\0\u0b46\0\u079e\0\u079e\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ + "\0\u0d1a\0\u0d68\0\u079e\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee"+ + "\0\u0f3c\0\u079e\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ + "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ + "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ + "\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4\0\u1812\0\u0138"+ + "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ + "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ + "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ + "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ + "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442"+ + "\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616\0\u2664\0\u079e"+ + "\0\u079e\0\u26b2\0\u2700\0\u079e\0\u274e\0\u279c\0\u27ea\0\u079e"+ + "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ + "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ + "\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a"+ + "\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u079e\0\u315c"+ + "\0\u31aa\0\u31f8\0\u3246\0\u079e\0\u3294\0\u32e2\0\u3330\0\u337e"+ + "\0\u33cc\0\u341a\0\u3468\0\u34b6\0\u3504\0\u1074\0\u3552\0\u1074"+ + "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2"+ + "\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ + "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ + "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u0138\0\u3ec4"+ + "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884"+ + "\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4"+ + "\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u4d64"+ + "\0\u0138\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38\0\u4f86"+ + "\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8\0\u079e"+ + "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u079e"+ + "\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a"+ + "\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa"+ + "\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a"+ + "\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a"+ + "\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa"+ + "\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a"+ + "\0\u62b8\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da"+ + "\0\u6528\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a"+ + "\0\u6798\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba"+ + "\0\u6a08\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a"+ + "\0\u6c78\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a"+ + "\0\u6ee8\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a"+ + "\0\u7158\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a"+ + "\0\u73c8\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea"+ + "\0\u7638\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a"+ + "\0\u78a8\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a"+ + "\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac\0\u86fa"+ + "\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a"+ + "\0\u89b8\0\u43a4\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c"+ + "\0\u8bda\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc"+ + "\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c"+ + "\0\u90ba\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc"+ + "\0\u932a\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c"+ + "\0\u959a\0\u95e8\0\u9636\0\u9684\0\u96d2\0\u1074\0\352\0\u9720"+ + "\0\u976e\0\u97bc\0\u980a\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990"+ + "\0\u99de\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u368a"+ + "\0\u9c00\0\u9c4e\0\u8748\0\u9c9c\0\u8832\0\u9cea\0\u9d38\0\u9d86"+ + "\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe\0\u9f0c\0\u9f5a\0\u0138\0\u9fa8"+ + "\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218"+ + "\0\ua266\0\ua2b4\0\u079e\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\ua43a"+ + "\0\ua488\0\u932a\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e\0\ua65c"+ + "\0\ua6aa\0\ua6f8\0\u0138\0\ua746\0\ua794\0\ua7e2\0\ua830"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[583]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222" + - "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492" + - "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702" + - "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\u079e\0\u0924" + - "\0\352\0\u079e\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0af8" + - "\0\u079e\0\u0b46\0\u079e\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc" + - "\0\u0d1a\0\u0d68\0\u079e\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee" + - "\0\u079e\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110" + - "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380" + - "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0" + - "\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4\0\u0138\0\u1812" + - "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82" + - "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2" + - "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62" + - "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2" + - "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u23f4\0\u2442" + - "\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616\0\u079e\0\u079e" + - "\0\u2664\0\u26b2\0\u079e\0\u2700\0\u274e\0\u279c\0\u079e\0\u27ea" + - "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a" + - "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca" + - "\0\u2d18\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a" + - "\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u079e\0\u315c" + - "\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330\0\u337e\0\u33cc" + - "\0\u341a\0\u3468\0\u34b6\0\u3504\0\u1026\0\u3552\0\u1026\0\u35a0" + - "\0\u35ee\0\u363c\0\u0138\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2" + - "\0\u3810\0\u385e\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32" + - "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2" + - "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u0138\0\u3e76\0\u3ec4" + - "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134" + - "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4" + - "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614" + - "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884" + - "\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6\0\u4af4" + - "\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8\0\u4d16\0\u4d64" + - "\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38\0\u4f86\0\u4fd4" + - "\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u079e\0\u51a8\0\u51f6" + - "\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u079e\0\u53ca\0\u5418" + - "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688" + - "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8" + - "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68" + - "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8" + - "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048" + - "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8" + - "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528" + - "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798" + - "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08" + - "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78" + - "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8" + - "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158" + - "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8" + - "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638" + - "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8" + - "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca\0\u7b18" + - "\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a\0\u7d88" + - "\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa\0\u7ff8" + - "\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a\0\u8268" + - "\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a\0\u84d8" + - "\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac\0\u86fa\0\u8748" + - "\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c\0\u896a\0\u4356" + - "\0\u89b8\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda" + - "\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a" + - "\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u90ba" + - "\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc\0\u932a" + - "\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c\0\u959a" + - "\0\u95e8\0\u1026\0\352\0\u9636\0\u9684\0\u96d2\0\u9720\0\u976e" + - "\0\u97bc\0\u980a\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990\0\u99de" + - "\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u86fa\0\u9c00" + - "\0\u87e4\0\u9c4e\0\u9c9c\0\u9cea\0\u9d38\0\u9d86\0\u9dd4\0\u9e22" + - "\0\u9e70\0\u9ebe\0\u9f0c\0\u9f5a\0\u9fa8\0\u9ff6\0\ua044\0\ua092" + - "\0\ua0e0\0\ua12e\0\ua17c\0\ua1ca\0\ua218\0\u079e\0\ua266\0\ua2b4" + - "\0\ua302\0\ua350\0\ua39e\0\ua3ec\0\u928e\0\ua43a\0\ua488\0\ua4d6" + - "\0\ua524\0\ua572\0\ua5c0\0\ua60e\0\ua65c\0\u0138\0\ua6aa\0\ua6f8" + - "\0\ua746\0\ua794"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[578]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10"+ + "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20"+ + "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\36\1\31\1\37"+ + "\1\40\1\7\1\5\1\41\1\42\1\43\1\44\1\45"+ + "\1\46\1\31\2\5\1\47\1\5\1\50\1\51\2\4"+ + "\1\32\1\52\1\53\1\31\1\5\1\54\1\53\1\55"+ + "\4\5\2\7\1\5\1\56\10\5\1\32\1\57\1\60"+ + "\1\31\12\61\1\62\30\61\1\63\5\61\1\64\14\61"+ + "\1\65\2\61\1\66\24\61\12\67\1\70\25\67\1\71"+ + "\2\67\1\72\22\67\1\73\2\67\1\74\24\67\7\4"+ + "\1\0\17\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\75\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\3\76"+ + "\1\7\1\76\1\7\1\77\1\0\1\76\1\77\3\76"+ + "\1\100\4\76\1\101\4\76\11\0\1\76\1\7\1\76"+ + "\2\0\2\76\1\7\2\0\1\101\1\100\1\102\1\76"+ + "\1\0\3\76\4\0\2\76\1\0\5\76\2\7\12\76"+ + "\13\0\1\53\20\0\1\53\65\0\1\4\6\5\1\0"+ + "\1\5\1\103\1\5\1\104\4\5\1\105\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\2\5"+ + "\1\106\16\5\4\0\1\4\6\5\1\0\4\5\1\107"+ + "\1\110\1\5\1\111\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\3\5\1\112\15\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\113\1\114\2\5\1\115"+ + "\1\116\1\117\1\120\1\121\1\5\1\122\1\123\1\124"+ + "\1\125\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\126\1\0\1\127\20\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\130\1\5\1\131\1\5\1\132\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\133\12\5\1\134"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\135\7\5"+ + "\1\136\3\5\1\137\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\140\1\5\1\141\2\5\1\142\1\143"+ + "\1\5\1\144\1\5\1\145\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\146\1\147\1\0\1\150\1\5"+ + "\1\151\5\5\1\152\10\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\153\12\5\1\154\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\2\5\1\155\10\5\1\156\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\157\3\5\1\160"+ + "\2\5\1\161\3\5\1\162\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\163\1\164\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\165\1\5\1\166\10\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\167\5\5"+ + "\1\170\1\171\1\5\1\172\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\173\2\5\1\174\1\175\4\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\176\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\177\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\200\6\5\1\175\5\5\1\201\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\202\6\5\1\203\1\5"+ + "\1\204\1\5\1\205\2\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\206\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\5\1\201"+ + "\17\5\33\0\1\207\116\0\1\53\233\0\1\53\1\0"+ + "\1\210\16\0\1\211\44\0\27\212\1\213\3\212\1\214"+ + "\4\212\1\215\2\212\1\0\52\212\30\0\1\53\3\0"+ + "\1\31\111\0\1\53\4\0\1\31\110\0\1\53\6\0"+ + "\1\53\56\0\40\42\1\216\2\42\1\217\1\220\51\42"+ + "\1\4\6\5\1\0\2\5\1\221\1\222\2\5\1\221"+ + "\1\5\1\223\2\5\1\145\1\224\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\225\20\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\226\1\227\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\230"+ + "\1\0\21\5\4\0\3\76\1\7\1\76\1\7\1\77"+ + "\1\0\1\76\1\77\3\76\1\100\4\76\1\101\4\76"+ + "\11\0\1\76\1\7\1\231\2\0\2\76\1\7\2\0"+ + "\1\101\1\100\1\102\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\3\76\1\231\1\76\2\7\12\76\54\0\1\46"+ + "\50\0\1\102\1\0\1\102\33\0\1\102\5\0\1\102"+ + "\26\0\2\102\16\0\7\4\1\0\1\232\1\233\1\4"+ + "\1\234\1\4\1\235\4\4\1\236\1\237\3\4\11\0"+ + "\3\4\2\0\3\4\1\240\1\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ + "\6\5\1\0\1\5\1\241\1\5\1\242\3\5\1\243"+ + "\1\244\3\5\1\245\1\5\1\246\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\247\1\5\1\0\2\5\1\250"+ + "\16\5\4\0\1\4\6\5\1\0\6\5\1\142\2\5"+ + "\1\251\1\5\1\145\2\5\1\252\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\253\1\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\254\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\34\0"+ + "\1\53\62\0\1\53\32\0\1\53\63\0\1\53\1\0"+ + "\12\61\1\0\30\61\1\0\5\61\1\0\14\61\1\0"+ + "\2\61\1\0\24\61\13\0\1\255\53\0\1\256\60\0"+ + "\1\257\152\0\1\260\117\0\1\261\24\0\12\67\1\0"+ + "\25\67\1\0\2\67\1\0\22\67\1\0\2\67\1\0"+ + "\24\67\13\0\1\262\53\0\1\263\26\0\43\264\1\0"+ + "\52\264\67\0\1\265\117\0\1\266\24\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\1\5\1\267\1\0\1\270\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\11\5\1\271\1\5\1\272\3\5"+ + "\1\273\1\5\4\0\7\76\1\0\17\76\11\0\3\76"+ + "\2\0\3\76\2\0\2\76\1\0\1\76\1\0\3\76"+ + "\4\0\2\76\1\0\21\76\4\0\3\76\1\274\1\76"+ + "\1\274\1\76\1\275\17\76\10\0\1\275\1\76\1\274"+ + "\1\76\2\0\2\76\1\274\2\0\2\76\1\0\1\76"+ + "\1\0\3\76\4\0\2\76\1\0\5\76\2\274\12\76"+ + "\4\0\7\76\1\0\12\76\1\276\4\76\11\0\3\76"+ + "\2\0\3\76\2\0\1\276\1\76\1\0\1\76\1\0"+ + "\3\76\4\0\2\76\1\0\21\76\4\0\7\76\1\0"+ + "\5\76\1\276\11\76\11\0\3\76\2\0\3\76\2\0"+ + "\1\76\1\276\1\0\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\21\76\4\0\3\76\1\102\1\76\1\102\1\277"+ + "\1\0\1\76\1\277\1\300\2\76\1\300\11\76\11\0"+ + "\1\76\1\102\1\76\2\0\2\76\1\102\2\0\1\76"+ + "\1\300\1\0\1\300\1\0\3\76\4\0\2\76\1\0"+ + "\5\76\2\102\12\76\4\0\1\4\6\5\1\0\2\5"+ + "\1\301\2\5\1\302\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\2\5\1\303\14\5\11\0\1\4\2\5\2\0"+ + "\1\304\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\305\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\306\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\307\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\310\10\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\311\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\312\7\5\1\313\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\314\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\315\1\316"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\317"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\320"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\321"+ + "\7\5\1\144\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\322\1\5\1\323\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\130\3\5\1\324\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\325\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\326\2\5\1\327"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\330"+ + "\11\5\11\0\1\4\2\5\2\0\1\5\1\331\1\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\332\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\333\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\334\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\142\1\335\3\5\1\145\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\336\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\337\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\340\4\5\1\341\1\342"+ + "\2\5\1\343\1\344\1\345\1\346\1\347\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\3\5"+ + "\1\350\15\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\130"+ + "\20\5\4\0\1\4\6\5\1\0\16\5\1\351\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\352\1\5\1\353"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\354"+ + "\4\5\1\355\3\5\1\356\1\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\331\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\357\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\360\10\5\1\361\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\4\5\1\362"+ + "\14\5\4\0\1\4\6\5\1\0\11\5\1\144\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\363\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\364\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\326\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\365\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\366\4\5"+ + "\1\367\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\370\2\5\1\142\4\5\1\145\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\371\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\312\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\372\1\373\7\5\1\205"+ + "\1\374\1\375\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\376\1\0\1\377\20\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u0100\1\333\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\2\5\1\u0101\14\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0102\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0103\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0104\6\5\1\u0105\3\5\1\u0106"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u0107"+ + "\1\5\1\360\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u0108\1\310\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u0109\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u010a\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\242\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u010b\2\5\1\u010c\6\5\1\u010d"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010e"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\315"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010f"+ + "\4\5\1\u0110\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u0111\20\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\u0112\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0113\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u0114\2\5\1\u0115\2\5\1\201\5\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\331\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0116\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0111\1\5\1\152\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0117\6\5"+ + "\1\u0118\3\5\1\u0119\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u011a\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\164\1\0\21\5\4\0\1\4\6\5\1\0\16\5"+ + "\1\u011b\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\316\16\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u011c\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u0108\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\324\1\u011d\1\u011e"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\230\1\0\21\5\34\0\10\53\56\0\33\u011f\1\u0120"+ + "\7\u011f\1\0\101\u011f\1\u0121\3\u011f\1\u0120\7\u011f\1\0"+ + "\57\u011f\1\u0122\3\u011f\2\212\1\u011f\1\212\2\u011f\1\212"+ + "\4\u011f\1\212\2\u011f\1\212\3\u011f\1\u0123\4\u011f\1\212"+ + "\1\u0124\1\u0125\1\0\3\212\1\u0124\17\u011f\1\212\4\u011f"+ + "\1\u0125\1\u011f\2\u0124\16\u011f\5\217\1\42\3\217\2\42"+ + "\1\217\1\42\2\217\1\42\4\217\1\42\2\217\1\42"+ + "\3\217\1\42\4\217\2\42\1\u0126\1\0\4\42\17\217"+ + "\1\42\4\217\1\u0126\1\217\2\42\56\217\1\u0127\3\217"+ + "\1\u0128\51\217\1\4\6\5\1\0\13\5\1\145\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\225\20\5\4\0\1\4\6\5\1\0\7\5\1\u0129"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u012a"+ + "\1\5\1\u012b\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\u012c"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\145\3\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012d\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012e\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u012f\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\3\76\4\u0130\1\0"+ + "\3\u0130\6\76\1\u0130\2\76\1\u0130\2\76\11\0\1\76"+ + "\1\u0130\1\76\2\0\1\76\2\u0130\2\0\2\76\1\0"+ + "\1\u0130\1\0\3\76\4\0\2\76\1\0\5\76\2\u0130"+ + "\2\76\2\u0130\5\76\1\u0130\4\0\7\4\1\0\1\4"+ + "\1\u0131\15\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\4\4\1\u0132\1\u0133\1\4\1\u0134"+ + "\7\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\2\4\1\u0135\1\4\1\u0136\12\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\3\4\1\u0137\13\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\4\4\1\u0138\12\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\7\4\1\u0139\7\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\14\0\1\u013a\1\u013b\1\0\1\u013c\1\0\1\u013d"+ + "\4\0\1\u013e\1\u013f\24\0\1\240\45\0\1\4\6\5"+ + "\1\0\16\5\1\u0140\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u0141\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ + "\1\u0142\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\2\5\1\130\16\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\341\4\5\1\344\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\360\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\13\5\1\u0143\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\u0144\3\5\1\u0145\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0146\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\6\5\1\u0147\1\u0148"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0149"+ + "\1\u014a\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\202\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u014b\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\152\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\21\0\1\u014c\123\0\1\u014d\161\0"+ + "\1\u014e\117\0\1\u014f\41\0\1\u0150\123\0\1\u0151\161\0"+ + "\1\u0152\117\0\1\u0153\24\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0154\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0155\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\12\5\1\u0156\6\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\14\5\1\u0157\4\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\13\5\1\u0158\5\5\4\0\3\76\1\274\1\76\1\274"+ + "\1\76\1\0\5\76\1\100\4\76\1\101\4\76\11\0"+ + "\1\76\1\274\1\76\2\0\2\76\1\274\2\0\1\101"+ + "\1\100\1\0\1\76\1\0\3\76\4\0\2\76\1\0"+ + "\5\76\2\274\12\76\7\0\1\274\1\0\1\274\33\0"+ + "\1\274\5\0\1\274\26\0\2\274\16\0\3\76\1\u0159"+ + "\1\76\1\u0159\1\76\1\u015a\17\76\10\0\1\u015a\1\76"+ + "\1\u0159\1\76\2\0\2\76\1\u0159\2\0\2\76\1\0"+ + "\1\76\1\0\3\76\4\0\2\76\1\0\5\76\2\u0159"+ + "\12\76\4\0\1\4\6\5\1\0\14\5\1\u015b\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u015c\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\2\5\1\201\14\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\1\5\1\u015d\4\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u015e\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u015f\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\16\5\1\130\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\130\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u0160\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0111\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u0161\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\u0162\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u0163\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\2\5\1\u0111\14\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\12\5\1\u0164\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u0165\3\5\1\u015d\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0166\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0167"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0111"+ + "\6\5\1\u0168\3\5\1\333\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\3\5\1\u0169\15\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u016a\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0114\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u0100\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u016b\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u016c\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0142\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\u0111\10\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u016d\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\u0111\16\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\u0103\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u016e\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u016f\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u0170\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u0171\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u0172\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0173\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u0174\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0175\2\5\1\u0176\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u0177\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u0178\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\340\16\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0179\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\3\5\1\u0169\15\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\304"+ + "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\15\5\1\u017a\1\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u017b\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\6\5\1\u017c\12\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\u017d\11\5\11\0\1\4\2\5\2\0"+ + "\1\u017e\1\u017f\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\7\5\1\u0180"+ + "\11\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\u0111\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u0181\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0182\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\333\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\316\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u015d\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\167\1\201\1\5"+ + "\1\u0183\1\324\1\u0184\1\u0185\1\5\1\u0186\1\u0187\1\u0188"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0189\1\0\3\5\1\u018a\15\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u018b\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0109\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u018c"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u018d"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\242"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u018e"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u018f"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u0190"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\363"+ + "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0141"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0191"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0192"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\u0111"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0193"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0166"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0144"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0194"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0195\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\u0196\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u0197\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\337\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0198\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u0199\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u019a\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019b\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019c\12\5\11\0\1\4\2\5\2\0\1\u019d\2\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u019e\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\u019f\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0111\2\5\1\u01a0\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01a1\20\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0111\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\152\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\130\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\3\5\1\u01a2\15\5\4\0\1\4"+ + "\6\5\1\0\2\5\2\u0111\1\5\1\u0111\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01a3\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u01a4\4\5\1\u0111"+ + "\2\5\1\u01a0\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\1\u01a1\20\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\u01a5\2\5\1\u01a6\4\5\1\375\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\u01a7\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u01a8\3\5\1\u01a9"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u01aa\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\324\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\230\1\0\21\5\4\0\33\u011f\1\214\7\u011f"+ + "\1\0\102\u011f\3\212\1\u0123\4\212\3\u011f\1\0\57\u011f"+ + "\1\212\25\u011f\1\u0120\5\u011f\1\212\1\u011f\1\0\3\u011f"+ + "\1\212\26\u011f\2\212\16\u011f\33\0\1\u0120\62\0\5\u011f"+ + "\1\u0122\25\u011f\1\u0120\5\u011f\1\u0122\1\u011f\1\0\3\u011f"+ + "\1\u0122\26\u011f\2\u0122\21\u011f\4\u01ab\1\u011f\3\u01ab\6\u011f"+ + "\1\u01ab\2\u011f\1\u01ab\6\u011f\1\214\5\u011f\1\u01ab\1\u011f"+ + "\1\0\2\u011f\2\u01ab\5\u011f\1\u01ab\20\u011f\2\u01ab\2\u011f"+ + "\2\u01ab\5\u011f\1\u01ab\4\u011f\3\217\4\u01ac\1\217\3\u01ac"+ + "\6\217\1\u01ac\2\217\1\u01ac\13\217\1\u0127\1\u01ac\2\217"+ + "\1\u0128\1\217\2\u01ac\5\217\1\u01ac\20\217\2\u01ac\2\217"+ + "\2\u01ac\5\217\1\u01ac\47\217\1\0\52\217\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01ad\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\337\16\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u01ae\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\363\4\5\1\u01af\5\5\1\u01b0\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01b1\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01b2\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01b3\20\5\4\0\3\76"+ + "\4\u0130\1\0\3\u0130\2\76\1\u01b4\3\76\1\u0130\1\u01b5"+ + "\1\76\1\u0130\2\76\11\0\1\76\1\u0130\1\76\2\0"+ + "\1\76\2\u0130\2\0\1\u01b5\1\u01b4\1\0\1\u0130\1\0"+ + "\3\76\4\0\2\76\1\0\5\76\2\u0130\2\76\2\u0130"+ + "\5\76\1\u0130\4\0\7\4\1\0\2\4\1\235\14\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\u01b6\16\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\3\4\1\u01b7\2\4\1\u01b8"+ + "\10\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\7\4\1\u01b9\7\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\1\u01ba\3\4"+ + "\1\u0138\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\11\4\1\u01bb\5\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ + "\1\u01b8\12\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\1\u01ba\16\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\14\4\1\u01bc"+ + "\2\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\15\0"+ + "\1\u01bd\120\0\1\u01be\1\u01bf\1\0\1\u01c0\110\0\1\u01c1"+ + "\1\0\1\u01c2\114\0\1\u01c3\116\0\1\u01c4\120\0\1\u01c5"+ + "\76\0\1\4\6\5\1\0\13\5\1\u01c6\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u0111\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\337\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\u01c7\1\5\1\u01c8"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\130"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\133"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01c9"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\201"+ + "\1\5\1\u0183\1\324\1\u0184\1\u01ca\1\5\1\u0186\1\5"+ + "\1\u0188\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01cb\1\0\3\5\1\u018a\15\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u01cc\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u01cd\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u01ce\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\310\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\15\0\1\u014d\174\0"+ + "\1\u01cf\50\0\1\u01d0\146\0\1\u01d1\52\0\1\u0151\174\0"+ + "\1\u01d2\50\0\1\u01d3\146\0\1\u01d4\41\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\16\5\1\u01d5\2\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\1\5\1\u01d5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\13\5\1\u01d5\5\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\15\5\1\u01d5\3\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\11\5\1\u01d6\7\5\4\0\3\76\1\u0159\1\76"+ + "\1\u0159\1\76\1\0\2\76\1\300\2\76\1\300\11\76"+ + "\11\0\1\76\1\u0159\1\76\2\0\2\76\1\u0159\2\0"+ + "\1\76\1\300\1\0\1\300\1\0\3\76\4\0\2\76"+ + "\1\0\5\76\2\u0159\12\76\7\0\1\u0159\1\0\1\u0159"+ + "\33\0\1\u0159\5\0\1\u0159\26\0\2\u0159\16\0\1\4"+ + "\6\5\1\0\12\5\1\u01d7\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\310\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\337\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u0142\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u01d8\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0111\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u01d9\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\u0198\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0165\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u01da\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\u0111\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\5\1\u0111\17\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\174\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\324\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\u0111\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u01db\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u019c\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0111\2\5\1\u0111\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01dc\20\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\u0111\2\5\1\u0111\1\5\1\174"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u01dc\20\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0141"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\310"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u01a2"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u01dd"+ + "\20\5\4\0\1\4\6\5\1\0\14\5\1\u01de\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u01df\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\u01dd\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\u01e0\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01e1\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\u01e2\6\5\1\u01e3"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01e4"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01e5"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ + "\1\u0180\11\5\4\0\1\4\6\5\1\0\5\5\1\u01e6"+ + "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\2\5\1\u0111\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01e7\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u017f\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\12\5\1\316\4\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\16\5\1\u0169\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u012a\12\5\1\u0103"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\1\5\1\u015d\4\5\1\0"+ + "\10\5\1\u01e8\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u01e9\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\u0114\3\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0165\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u01ea\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\u01eb\1\5\1\334\2\5\1\u01ec\1\312"+ + "\1\5\1\u0169\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u0165\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u01ed\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\1\5\1\u01ee\1\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u01ef\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\u01f0\14\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u01f1\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u01f2\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u01f3\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u01f4\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\1\u0141\2\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f5"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f6"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f7"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u01f8"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01f9\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01fa\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b3\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\130\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\130\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\15\5\1\u01fb\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u01fc\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\130\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\316\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u015c\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01fd\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u01fe\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\u01ff\1\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u01a0\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\312\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\5\5\1\u0111\13\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0200\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\312\15\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u01ec\2\5\1\u0169\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\u0165\1\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\u014b\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\u01a2\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u01aa\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0201\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\3\u011f"+ + "\4\212\1\u011f\3\212\6\u011f\1\212\2\u011f\1\212\6\u011f"+ + "\1\214\5\u011f\1\212\1\u011f\1\0\2\u011f\2\212\5\u011f"+ + "\1\212\20\u011f\2\212\2\u011f\2\212\5\u011f\1\212\4\u011f"+ + "\3\217\4\42\1\217\3\42\6\217\1\42\2\217\1\42"+ + "\13\217\1\u0127\1\42\2\217\1\u0128\1\217\2\42\5\217"+ + "\1\42\20\217\2\42\2\217\2\42\5\217\1\42\4\217"+ + "\1\4\6\5\1\0\12\5\1\u0202\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\253\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0203\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0204\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u0205\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\130\17\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\u0111\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\7\76\1\0"+ + "\12\76\1\u0206\4\76\11\0\3\76\2\0\3\76\2\0"+ + "\1\u0206\1\76\1\0\1\76\1\0\3\76\4\0\2\76"+ + "\1\0\21\76\4\0\7\76\1\0\5\76\1\u0206\11\76"+ + "\11\0\3\76\2\0\3\76\2\0\1\76\1\u0206\1\0"+ + "\1\76\1\0\3\76\4\0\2\76\1\0\21\76\4\0"+ + "\7\4\1\0\3\4\1\u01b7\13\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0207"+ + "\14\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\1\4\1\u0207\15\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\10\4\1\u0208"+ + "\6\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\1\4\1\u01b7\15\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\5\4\1\u0209"+ + "\11\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0"+ + "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0"+ + "\7\4\1\0\15\4\1\u020a\1\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\16\0\1\u013d\113\0\1\u020b\120\0"+ + "\1\u020c\2\0\1\u020d\116\0\1\u020e\106\0\1\u020f\3\0"+ + "\1\u01c4\122\0\1\u0210\110\0\1\u020d\111\0\1\u020f\131\0"+ + "\1\u0211\71\0\1\4\6\5\1\0\5\5\1\u019d\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0212\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u01f2\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\u0213\2\5\1\u01db"+ + "\1\u0214\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u01ea\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0215\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u0216\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u0217\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u0218\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\u0219\11\0\1\4\2\5\2\0\1\5\1\u0111"+ + "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\36\0\1\u021a\101\0"+ + "\1\u014d\51\0\1\u01cf\26\0\1\u01d1\1\u021b\4\u01d1\1\u021b"+ + "\17\u01d1\3\u021b\1\u01d1\1\u021b\2\0\2\u021b\1\0\2\u01d1"+ + "\2\0\3\u01d1\1\0\1\u021b\2\u01d1\1\u021b\1\u01d1\1\0"+ + "\1\u021b\1\u01d1\5\u021b\2\u01d1\1\u021b\21\u01d1\1\0\1\u021b"+ + "\34\0\1\u021c\101\0\1\u0151\51\0\1\u01d2\26\0\1\u01d4"+ + "\1\u021d\4\u01d4\1\u021d\17\u01d4\3\u021d\1\u01d4\1\u021d\2\0"+ + "\2\u021d\1\0\2\u01d4\2\0\3\u01d4\1\0\1\u021d\2\u01d4"+ + "\1\u021d\1\u01d4\1\0\1\u021d\1\u01d4\5\u021d\2\u01d4\1\u021d"+ + "\21\u01d4\1\0\1\u021d\2\0\1\4\5\5\1\u021e\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\20\5"+ + "\1\u021e\4\0\1\4\6\5\1\0\5\5\1\u01ed\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u021f\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u0220\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\130\16\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\u0111\2\5\1\u0111"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0165"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0141"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0103"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\312"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\312"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u01f2"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\u0221\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u01da\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0222\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0223\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\164"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0224"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\130"+ + "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u01ec"+ + "\1\312\1\5\1\u0169\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0165"+ + "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5"+ + "\1\u0114\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\u0111\16\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\130"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0166"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\u0111\4\5"+ + "\1\u0111\4\5\1\u0103\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\5\1\u0111\17\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\u01f2\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01f9\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\u0111\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u0225\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0226\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u0227\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0228\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0229\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u022a\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\1\5\1\u022b\4\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u022c\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5"+ + "\1\u022d\12\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u0111\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\u01b3\20\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u022e\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\130\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0165\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\1\u0111\2\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\u022f\20\5\4\0\1\4\6\5\1\0\14\5\1\u0230"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\152"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u0111"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01da"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\7\4\1\0\7\4\1\u0207\7\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\12\4\1\u0231\4\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\16\4\1\u0232\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\17\0\1\u020c\114\0"+ + "\1\u0233\114\0\1\u0233\124\0\1\u0234\106\0\1\u020c\121\0"+ + "\1\u0235\125\0\1\u0236\70\0\1\4\6\5\1\0\5\5"+ + "\1\u0141\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\u01e8\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u0237\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0238\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\u0111"+ + "\4\5\1\u0111\4\5\1\u0103\3\5\1\137\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\5\1\u0111"+ + "\17\5\4\0\1\4\6\5\1\0\16\5\1\u0219\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\1\5\1\u0111\1\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\36\0\1\u01d1\115\0\1\u01d4\63\0\1\4\1\5\1\u0239"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023a\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u01ed\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0111\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u023b\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023c\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\u0212\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u023d\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u023e\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\316\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u023e\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u0165\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u023f\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\12\5\1\310\4\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u012a\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0240\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\331\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\130\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\7\4\1\0\1\u01b8\16\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\14\4\1\u0207\2\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\23\0\1\u0233\120\0\1\u0241\121\0\1\u0242"+ + "\67\0\1\4\6\5\1\0\16\5\1\310\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\137\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\u0243\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\11\5\1\310\5\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u01a4\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u0244\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\130\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u0245\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01db\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u020d"+ + "\131\0\1\u0233\71\0\1\4\6\5\1\0\7\5\1\u0246"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01ed"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u0247"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u023a\1\0"+ + "\21\5\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[43134]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10" + - "\1\11\1\12\1\13\1\14\1\15\1\16\1\17\1\20" + - "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30" + - "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40" + - "\1\41\1\7\1\5\1\42\1\43\1\44\1\45\1\46" + - "\1\47\1\31\2\5\1\50\1\5\1\51\1\52\2\4" + - "\1\32\1\53\1\37\1\31\1\5\1\54\1\37\1\55" + - "\4\5\2\7\1\5\1\56\10\5\1\32\1\37\1\57" + - "\1\60\12\61\1\62\30\61\1\63\5\61\1\64\14\61" + - "\1\65\2\61\1\66\24\61\12\67\1\70\30\67\1\71" + - "\22\67\1\72\2\67\1\73\24\67\7\4\1\0\17\4" + - "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4" + - "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\74" + - "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\3\75\1\7\1\75" + - "\1\7\1\76\1\0\1\75\1\76\3\75\1\77\4\75" + - "\1\100\4\75\11\0\1\75\1\7\1\75\2\0\2\75" + - "\1\7\2\0\1\100\1\77\1\101\1\75\1\0\3\75" + - "\4\0\2\75\1\0\5\75\2\7\12\75\13\0\1\37" + - "\20\0\1\37\65\0\1\4\6\5\1\0\1\5\1\102" + - "\1\5\1\103\4\5\1\104\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\2\5\1\105\16\5" + - "\4\0\1\4\6\5\1\0\4\5\1\106\1\107\1\5" + - "\1\110\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\3\5\1\111\15\5\4\0\1\4\6\5" + - "\1\0\1\5\1\112\1\113\2\5\1\114\1\115\1\116" + - "\1\117\1\120\1\5\1\121\1\122\1\123\1\124\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\125\1\0" + - "\1\126\20\5\4\0\1\4\6\5\1\0\2\5\1\127" + - "\1\5\1\130\1\5\1\131\10\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\132\12\5\1\133\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\134\7\5\1\135\3\5" + - "\1\136\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\137\1\5\1\140\2\5\1\141\1\142\1\5\1\143" + - "\1\5\1\144\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\145\1\146\1\0\1\147\1\5\1\150\5\5" + - "\1\151\10\5\4\0\1\4\6\5\1\0\1\5\1\152" + - "\12\5\1\153\2\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\2\5\1\154\10\5\1\155\3\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\156\3\5\1\157\2\5\1\160" + - "\3\5\1\161\2\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\162\1\163\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\164\1\5\1\165\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\166\5\5\1\167\1\170" + - "\1\5\1\171\4\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\172\2\5\1\173\1\174\4\5\11\0\1\4" + - "\2\5\2\0\1\5\1\175\1\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\176" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\177" + - "\6\5\1\174\5\5\1\200\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\1\5\1\201\6\5\1\202\1\5\1\203\1\5" + - "\1\204\2\5\11\0\1\4\2\5\2\0\1\5\1\205" + - "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\5\1\200\17\5\33\0" + - "\1\206\116\0\1\37\233\0\1\37\1\0\1\207\16\0" + - "\1\210\44\0\27\211\1\212\3\211\1\213\4\211\1\214" + - "\2\211\1\0\52\211\34\0\1\31\116\0\1\31\110\0" + - "\1\37\6\0\1\37\56\0\40\43\1\215\2\43\1\216" + - "\1\217\51\43\1\4\6\5\1\0\2\5\1\220\1\221" + - "\2\5\1\220\1\5\1\222\2\5\1\144\1\223\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\224\20\5\4\0\1\4\6\5\1\0\6\5\1\225" + - "\1\226\1\227\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\230\1\0\21\5\4\0\3\75\1\7" + - "\1\75\1\7\1\76\1\0\1\75\1\76\3\75\1\77" + - "\4\75\1\100\4\75\11\0\1\75\1\7\1\231\2\0" + - "\2\75\1\7\2\0\1\100\1\77\1\101\1\75\1\0" + - "\3\75\4\0\2\75\1\0\3\75\1\231\1\75\2\7" + - "\12\75\54\0\1\47\50\0\1\101\1\0\1\101\33\0" + - "\1\101\5\0\1\101\26\0\2\101\16\0\7\4\1\0" + - "\1\232\1\233\1\4\1\234\1\4\1\235\4\4\1\236" + - "\1\237\3\4\11\0\3\4\2\0\3\4\1\240\1\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\1\4\6\5\1\0\1\5\1\241\1\5" + - "\1\242\3\5\1\243\1\244\3\5\1\245\1\5\1\246" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\247\1\5" + - "\1\0\2\5\1\250\16\5\4\0\1\4\6\5\1\0" + - "\6\5\1\141\2\5\1\251\1\5\1\144\2\5\1\252" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\253\1\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\254" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\120\0\1\37\116\0\1\37\12\61\1\0" + - "\30\61\1\0\5\61\1\0\14\61\1\0\2\61\1\0" + - "\24\61\13\0\1\255\53\0\1\256\60\0\1\257\152\0" + - "\1\260\117\0\1\261\24\0\12\67\1\0\30\67\1\0" + - "\22\67\1\0\2\67\1\0\24\67\13\0\1\262\53\0" + - "\1\263\115\0\1\264\117\0\1\265\24\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\1\5\1\266\1\0\1\267\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\11\5\1\270\1\5\1\271\3\5" + - "\1\272\1\5\4\0\7\75\1\0\17\75\11\0\3\75" + - "\2\0\3\75\2\0\2\75\1\0\1\75\1\0\3\75" + - "\4\0\2\75\1\0\21\75\4\0\3\75\1\273\1\75" + - "\1\273\1\75\1\274\17\75\10\0\1\274\1\75\1\273" + - "\1\75\2\0\2\75\1\273\2\0\2\75\1\0\1\75" + - "\1\0\3\75\4\0\2\75\1\0\5\75\2\273\12\75" + - "\4\0\7\75\1\0\12\75\1\275\4\75\11\0\3\75" + - "\2\0\3\75\2\0\1\275\1\75\1\0\1\75\1\0" + - "\3\75\4\0\2\75\1\0\21\75\4\0\7\75\1\0" + - "\5\75\1\275\11\75\11\0\3\75\2\0\3\75\2\0" + - "\1\75\1\275\1\0\1\75\1\0\3\75\4\0\2\75" + - "\1\0\21\75\4\0\3\75\1\101\1\75\1\101\1\276" + - "\1\0\1\75\1\276\1\277\2\75\1\277\11\75\11\0" + - "\1\75\1\101\1\75\2\0\2\75\1\101\2\0\1\75" + - "\1\277\1\0\1\277\1\0\3\75\4\0\2\75\1\0" + - "\5\75\2\101\12\75\4\0\1\4\6\5\1\0\2\5" + - "\1\300\2\5\1\301\11\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\2\5\1\302\14\5\11\0\1\4\2\5\2\0" + - "\1\303\2\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\12\5\1\304\4\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\4\5\1\305\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\12\5\1\306\4\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\6\5\1\307\10\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\7\5\1\310\7\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\311\7\5\1\312\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\313\1\0" + - "\21\5\4\0\1\4\6\5\1\0\7\5\1\314\1\315" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\316" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\317" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\320" + - "\7\5\1\143\5\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\321\1\5\1\322\13\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\7\5\1\127\3\5\1\323\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\5\5\1\324\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\325\2\5\1\326" + - "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\327" + - "\11\5\11\0\1\4\2\5\2\0\1\5\1\330\1\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\331\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\332\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\333\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\141\1\334\3\5\1\144\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\335\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\336\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\337\4\5\1\340\1\341" + - "\2\5\1\342\1\343\1\344\1\345\1\346\1\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\3\5" + - "\1\347\15\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\127" + - "\20\5\4\0\1\4\6\5\1\0\16\5\1\350\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\351\1\5\1\352" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\353" + - "\4\5\1\354\3\5\1\355\1\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5" + - "\1\330\1\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\356\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\357\10\5\1\360\1\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\4\5\1\361" + - "\14\5\4\0\1\4\6\5\1\0\11\5\1\143\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\362\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\363\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\7\5\1\325\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\10\5\1\364\6\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\7\5\1\365\4\5" + - "\1\366\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\367\2\5\1\141\4\5\1\144\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\370\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\311\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\371\1\372\7\5\1\204" + - "\1\373\1\374\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\375\1\0\1\376\20\5\4\0\1\4\6\5" + - "\1\0\3\5\1\377\1\332\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\2\5\1\u0100\14\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\u0101\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\u0102\13\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\u0103\6\5\1\u0104\3\5\1\u0105" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u0106" + - "\1\5\1\357\10\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\5\5\1\u0107\1\307\10\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\u0108\1\0\21\5\4\0\1\4" + - "\6\5\1\0\14\5\1\u0109\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\242\13\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\u010a\2\5\1\u010b\6\5\1\u010c" + - "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010d" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\314" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u010e" + - "\4\5\1\u010f\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\1\303\20\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\1\5\1\u0110\1\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u0111\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\u0112\2\5\1\u0113\2\5\1\200\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\330\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\u0114\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\303\1\5\1\151\6\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0115\6\5" + - "\1\u0116\3\5\1\u0117\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u0118\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\163\1\0\21\5\4\0\1\4\6\5\1\0\16\5" + - "\1\u0119\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\315\16\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\u011a\1\0\21\5" + - "\4\0\1\4\6\5\1\0\5\5\1\u0107\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\5\5\1\323\1\u011b\1\u011c" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\230\1\0\21\5\34\0\10\37\56\0\33\u011d\1\u011e" + - "\7\u011d\1\0\101\u011d\1\u011f\3\u011d\1\u011e\7\u011d\1\0" + - "\57\u011d\1\u0120\4\u011d\1\211\1\u011d\1\211\2\u011d\1\211" + - "\4\u011d\1\211\2\u011d\1\211\3\u011d\1\u0121\4\u011d\1\211" + - "\1\u0122\1\u0123\1\0\3\211\1\u0122\17\u011d\1\211\4\u011d" + - "\1\u0123\1\u011d\2\u0122\16\u011d\5\216\1\43\4\216\1\43" + - "\1\216\1\43\2\216\1\43\4\216\1\43\2\216\1\43" + - "\3\216\1\43\4\216\2\43\1\u0124\1\0\4\43\17\216" + - "\1\43\4\216\1\u0124\1\216\2\43\56\216\1\u0125\3\216" + - "\1\u0126\51\216\1\4\6\5\1\0\13\5\1\144\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\224\20\5\4\0\1\4\6\5\1\0\7\5\1\u0127" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u0128" + - "\1\5\1\u0129\11\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\u012a" + - "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\13\5\1\144\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\u012b\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\u012c\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\u012d\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\u012e\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\3\75\4\u012f\1\0" + - "\3\u012f\6\75\1\u012f\2\75\1\u012f\2\75\11\0\1\75" + - "\1\u012f\1\75\2\0\1\75\2\u012f\2\0\2\75\1\0" + - "\1\u012f\1\0\3\75\4\0\2\75\1\0\5\75\2\u012f" + - "\2\75\2\u012f\5\75\1\u012f\4\0\7\4\1\0\1\4" + - "\1\u0130\15\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\4\4\1\u0131\1\u0132\1\4\1\u0133" + - "\7\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0" + - "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0" + - "\7\4\1\0\2\4\1\u0134\1\4\1\u0135\12\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\3\4\1\u0136\13\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\4\4\1\u0137\12\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\7\4\1\u0138\7\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\14\0\1\u0139\1\u013a\1\0\1\u013b\1\0\1\u013c" + - "\4\0\1\u013d\1\u013e\24\0\1\240\45\0\1\4\6\5" + - "\1\0\16\5\1\u013f\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\16\5\1\u0140\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5" + - "\1\u0141\4\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\2\5\1\127\16\5\4\0\1\4\6\5" + - "\1\0\5\5\1\340\4\5\1\343\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\4\5\1\357\12\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\u0142\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\u0143\3\5\1\u0144\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0145\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\u0146\1\u0147" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0148" + - "\1\u0149\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\201\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\u014a\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\151\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\21\0\1\u014b\123\0\1\u014c\161\0" + - "\1\u014d\117\0\1\u014e\41\0\1\u014f\123\0\1\u0150\161\0" + - "\1\u0151\117\0\1\u0152\24\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0153\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0154\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\12\5\1\u0155\6\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0156\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\13\5\1\u0157\5\5\4\0\3\75\1\273\1\75\1\273" + - "\1\75\1\0\5\75\1\77\4\75\1\100\4\75\11\0" + - "\1\75\1\273\1\75\2\0\2\75\1\273\2\0\1\100" + - "\1\77\1\0\1\75\1\0\3\75\4\0\2\75\1\0" + - "\5\75\2\273\12\75\7\0\1\273\1\0\1\273\33\0" + - "\1\273\5\0\1\273\26\0\2\273\16\0\3\75\1\u0158" + - "\1\75\1\u0158\1\75\1\u0159\17\75\10\0\1\u0159\1\75" + - "\1\u0158\1\75\2\0\2\75\1\u0158\2\0\2\75\1\0" + - "\1\75\1\0\3\75\4\0\2\75\1\0\5\75\2\u0158" + - "\12\75\4\0\1\4\6\5\1\0\14\5\1\u015a\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u015b\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\2\5\1\200\14\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\1\5\1\u015c\1\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\u015d\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\16\5\1\127\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\127\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u015e\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\303\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\u015f\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u0160\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u0161\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\2\5\1\303\14\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\12\5\1\u0162\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u0163\3\5\1\u0164\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0165\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0166" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\303" + - "\6\5\1\u0167\3\5\1\332\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\3\5\1\u0168\15\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0169\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0112\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\377\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\u016a\13\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\u016b\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\u0141\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\303\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\u016c\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\303\16\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\5\5\1\u0102\11\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u016d\13\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u016e\13\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u016f\13\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u0170\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u0171\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\u0172\12\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u0173\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\7\5\1\u0174\2\5\1\u0175\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\u0176\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u0177\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\337\16\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\u0178\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\3\5\1\u0168\15\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\303" + - "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\15\5\1\u0179\1\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\14\5\1\u017a\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\6\5\1\u017b\12\5\4\0\1\4\6\5" + - "\1\0\5\5\1\u017c\11\5\11\0\1\4\2\5\2\0" + - "\1\u017d\1\u017e\1\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\7\5\1\u017f" + - "\11\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\303\1\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u0180\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0181\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\332\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\315\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\u0164\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\166\1\200\1\5" + - "\1\u0182\1\323\1\u0183\1\u0184\1\5\1\u0185\1\u0186\1\u0187" + - "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0188\1\0\3\5\1\u0189\15\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u018a\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0108\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u018b" + - "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u018c" + - "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\242" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u018d" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u018e" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u0160" + - "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\362" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0140" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u018f" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0190" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\303" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0191" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u0165" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0143" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0192" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0193\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\u0194\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u0195\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\336\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\u0196\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\u0197\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\u0198\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u0199\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u019a\12\5\11\0\1\4\2\5\2\0\1\u019b\2\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u019c\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\u019d\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5" + - "\1\303\2\5\1\u019e\5\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\u019f\20\5\4\0\1\4" + - "\6\5\1\0\4\5\1\303\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\151\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\10\5\1\127\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\3\5\1\u01a0\15\5\4\0\1\4" + - "\6\5\1\0\2\5\2\303\1\5\1\303\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u01a1\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u01a2\4\5\1\303" + - "\2\5\1\u019e\5\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\1\u019f\20\5\4\0\1\4\6\5" + - "\1\0\6\5\1\u01a3\2\5\1\u01a4\4\5\1\374\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\14\5\1\u01a5\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\u01a6\3\5\1\u01a7" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u01a8\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\323\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\230\1\0\21\5\4\0\33\u011d\1\213\7\u011d" + - "\1\0\102\u011d\3\211\1\u0121\4\211\3\u011d\1\0\57\u011d" + - "\1\211\25\u011d\1\u011e\5\u011d\1\211\1\u011d\1\0\3\u011d" + - "\1\211\26\u011d\2\211\16\u011d\33\0\1\u011e\62\0\5\u011d" + - "\1\u0120\25\u011d\1\u011e\5\u011d\1\u0120\1\u011d\1\0\3\u011d" + - "\1\u0120\26\u011d\2\u0120\21\u011d\4\u01a9\1\u011d\3\u01a9\6\u011d" + - "\1\u01a9\2\u011d\1\u01a9\6\u011d\1\213\5\u011d\1\u01a9\1\u011d" + - "\1\0\2\u011d\2\u01a9\5\u011d\1\u01a9\20\u011d\2\u01a9\2\u011d" + - "\2\u01a9\5\u011d\1\u01a9\4\u011d\3\216\4\u01aa\1\216\3\u01aa" + - "\6\216\1\u01aa\2\216\1\u01aa\13\216\1\u0125\1\u01aa\2\216" + - "\1\u0126\1\216\2\u01aa\5\216\1\u01aa\20\216\2\u01aa\2\216" + - "\2\u01aa\5\216\1\u01aa\47\216\1\0\52\216\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u01ab\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\336\16\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\u01ac\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\362\4\5\1\u01ad\5\5\1\u01ae\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\14\5\1\u01af\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\14\5\1\u01b0\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\336\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\u01b1\20\5\4\0\3\75" + - "\4\u012f\1\0\3\u012f\2\75\1\u01b2\3\75\1\u012f\1\u01b3" + - "\1\75\1\u012f\2\75\11\0\1\75\1\u012f\1\75\2\0" + - "\1\75\2\u012f\2\0\1\u01b3\1\u01b2\1\0\1\u012f\1\0" + - "\3\75\4\0\2\75\1\0\5\75\2\u012f\2\75\2\u012f" + - "\5\75\1\u012f\4\0\7\4\1\0\2\4\1\235\14\4" + - "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4" + - "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4" + - "\1\0\1\u01b4\16\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\3\4\1\u01b5\2\4\1\u01b6" + - "\10\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0" + - "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0" + - "\7\4\1\0\7\4\1\u01b7\7\4\11\0\3\4\2\0" + - "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0" + - "\2\4\1\0\21\4\4\0\7\4\1\0\1\u01b8\3\4" + - "\1\u0137\12\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\11\4\1\u01b9\5\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4" + - "\1\u01b6\12\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\1\u01b8\16\4\11\0\3\4\2\0" + - "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0" + - "\2\4\1\0\21\4\4\0\7\4\1\0\14\4\1\u01ba" + - "\2\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0" + - "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\15\0" + - "\1\u01bb\120\0\1\u01bc\1\u01bd\1\0\1\u01be\110\0\1\u01bf" + - "\1\0\1\u01c0\114\0\1\u01c1\116\0\1\u01c2\120\0\1\u01c3" + - "\76\0\1\4\6\5\1\0\13\5\1\u01c4\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\303\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\336\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\2\5\1\u01c5\1\5\1\u01c6" + - "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\127" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\132" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01c7" + - "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\200" + - "\1\5\1\u0182\1\323\1\u0183\1\u01c8\1\5\1\u0185\1\5" + - "\1\u0187\3\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u01c9\1\0\3\5\1\u0189\15\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\u01ca\1\0\21\5\4\0\1\4\6\5" + - "\1\0\14\5\1\u01cb\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u01cc\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\5\5\1\307\11\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\15\0\1\u014c\174\0" + - "\1\u01cd\50\0\1\u01ce\146\0\1\u01cf\52\0\1\u0150\174\0" + - "\1\u01d0\50\0\1\u01d1\146\0\1\u01d2\41\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\16\5\1\u01d3\2\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\1\5\1\u01d3\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\13\5\1\u01d3\5\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\15\5\1\u01d3\3\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\11\5\1\u01d4\7\5\4\0\3\75\1\u0158\1\75" + - "\1\u0158\1\75\1\0\2\75\1\277\2\75\1\277\11\75" + - "\11\0\1\75\1\u0158\1\75\2\0\2\75\1\u0158\2\0" + - "\1\75\1\277\1\0\1\277\1\0\3\75\4\0\2\75" + - "\1\0\5\75\2\u0158\12\75\7\0\1\u0158\1\0\1\u0158" + - "\33\0\1\u0158\5\0\1\u0158\26\0\2\u0158\16\0\1\4" + - "\6\5\1\0\12\5\1\u01d5\4\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\307\1\0\21\5\4\0\1\4\6\5" + - "\1\0\5\5\1\u0141\11\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\16\5\1\u01d6\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\303\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\u01d7\13\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\7\5\1\u0196\7\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\u0163\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\u01d8\10\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\7\5\1\303\7\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\336\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\5\1\303\17\5\4\0\1\4\6\5\1\0\13\5" + - "\1\173\3\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5" + - "\1\323\3\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5" + - "\1\303\3\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u01d9\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u019a\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5" + - "\1\303\2\5\1\303\5\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\u01da\20\5\4\0\1\4" + - "\6\5\1\0\6\5\1\303\2\5\1\303\1\5\1\173" + - "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\1\u01da\20\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0140" + - "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\307" + - "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\15\5\1\u01a0" + - "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u01db" + - "\20\5\4\0\1\4\6\5\1\0\14\5\1\u01dc\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\u01dd\1\0\21\5" + - "\4\0\1\4\6\5\1\0\13\5\1\u01db\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\u01de\13\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u01df\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u01e0\6\5\1\u01e1" + - "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01e2" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01e3" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5" + - "\1\u017f\11\5\4\0\1\4\6\5\1\0\5\5\1\u01e4" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\2\5\1\303\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01e5\6\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\1\5\1\u017e\1\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\12\5\1\315\4\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\16\5\1\u0168\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0128\12\5\1\u0102" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u01e6" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01e7" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0112" + - "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0163\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u01e8\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5" + - "\1\u01e9\1\5\1\333\2\5\1\u01ea\1\311\1\5\1\u0168" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\u0163\1\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01eb" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\1\5\1\u01ec\1\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u01ed" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\u01ee" + - "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u01ef" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f0" + - "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01f1\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01f2\10\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\1\u0140\2\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u01f3\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\14\5\1\u01f4\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\u01f5\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\u01f6\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\u01f7\13\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u01b1\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\127\1\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\4\5\1\127\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\15\5\1\u01f8\1\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\u01f9\1\0\21\5\4\0\1\4\6\5" + - "\1\0\15\5\1\127\1\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\315\1\0\21\5\4\0\1\4\6\5\1\0" + - "\14\5\1\u015b\2\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\u01fa\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\u01fb\13\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u01fc" + - "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u019e\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\311\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\5\5\1\303\13\5\4\0\1\4\6\5\1\0\4\5" + - "\1\352\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\311\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5" + - "\1\u01ea\2\5\1\u0168\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\u0163\1\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\1\5\1\u014a" + - "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\u01a0\12\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u01a8\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\u01fd\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\3\u011d\4\211\1\u011d" + - "\3\211\6\u011d\1\211\2\u011d\1\211\6\u011d\1\213\5\u011d" + - "\1\211\1\u011d\1\0\2\u011d\2\211\5\u011d\1\211\20\u011d" + - "\2\211\2\u011d\2\211\5\u011d\1\211\4\u011d\3\216\4\43" + - "\1\216\3\43\6\216\1\43\2\216\1\43\13\216\1\u0125" + - "\1\43\2\216\1\u0126\1\216\2\43\5\216\1\43\20\216" + - "\2\43\2\216\2\43\5\216\1\43\4\216\1\4\6\5" + - "\1\0\12\5\1\u01fe\4\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\253\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u01ff\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u0200\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u0201\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\5\1\127\17\5\4\0\1\4\6\5\1\0\11\5" + - "\1\303\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\7\75\1\0\12\75\1\u0202" + - "\4\75\11\0\3\75\2\0\3\75\2\0\1\u0202\1\75" + - "\1\0\1\75\1\0\3\75\4\0\2\75\1\0\21\75" + - "\4\0\7\75\1\0\5\75\1\u0202\11\75\11\0\3\75" + - "\2\0\3\75\2\0\1\75\1\u0202\1\0\1\75\1\0" + - "\3\75\4\0\2\75\1\0\21\75\4\0\7\4\1\0" + - "\3\4\1\u01b5\13\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\2\4\1\u0203\14\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\1\4\1\u0203\15\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\10\4\1\u0204\6\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\1\4\1\u01b5\15\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\5\4\1\u0205\11\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\15\4\1\u0206\1\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\16\0\1\u013c\113\0\1\u0207\120\0\1\u0208\2\0" + - "\1\u0209\116\0\1\u020a\106\0\1\u020b\3\0\1\u01c2\122\0" + - "\1\u020c\110\0\1\u0209\111\0\1\u020b\131\0\1\u020d\71\0" + - "\1\4\6\5\1\0\5\5\1\u019b\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\u020e\13\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\14\5\1\u01f0\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\u020f\2\5\1\u01d9\1\u0210\12\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01e8\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0211" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u0212" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u0213" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u0214" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\16\5\1\u0215" + - "\11\0\1\4\2\5\2\0\1\5\1\303\1\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\36\0\1\u0216\101\0\1\u014c\51\0" + - "\1\u01cd\26\0\1\u01cf\1\u0217\4\u01cf\1\u0217\17\u01cf\3\u0217" + - "\1\u01cf\1\u0217\2\0\2\u0217\1\0\2\u01cf\2\0\3\u01cf" + - "\1\0\1\u0217\2\u01cf\1\u0217\1\u01cf\1\0\1\u0217\1\u01cf" + - "\5\u0217\2\u01cf\1\u0217\21\u01cf\2\0\1\u0217\33\0\1\u0218" + - "\101\0\1\u0150\51\0\1\u01d0\26\0\1\u01d2\1\u0219\4\u01d2" + - "\1\u0219\17\u01d2\3\u0219\1\u01d2\1\u0219\2\0\2\u0219\1\0" + - "\2\u01d2\2\0\3\u01d2\1\0\1\u0219\2\u01d2\1\u0219\1\u01d2" + - "\1\0\1\u0219\1\u01d2\5\u0219\2\u01d2\1\u0219\21\u01d2\2\0" + - "\1\u0219\1\0\1\4\5\5\1\u021a\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\20\5\1\u021a\4\0" + - "\1\4\6\5\1\0\5\5\1\u01eb\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\u021b\13\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\11\5\1\u021c\5\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\127\16\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\6\5\1\303\2\5\1\303\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0163\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\u0140\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\u0102\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\311\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\311\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\12\5\1\u01f0\4\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\u021d\1\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\u01d8\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\u021e\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u021f\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\163\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\u0220\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\2\5\1\127\14\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\13\5\1\u01ea\1\311\1\5" + - "\1\u0168\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\u0163\1\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0112\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\2\5\1\303" + - "\16\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\127\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\u0165\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\303\4\5\1\303\4\5" + - "\1\u0102\4\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\1\5\1\303\17\5\4\0\1\4\6\5" + - "\1\0\7\5\1\u01f0\7\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\11\5\1\u01f6\5\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\16\5\1\303\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\u0221\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0222\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0223" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\u0224\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0225\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\1\5\1\u0226\4\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0227\12\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0228\12\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\303\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\u01b1\20\5\4\0\1\4\6\5\1\0\11\5\1\u0229" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\127" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0163" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u022a" + - "\20\5\4\0\1\4\6\5\1\0\14\5\1\u022b\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\151\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\15\5\1\303\1\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01d8\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\7\4\1\0\7\4\1\u0203\7\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\12\4\1\u022c\4\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\16\4\1\u022d\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\17\0\1\u0208\114\0\1\u022e" + - "\114\0\1\u022e\124\0\1\u022f\106\0\1\u0208\121\0\1\u0230" + - "\125\0\1\u0231\70\0\1\4\6\5\1\0\5\5\1\u0140" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01e6" + - "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0232" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u0233" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\303\4\5" + - "\1\303\4\5\1\u0102\3\5\1\136\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\5\1\303\17\5" + - "\4\0\1\4\6\5\1\0\16\5\1\u0215\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\1\5\1\u0164\4\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\1\5\1\303\1\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\36\0" + - "\1\u01cf\115\0\1\u01d2\63\0\1\4\1\5\1\u0234\4\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u0235\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\u01eb\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\303\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\u0236\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u0237\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\u020e\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u0238\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\u0239\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\315\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\u0239\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u0163\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u023a\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5" + - "\1\307\4\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\u0128\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u023b" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\330" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\127" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\7\4\1\0\1\u01b6\16\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\14\4\1\u0203\2\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\23\0\1\u022e\120\0\1\u023c\121\0\1\u023d\67\0" + - "\1\4\6\5\1\0\16\5\1\307\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\16\5\1\136\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\1\5" + - "\1\u023e\4\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\11\5\1\307\5\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u01a2\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u023f\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\7\5\1\127\7\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\14\5\1\u0240\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\1\5\1\u01d9\15\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\14\0\1\u0209\131\0" + - "\1\u022e\71\0\1\4\6\5\1\0\7\5\1\u0241\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01eb\10\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0242\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\u0235\1\0\21\5" + - "\4\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[42978]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\26\1\1\11\6\1\1\11\6\1\1\11\1\1"+ + "\2\11\7\1\1\11\6\1\1\11\114\1\1\0\2\11"+ + "\2\1\1\11\3\1\1\11\17\1\1\0\14\1\2\0"+ + "\1\11\4\0\1\11\2\0\6\1\1\0\142\1\1\11"+ + "\7\1\1\11\21\1\6\0\14\1\10\0\6\1\1\0"+ + "\142\1\4\0\1\1\4\0\11\1\2\0\1\1\2\0"+ + "\67\1\7\0\10\1\4\0\25\1\1\11\3\0\12\1"+ + "\2\0\5\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[583]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\26\1\1\11\4\1\1\11\2\1\1\11\6\1" + - "\1\11\1\1\1\11\7\1\1\11\5\1\1\11\114\1" + - "\1\0\2\11\2\1\1\11\3\1\1\11\20\1\1\0" + - "\14\1\2\0\1\11\6\0\6\1\1\0\141\1\1\11" + - "\7\1\1\11\22\1\6\0\14\1\10\0\6\1\1\0" + - "\141\1\4\0\1\1\4\0\11\1\2\0\1\1\2\0" + - "\65\1\7\0\10\1\4\0\24\1\1\11\3\0\12\1" + - "\2\0\5\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[578]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CPlusPlusTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.COMMENT_EOL: + state = EOL_COMMENT; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = YYINITIAL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CPlusPlusTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CPlusPlusTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 184) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public CPlusPlusTokenMaker() { - super(); + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + throw new Error(message); + } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } + zzMarkedPos -= number; + } - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public CPlusPlusTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + zzAction = -1; - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public CPlusPlusTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 184) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + zzState = zzLexicalState; - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 27: { - addToken(Token.PREPROCESSOR); - } - case 30: - break; - case 7: { - addNullToken(); - return firstToken; - } - case 31: - break; - case 24: { - addToken(Token.LITERAL_CHAR); - } - case 32: - break; - case 21: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 33: - break; - case 17: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 34: - break; - case 9: { - addToken(Token.WHITESPACE); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 35: - break; - case 26: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 36: - break; - case 18: { - addToken(Token.ERROR_CHAR); /* addNullToken(); return firstToken; */ - } - case 37: - break; - case 25: { - addToken(Token.ERROR_STRING_DOUBLE); - } - case 38: - break; - case 14: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 39: - break; - case 15: { - addToken(Token.RESERVED_WORD); - } - case 40: - break; - case 5: { - addToken(Token.SEPARATOR); - } - case 41: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 42: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 43: - break; - case 16: { - start = zzMarkedPos - 2; - yybegin(EOL_COMMENT); - } - case 44: - break; - case 22: { - addToken(Token.FUNCTION); - } - case 45: - break; - case 6: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 46: - break; - case 8: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 47: - break; - case 23: { - addToken(Token.DATA_TYPE); - } - case 48: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 49: - break; - case 19: { - addToken(Token.ERROR_CHAR); - } - case 50: - break; - case 20: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 51: - break; - case 29: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 52: - break; - case 28: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 53: - break; - case 13: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 54: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 55: - break; - case 4: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 29: + { addToken(Token.PREPROCESSOR); + } + case 33: break; + case 7: + { addNullToken(); return firstToken; + } + case 34: break; + case 26: + { addToken(Token.LITERAL_CHAR); + } + case 35: break; + case 22: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 36: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 37: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 38: break; + case 28: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 39: break; + case 19: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 40: break; + case 27: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 41: break; + case 15: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 42: break; + case 16: + { addToken(Token.RESERVED_WORD); + } + case 43: break; + case 5: + { addToken(Token.SEPARATOR); + } + case 44: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 45: break; + case 12: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.COMMENT_EOL); + return firstToken; + } + case 46: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 47: break; + case 17: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 48: break; + case 24: + { addToken(Token.FUNCTION); + } + case 49: break; + case 6: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 50: break; + case 8: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 51: break; + case 25: + { addToken(Token.DATA_TYPE); + } + case 52: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 53: break; + case 20: + { addToken(Token.ERROR_CHAR); + } + case 54: break; + case 23: + { /* Skip all escaped chars. */ + } + case 55: break; + case 21: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 56: break; + case 31: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 57: break; + case 30: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 58: break; + case 32: + { addToken(Token.RESERVED_WORD_2); + } + case 59: break; + case 14: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 60: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 61: break; + case 4: + { addToken(Token.OPERATOR); + } + case 62: break; + case 10: + { + } + case 63: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 64: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 56: - break; - case 10: { + case 584: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 57: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 585: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 58: - break; + case 586: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 579: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 580: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 581: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex old mode 100644 new mode 100755 index 070b396a8..d9b8297e5 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.flex @@ -1,24 +1,10 @@ /* * 09/03/2005 * - * CSSTokenMaker.java - Token maker for CSS files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea + * CSSTokenMaker.java - Token maker for CSS 3 files. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,7 +15,9 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * This class splits up text into tokens representing a CSS file.

            + * This class splits up text into tokens representing a CSS 3 file. It's + * written with a few extra internal states so that it can easily be copy + * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

            * * This implementation was created using * JFlex 1.4.1; however, the generated file @@ -49,7 +37,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

              - *
            • The generated CSSTokenMaker.java file will contain 2 + *
            • The generated CSSTokenMaker.java file will contain 2 * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,23 +51,58 @@ import org.fife.ui.rsyntaxtextarea.*; *
            * * @author Robert Futrell - * @version 0.4 + * @version 0.5 * */ %% %public %class CSSTokenMaker -%extends AbstractJFlexTokenMaker -%implements TokenMaker +%extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token %{ + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -1; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -2; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); -/*****************************************************************************/ + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether we are highlighting less instead of CSS. + */ + private boolean highlightingLess; /** @@ -91,20 +114,37 @@ import org.fife.ui.rsyntaxtextarea.*; } -/*****************************************************************************/ + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } /** * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. + * @see #addToken(int, int, int) */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos-1, tokenType); + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); } -/*****************************************************************************/ + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } /** @@ -118,9 +158,6 @@ import org.fife.ui.rsyntaxtextarea.*; } -/*****************************************************************************/ - - /** * Adds the token specified to the current linked list of tokens. * @@ -131,13 +168,60 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } -/*****************************************************************************/ + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_CSS_STRING: + case INTERNAL_CSS_CHAR: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_CSS_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * Returns true since CSS uses curly braces. + * + * @return true always. + */ + public boolean getCurlyBracesDenoteCodeBlocks() { + return true; + } + + + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "/*", "*/" }; + } + + + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.RESERVED_WORD; // Used for CSS keys + } + + + @Override + public boolean getShouldIndentNextLineAfter(Token t) { + if (t!=null && t.length()==1) { + char ch = t.charAt(0); + return ch=='{' || ch=='('; + } + return false; + } /** @@ -156,30 +240,49 @@ import org.fife.ui.rsyntaxtextarea.*; resetTokenList(); this.offsetShift = -text.offset + startOffset; + cssPrevState = YYINITIAL; // Shouldn't be necessary // Start off in the proper state. - int state = Token.NULL; + int state = YYINITIAL; switch (initialTokenType) { case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; + state = CSS_STRING; break; case Token.LITERAL_CHAR: - state = CHAR_LITERAL; - start = text.offset; + state = CSS_CHAR_LITERAL; break; case Token.COMMENT_MULTILINE: - state = C_STYLE_COMMENT; - start = text.offset; + state = CSS_C_STYLE_COMMENT; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; break; - case Token.COMMENT_DOCUMENTATION: - state = CD_COMMENT; - start = text.offset; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; break; default: - state = Token.NULL; + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } } + start = text.offset; s = text; try { yyreset(zzReader); @@ -187,13 +290,29 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } -/*****************************************************************************/ + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Toggles whether we're highlighting less instead of just CSS. + * + * @param highlightingLess Whether we're highlighting less. + */ + public void setHighlightingLess(boolean highlightingLess) { + this.highlightingLess = highlightingLess; + } /** @@ -201,16 +320,12 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } -/*****************************************************************************/ - - /** * Resets the scanner to read from a new input stream. * Does not close the old reader. @@ -221,7 +336,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -241,97 +356,203 @@ import org.fife.ui.rsyntaxtextarea.*; } -/*****************************************************************************/ - %} -ident = ([-]?{nmstart}{nmchar}*) -name = ({nmchar}+) -nmstart = ([_a-zA-Z]|{nonascii}|{escape}) -nonascii = ([^\0-\177]) -unicode = (\\[0-9a-f]{1,6}[ \n\t\f]?) -escape = ({unicode}|\\[^\n\r\f0-9a-f]) -nmchar = ([_a-zA-Z0-9\-]|{nonascii}|{escape}) -num = ([0-9]+|[0-9]*\.[0-9]+) -w = ([ \t\n\f]) - -IDENT = ({ident}) -ATKEYWORD = (@{ident}) -HASH = (#{name}) -NUMBER = ({num}) -PERCENTAGE = ({num}%) -DIMENSION = ({num}{ident}) -UNICODE_RANGE = (U\+[0-9A-F?]{1,6}(-[0-9A-F]{1,6})?) -CDO = ("") -SEPARATOR = ([;\{\}\(\)\[\]]) -S = ({w}+) -COMMENT_START = ("/*") -COMMENT_END = ("*/") -FUNCTION = ({ident}\() -INCLUDES = (\~=) -DASHMATCH = (\|=) - - -%state STRING -%state CHAR_LITERAL -%state CD_COMMENT -%state C_STYLE_COMMENT - +Digit = ([0-9]) +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|[_]) +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtRule = ("@"(charset|import|namespace|media|document|page|font-face|keyframes|viewport)) +CSS_Less_Var = ("@"({LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +WhiteSpace = ([ \t]+) +MlcStart = ("/*") +MlcEnd = ("*/") + +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*(:[\w]+)?) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) + +// Less_Nested_Selector includes pseudo-classes for ease of highlighting, even +// though it is not as detailed as standard CSS selector highlighting. +Less_Nested_Selector_With_Pseudo = ({CSS_SelectorPiece}{CSS_PseudoClass}*) +Less_Selector_ParentRef = ("&"{CSS_SelectorPiece}) +Less_LineCommentBegin = "//" + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state LESS_EOL_COMMENT %% { - - {IDENT} { addToken(Token.IDENTIFIER); } - {ATKEYWORD} { addToken(Token.VARIABLE); } - \" { start = zzMarkedPos-1; yybegin(STRING); } - \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } - {HASH} { addToken(Token.VARIABLE); } - {NUMBER} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } - {PERCENTAGE} { addToken(Token.DATA_TYPE); } - {DIMENSION} { addToken(Token.DATA_TYPE); } - {UNICODE_RANGE} { addToken(Token.FUNCTION); } - {CDO} { start = zzMarkedPos-4; yybegin(CD_COMMENT); } - {SEPARATOR} { addToken(Token.SEPARATOR); } - {S} { addToken(Token.WHITESPACE); } - {COMMENT_START} { start = zzMarkedPos-2; yybegin(C_STYLE_COMMENT); } - {FUNCTION} { addToken(Token.FUNCTION); } - {INCLUDES} { addToken(Token.OPERATOR); } - {DASHMATCH} { addToken(Token.OPERATOR); } - . { addToken(Token.IDENTIFIER); } - <> { addNullToken(); return firstToken; } - + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtRule} { addToken(Token.REGEX); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); } + {CSS_Number} { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); } + {CSS_Id} { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + "}" { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + {Less_LineCommentBegin} { + if (highlightingLess) { + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + . { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addNullToken(); return firstToken; } } - { - [^\n\"]+ {} - \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } - \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } - <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } + { + {CSS_Property} { addToken(Token.RESERVED_WORD); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } + {Less_Nested_Selector_With_Pseudo} { addToken(highlightingLess ? Token.RESERVED_WORD : Token.IDENTIFIER); } + {Less_Selector_ParentRef} { + if (highlightingLess) { + // Unfortunately, as we're sharing the CSS and Less + // syntax highlighting, we do not color nested selectors + // properly. For uniformity, color this the same as + // CSS_Property + addToken(Token.RESERVED_WORD); + } + else { + addToken(Token.IDENTIFIER); + } + } + "{" { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ } + "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + {Less_LineCommentBegin} { + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } } - { - [^\n\']+ {} - \n { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } - \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(YYINITIAL); } - <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } + { + {Less_LineCommentBegin} { + // This must be before {CSS_Value} since "//" is a valid CSS value + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.PREPROCESSOR); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {CSS_Less_Var} { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } + {WhiteSpace} { addToken(Token.WHITESPACE); } + {MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } } - { - [^\n\-]+ {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } - {CDC} { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_DOCUMENTATION); } - \- {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } } - { + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} - [^\n\*]+ {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - {COMMENT_END} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } - \* {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; + } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java old mode 100644 new mode 100755 index 0056c4c12..38abb9c42 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSSTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 12/14/05 10:11 AM */ +/* The following code was generated by JFlex 1.4.1 on 1/7/19 7:17 PM */ /* * 09/03/2005 * - * CSSTokenMaker.java - Token maker for CSS files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea + * CSSTokenMaker.java - Token maker for CSS 3 files. * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,819 +15,1312 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * This class splits up text into tokens representing a CSS file. - *

            - * - * This implementation was created using JFlex 1.4_5; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

            - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

            - * + * This class splits up text into tokens representing a CSS 3 file. It's + * written with a few extra internal states so that it can easily be copy + * and pasted into HTML, PHP, and JSP TokenMakres when it is updated.

            + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

            + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

            + * * If you wish to regenerate this file yourself, keep in mind the following: *

              - *
            • The generated CSSTokenMaker.java file will contain 2 definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
            • - *
            • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
            • - *
            • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
            • + *
            • The generated CSSTokenMaker.java file will contain 2 + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
            • + *
            • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
            • + *
            • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
            • *
            - * + * * @author Robert Futrell - * @version 0.4 - * + * @version 0.5 + * */ -public class CSSTokenMaker extends AbstractJFlexTokenMaker implements TokenMaker { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int CD_COMMENT = 3; - public static final int STRING = 1; - public static final int CHAR_LITERAL = 2; - public static final int YYINITIAL = 0; - public static final int C_STYLE_COMMENT = 4; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\2\1\6\1\34\1\2\1\10\1\7\22\2\1\6\1\22\1\32" + - "\1\13\1\2\1\14\1\2\1\33\1\27\1\24\1\26\1\16\1\2" + - "\1\1\1\11\1\25\12\5\1\2\1\24\1\21\1\31\1\23\1\20" + - "\1\12\6\17\16\0\1\15\5\0\1\24\1\3\1\24\1\2\1\0" + - "\1\2\6\4\24\0\1\24\1\30\1\24\1\30\1\2\uff80\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\4\1\1\2\1\3\5\1\1\4\2\1\1\5" + - "\1\6\1\7\1\10\1\11\1\7\1\12\1\13\2\7" + - "\1\14\2\7\1\15\1\0\1\16\1\1\1\17\3\0" + - "\1\17\1\2\1\20\4\0\1\21\1\22\1\0\1\23" + - "\1\1\1\17\1\20\1\16\1\0\1\24\1\1\1\17" + - "\1\20\1\0\1\16\1\25\1\1\1\17\1\20\2\16" + - "\1\1\1\17\1\20\2\16\1\1\1\17\1\20\2\16" + - "\1\17\1\20\3\16"; - - private static int[] zzUnpackAction() { - int[] result = new int[83]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\35\0\72\0\127\0\164\0\221\0\256\0\313" + - "\0\350\0\u0105\0\u0122\0\u013f\0\u015c\0\u0179\0\u0196\0\u01b3" + - "\0\313\0\u01d0\0\u01ed\0\313\0\313\0\u020a\0\313\0\313" + - "\0\u0227\0\313\0\313\0\u0244\0\u0261\0\313\0\u027e\0\u029b" + - "\0\313\0\350\0\313\0\u02b8\0\u02d5\0\u02f2\0\u030f\0\u013f" + - "\0\313\0\u032c\0\u0179\0\u0349\0\u0366\0\u0383\0\u03a0\0\313" + - "\0\313\0\u03bd\0\313\0\u03da\0\u03f7\0\u0414\0\u0431\0\u044e" + - "\0\313\0\u046b\0\u0488\0\u04a5\0\u04c2\0\u04df\0\313\0\u04fc" + - "\0\u0519\0\u0536\0\u0553\0\u0570\0\u058d\0\u05aa\0\u05c7\0\u05e4" + - "\0\u0601\0\u061e\0\u063b\0\u0658\0\u0675\0\u0692\0\u06af\0\u06cc" + - "\0\u06e9\0\u0706\0\u0723"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[83]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\1\7\1\10\1\11\1\6\1\12\1\13\1\10" + - "\1\13\1\14\1\15\1\16\1\10\1\17\1\10\1\6" + - "\1\10\1\20\2\10\1\21\1\22\1\10\1\21\1\23" + - "\1\10\1\24\1\25\1\13\32\26\1\27\1\26\1\30" + - "\33\31\1\32\1\33\1\34\1\35\32\34\1\36\26\37" + - "\1\40\5\37\1\41\2\6\1\0\1\42\2\6\7\0" + - "\1\6\1\0\1\6\7\0\1\43\5\0\1\6\2\0" + - "\1\42\1\6\10\0\1\6\1\0\1\6\52\0\4\6" + - "\2\44\1\6\2\0\23\6\1\0\1\45\1\46\1\0" + - "\1\47\1\45\1\12\3\0\1\50\2\0\1\51\1\45" + - "\1\0\1\45\23\0\1\13\1\0\1\13\23\0\1\13" + - "\5\0\1\52\27\0\1\53\1\54\1\0\1\55\1\53" + - "\10\0\1\53\1\0\1\53\15\0\2\53\1\0\1\55" + - "\2\53\7\0\1\53\1\0\1\53\15\0\2\6\1\0" + - "\1\42\2\6\7\0\1\6\1\56\1\6\7\0\1\43" + - "\27\0\1\57\40\0\1\60\37\0\1\61\3\0\32\26" + - "\1\0\1\26\1\0\33\31\2\0\1\34\1\0\32\34" + - "\2\0\1\62\33\0\26\37\1\0\5\37\26\0\1\63" + - "\7\0\2\6\1\0\1\42\2\64\1\6\1\0\1\6" + - "\4\0\1\6\1\0\1\6\7\0\1\43\4\0\1\6" + - "\2\45\1\0\1\47\2\45\7\0\1\45\1\0\1\45" + - "\15\0\1\45\2\0\1\47\1\45\10\0\1\45\1\0" + - "\1\45\15\0\4\45\2\65\1\45\2\0\23\45\1\0" + - "\1\45\1\46\1\0\1\47\1\45\1\52\6\0\1\51" + - "\1\45\1\0\1\45\15\0\1\53\2\0\1\55\1\53" + - "\10\0\1\53\1\0\1\53\15\0\4\53\2\66\1\53" + - "\2\0\23\53\6\0\1\67\11\0\2\67\15\0\1\70" + - "\56\0\1\71\11\0\2\6\1\0\1\42\2\72\1\6" + - "\1\0\1\6\4\0\1\6\1\0\1\6\7\0\1\43" + - "\4\0\1\6\2\45\1\0\1\47\2\73\1\45\1\0" + - "\1\45\4\0\1\45\1\0\1\45\14\0\1\45\2\53" + - "\1\0\1\55\2\74\1\53\1\0\1\53\4\0\1\53" + - "\1\0\1\53\14\0\1\53\1\0\1\75\3\0\1\76" + - "\11\0\2\76\15\0\1\77\33\0\2\6\1\0\1\42" + - "\2\100\1\6\1\0\1\6\4\0\1\6\1\0\1\6" + - "\7\0\1\43\4\0\1\6\2\45\1\0\1\47\2\101" + - "\1\45\1\0\1\45\4\0\1\45\1\0\1\45\14\0" + - "\1\45\2\53\1\0\1\55\2\102\1\53\1\0\1\53" + - "\4\0\1\53\1\0\1\53\14\0\1\53\5\0\1\103" + - "\11\0\1\103\16\0\1\75\3\0\1\104\11\0\2\104" + - "\14\0\2\6\1\0\1\42\2\105\1\6\1\0\1\6" + - "\4\0\1\6\1\0\1\6\7\0\1\43\4\0\1\6" + - "\2\45\1\0\1\47\2\106\1\45\1\0\1\45\4\0" + - "\1\45\1\0\1\45\14\0\1\45\2\53\1\0\1\55" + - "\2\107\1\53\1\0\1\53\4\0\1\53\1\0\1\53" + - "\14\0\1\53\5\0\1\110\11\0\1\110\16\0\1\75" + - "\3\0\1\111\11\0\2\111\14\0\2\6\1\0\1\42" + - "\2\112\1\6\1\0\1\6\4\0\1\6\1\0\1\6" + - "\7\0\1\43\4\0\1\6\2\45\1\0\1\47\2\113" + - "\1\45\1\0\1\45\4\0\1\45\1\0\1\45\14\0" + - "\1\45\2\53\1\0\1\55\2\114\1\53\1\0\1\53" + - "\4\0\1\53\1\0\1\53\14\0\1\53\5\0\1\115" + - "\11\0\1\115\16\0\1\75\3\0\1\116\11\0\2\116" + - "\14\0\2\6\1\0\1\42\3\6\1\0\1\6\4\0" + - "\1\6\1\0\1\6\7\0\1\43\4\0\1\6\2\45" + - "\1\0\1\47\2\117\1\45\1\0\1\45\4\0\1\45" + - "\1\0\1\45\14\0\1\45\2\53\1\0\1\55\2\120" + - "\1\53\1\0\1\53\4\0\1\53\1\0\1\53\14\0" + - "\1\53\5\0\1\121\11\0\1\121\16\0\1\75\3\0" + - "\1\122\11\0\2\122\14\0\2\45\1\0\1\47\3\45" + - "\1\0\1\45\4\0\1\45\1\0\1\45\14\0\1\45" + - "\2\53\1\0\1\55\3\53\1\0\1\53\4\0\1\53" + - "\1\0\1\53\14\0\1\53\5\0\1\123\11\0\1\123" + - "\16\0\1\75\40\0\1\43\11\0\1\43\15\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[1856]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\2\1\1\11\10\1\1\11\2\1\2\11\1\1" + - "\2\11\1\1\2\11\2\1\1\11\2\1\1\11\1\0" + - "\1\11\2\1\3\0\1\11\2\1\4\0\2\11\1\0" + - "\1\11\4\1\1\0\1\11\3\1\1\0\1\1\1\11" + - "\24\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[83]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public CSSTokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); +public class CSSTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int CSS_C_STYLE_COMMENT = 5; + public static final int LESS_EOL_COMMENT = 6; + public static final int YYINITIAL = 0; + public static final int CSS_STRING = 3; + public static final int CSS_VALUE = 2; + public static final int CSS_PROPERTY = 1; + public static final int CSS_CHAR_LITERAL = 4; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\41\1\64\25\0\1\41\1\53\1\60\1\37\1\55\1\46"+ + "\1\50\1\61\1\44\1\65\1\5\1\54\1\57\1\4\1\6\1\42"+ + "\12\1\1\7\1\40\1\0\1\54\1\63\1\51\1\35\6\47\24\2"+ + "\1\52\1\43\1\52\1\63\1\3\1\0\1\21\1\34\1\15\1\20"+ + "\1\26\1\23\1\33\1\14\1\16\1\2\1\30\1\17\1\27\1\13"+ + "\1\11\1\25\1\2\1\10\1\22\1\12\1\32\1\31\1\36\1\45"+ + "\1\24\1\2\1\56\1\63\1\62\1\54\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\1\1\4\0\1\2\1\3\2\4\1\5\2\2"+ + "\1\6\1\7\1\2\1\10\1\11\1\1\1\12\1\13"+ + "\1\14\1\15\1\16\1\17\2\20\1\21\3\16\1\22"+ + "\1\23\1\24\1\25\1\26\2\1\2\25\1\27\1\1"+ + "\1\30\1\25\1\31\1\32\1\33\1\34\1\35\1\36"+ + "\1\33\1\37\1\40\5\33\1\41\4\33\1\42\2\0"+ + "\1\3\3\0\1\4\15\0\12\43\1\3\1\44\1\3"+ + "\1\45\1\46\2\0\1\47\1\50\1\51\2\0\1\26"+ + "\3\0\1\26\1\52\1\0\1\34\1\53\33\0\11\43"+ + "\15\0\1\17\16\0\1\17\14\0\11\43\26\0\1\54"+ + "\2\0\1\55\14\0\5\43\1\56\2\43\5\0\1\20"+ + "\31\0\6\43\21\0\3\43\14\0\2\43\7\0\1\43"+ + "\11\0\1\57\3\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[340]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\66\0\154\0\242\0\330\0\u010e\0\u0144\0\u017a"+ + "\0\u01b0\0\u01e6\0\u021c\0\u0252\0\u0288\0\u02be\0\u017a\0\u02f4"+ + "\0\u032a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a\0\u017a"+ + "\0\u017a\0\u0360\0\u0396\0\u03cc\0\u017a\0\u0402\0\u0438\0\u046e"+ + "\0\u017a\0\u017a\0\u017a\0\u017a\0\u04a4\0\u04da\0\u0510\0\u0402"+ + "\0\u0546\0\u017a\0\u057c\0\u017a\0\u05b2\0\u017a\0\u017a\0\u05e8"+ + "\0\u061e\0\u017a\0\u017a\0\u0654\0\u017a\0\u017a\0\u068a\0\u06c0"+ + "\0\u06f6\0\u072c\0\u0762\0\u017a\0\u0798\0\u07ce\0\u0804\0\u083a"+ + "\0\u017a\0\u0870\0\u08a6\0\u017a\0\u08dc\0\u0912\0\u0948\0\u097e"+ + "\0\u09b4\0\u09ea\0\u0a20\0\u0a56\0\u0a8c\0\u0ac2\0\u0af8\0\u0b2e"+ + "\0\u0b64\0\u0b9a\0\u0bd0\0\u0c06\0\u0c3c\0\u0c72\0\u0ca8\0\u0cde"+ + "\0\u0d14\0\u0d4a\0\u0d80\0\u0db6\0\u0dec\0\u0e22\0\u0e58\0\u0e8e"+ + "\0\u0ec4\0\u0efa\0\u017a\0\u017a\0\u0f30\0\u0f66\0\u0f9c\0\u017a"+ + "\0\u0fd2\0\u1008\0\u103e\0\u017a\0\u1074\0\u10aa\0\u10e0\0\u0546"+ + "\0\u04da\0\u1116\0\u017a\0\u017a\0\u114c\0\u1182\0\u11b8\0\u11ee"+ + "\0\u1224\0\u125a\0\u1290\0\u12c6\0\u12fc\0\u1332\0\u1368\0\u139e"+ + "\0\u13d4\0\u140a\0\u1440\0\u1476\0\u14ac\0\u14e2\0\u1518\0\u154e"+ + "\0\u1584\0\u15ba\0\u15f0\0\u1626\0\u165c\0\u1692\0\u16c8\0\u16fe"+ + "\0\u1734\0\u176a\0\u17a0\0\u17d6\0\u180c\0\u1842\0\u1878\0\u18ae"+ + "\0\u18e4\0\u191a\0\u1950\0\u1986\0\u19bc\0\u19f2\0\u1a28\0\u1a5e"+ + "\0\u1a94\0\u1aca\0\u1b00\0\u1b36\0\u1b6c\0\u1ba2\0\u1bd8\0\u1c0e"+ + "\0\u1c44\0\u1c7a\0\u1cb0\0\u1ce6\0\u1d1c\0\u1d52\0\u1d88\0\u1dbe"+ + "\0\u1df4\0\u1e2a\0\u1e60\0\u1e96\0\u017a\0\u1ecc\0\u1f02\0\u1f38"+ + "\0\u1f6e\0\u1fa4\0\u1fda\0\u2010\0\u2046\0\u207c\0\u20b2\0\u20e8"+ + "\0\u211e\0\u2154\0\u218a\0\u21c0\0\u21f6\0\u222c\0\u2262\0\u2298"+ + "\0\u22ce\0\u2304\0\u233a\0\u2370\0\u23a6\0\u23dc\0\u2412\0\u2448"+ + "\0\u247e\0\u24b4\0\u24ea\0\u2520\0\u2556\0\u258c\0\u25c2\0\u25f8"+ + "\0\u262e\0\u2664\0\u269a\0\u26d0\0\u2706\0\u273c\0\u2772\0\u27a8"+ + "\0\u27de\0\u2814\0\u284a\0\u2880\0\u28b6\0\u28ec\0\u2922\0\u2958"+ + "\0\u298e\0\u29c4\0\u29fa\0\u2a30\0\u2a66\0\u2a9c\0\u2ad2\0\u2b08"+ + "\0\u2b3e\0\u2b74\0\u2baa\0\u2be0\0\u2c16\0\u0c72\0\u2c4c\0\u2c82"+ + "\0\u2cb8\0\u2cee\0\u2d24\0\u2d5a\0\u2d90\0\u2dc6\0\u2dfc\0\u2e32"+ + "\0\u2e68\0\u2e9e\0\u2ed4\0\u2f0a\0\u2f40\0\u2f76\0\u2fac\0\u2fe2"+ + "\0\u3018\0\u304e\0\u3084\0\u30ba\0\u27de\0\u30f0\0\u2880\0\u3126"+ + "\0\u315c\0\u3192\0\u31c8\0\u31fe\0\u3234\0\u326a\0\u32a0\0\u32d6"+ + "\0\u330c\0\u3342\0\u3378\0\u33ae\0\u33e4\0\u341a\0\u3450\0\u3486"+ + "\0\u34bc\0\u34f2\0\u3528\0\u355e\0\u3594\0\u35ca\0\u3600\0\u3636"+ + "\0\u366c\0\u36a2\0\u36d8\0\u370e\0\u3744\0\u377a\0\u37b0\0\u37e6"+ + "\0\u381c\0\u3852\0\u3888\0\u38be\0\u38f4\0\u392a\0\u3960\0\u3996"+ + "\0\u39cc\0\u3a02\0\u3a38\0\u3a6e\0\u3aa4\0\u3ada\0\u3b10\0\u3b46"+ + "\0\u3b7c\0\u3bb2\0\u3be8\0\u3c1e\0\u3c54\0\u3c8a\0\u3cc0\0\u3cf6"+ + "\0\u3d2c\0\u3d62\0\u3d98\0\u3dce\0\u3e04\0\u3e3a\0\u3e70\0\u3ea6"+ + "\0\u017a\0\u3edc\0\u3f12\0\u3f48"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[340]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR_LITERAL; - start = text.offset; - break; - case Token.COMMENT_MULTILINE: - state = C_STYLE_COMMENT; - start = text.offset; - break; - case Token.COMMENT_DOCUMENTATION: - state = CD_COMMENT; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\1\11\2\12\1\13\2\12\1\14\25\12\1\15"+ + "\1\12\1\16\1\17\1\20\1\21\1\10\1\17\1\12"+ + "\1\10\1\12\2\10\1\17\1\10\2\22\1\23\1\24"+ + "\1\25\1\26\1\27\1\22\1\30\1\17\2\31\3\32"+ + "\1\33\1\34\1\35\25\32\1\36\1\32\2\31\1\20"+ + "\1\37\2\31\1\32\1\31\1\32\1\40\5\31\1\41"+ + "\3\31\1\42\1\31\1\43\1\31\1\44\1\45\2\46"+ + "\1\47\1\44\1\24\1\44\25\46\1\50\1\46\1\51"+ + "\1\52\1\20\1\53\1\46\1\54\1\46\1\44\1\46"+ + "\3\44\1\55\3\44\1\24\1\25\1\26\1\42\1\44"+ + "\1\56\1\57\43\60\1\61\14\60\1\62\3\60\1\63"+ + "\1\60\43\64\1\61\15\64\1\65\2\64\1\66\1\64"+ + "\5\67\1\70\6\67\1\71\6\67\1\72\12\67\1\73"+ + "\25\67\1\74\1\67\14\75\1\76\6\75\1\77\12\75"+ + "\1\100\25\75\1\101\1\75\67\0\1\11\4\0\1\11"+ + "\6\0\1\102\1\103\3\0\1\104\2\0\1\105\1\106"+ + "\1\107\16\0\1\104\20\0\4\12\1\0\1\12\1\0"+ + "\25\12\1\0\1\12\6\0\1\12\1\0\1\12\17\0"+ + "\1\110\3\12\1\0\1\12\1\0\25\12\1\0\1\12"+ + "\6\0\1\12\1\0\1\12\25\0\1\111\1\112\1\113"+ + "\1\114\1\115\1\116\1\117\1\0\1\120\1\121\1\122"+ + "\1\0\1\123\2\0\1\124\2\0\1\125\36\0\3\126"+ + "\3\0\3\126\1\127\1\126\1\130\1\131\1\126\1\132"+ + "\2\126\1\133\1\126\1\134\1\126\1\135\1\136\1\137"+ + "\3\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\1\140\5\141\1\0\5\141\1\142\2\141\2\142\1\141"+ + "\1\142\2\141\1\142\5\141\1\142\1\0\1\141\6\0"+ + "\1\141\1\0\1\142\57\0\1\20\31\0\1\143\34\0"+ + "\1\144\24\0\4\32\1\0\1\34\1\145\25\32\1\0"+ + "\1\32\6\0\1\32\1\0\1\32\17\0\1\34\3\32"+ + "\1\0\1\34\1\146\25\32\1\0\1\32\6\0\1\32"+ + "\1\0\1\32\17\0\4\34\1\0\1\34\1\146\25\34"+ + "\1\0\1\34\6\0\1\34\1\0\1\34\20\0\3\147"+ + "\3\0\25\147\1\0\1\147\6\0\1\147\1\0\1\147"+ + "\23\0\1\143\34\0\1\150\25\0\5\151\1\0\25\151"+ + "\1\0\1\151\6\0\1\151\1\0\1\151\17\0\1\45"+ + "\4\0\1\45\6\0\1\152\1\153\3\0\1\154\2\0"+ + "\1\155\1\156\1\157\16\0\1\154\21\0\3\46\3\0"+ + "\25\46\1\0\1\46\3\0\2\46\1\54\1\46\1\0"+ + "\1\46\17\0\1\45\3\46\3\0\25\46\1\0\1\46"+ + "\3\0\2\46\1\54\1\46\1\0\1\46\17\0\1\160"+ + "\13\0\1\160\2\0\2\160\1\0\1\160\2\0\1\160"+ + "\5\0\1\160\12\0\1\160\20\0\3\46\1\143\2\0"+ + "\25\46\1\0\1\46\3\0\1\161\1\46\1\54\1\46"+ + "\1\0\1\46\34\0\1\162\47\0\43\60\1\0\14\60"+ + "\1\0\3\60\1\0\1\60\64\163\1\0\1\163\43\64"+ + "\1\0\15\64\1\0\2\64\1\0\1\64\5\67\1\0"+ + "\6\67\1\0\6\67\1\0\12\67\1\0\25\67\1\0"+ + "\1\67\42\0\1\164\35\0\1\165\65\0\1\166\3\0"+ + "\1\167\105\0\1\170\27\0\14\75\1\0\6\75\1\0"+ + "\12\75\1\0\25\75\1\0\1\75\12\0\1\171\65\0"+ + "\1\172\3\0\1\173\105\0\1\174\56\0\1\104\51\0"+ + "\1\104\64\0\1\104\2\0\1\104\27\0\1\104\47\0"+ + "\1\104\15\0\1\104\42\0\1\104\4\0\1\104\37\0"+ + "\1\110\3\12\1\0\1\110\1\0\25\12\1\0\1\12"+ + "\6\0\1\12\1\104\1\12\37\0\1\175\1\0\1\176"+ + "\10\0\1\177\42\0\1\200\67\0\1\201\73\0\1\202"+ + "\55\0\1\203\1\204\64\0\1\205\70\0\1\206\67\0"+ + "\1\207\2\0\1\210\62\0\1\211\64\0\1\212\61\0"+ + "\1\213\4\0\1\214\62\0\1\215\13\0\1\216\54\0"+ + "\1\217\50\0\4\126\1\0\1\126\1\0\25\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\11\126\1\220\13\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\4\126\1\221\20\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\17\126\1\222"+ + "\5\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\1\126\1\223\23\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\1\126\1\224\23\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\225\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\16\126\1\226"+ + "\6\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\16\126\1\227\6\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\6\126\1\230\16\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\1\140\13\0\1\140\2\0"+ + "\2\140\1\0\1\140\2\0\1\140\5\0\1\140\12\0"+ + "\1\140\17\0\4\141\1\0\1\141\1\0\25\141\1\0"+ + "\1\141\6\0\1\141\1\0\1\141\17\0\1\142\3\141"+ + "\1\0\1\141\1\0\5\141\1\142\2\141\2\142\1\141"+ + "\1\142\2\141\1\142\5\141\1\142\1\0\1\141\6\0"+ + "\1\141\1\0\1\142\25\0\1\231\1\232\1\233\1\234"+ + "\1\235\1\236\1\237\1\0\1\240\1\241\1\242\1\0"+ + "\1\243\2\0\1\244\2\0\1\245\4\0\1\246\36\0"+ + "\1\231\1\232\1\233\1\234\1\235\1\236\1\237\1\0"+ + "\1\240\1\241\1\242\1\0\1\243\2\0\1\244\2\0"+ + "\1\245\35\0\4\147\1\0\1\147\1\0\25\147\1\0"+ + "\1\147\6\0\1\147\1\0\1\147\17\0\4\151\1\0"+ + "\1\151\1\0\25\151\1\0\1\151\6\0\1\151\1\0"+ + "\1\151\45\0\1\154\51\0\1\154\64\0\1\154\2\0"+ + "\1\154\27\0\1\154\47\0\1\154\15\0\1\154\42\0"+ + "\1\154\4\0\1\154\65\0\1\247\50\0\1\250\100\0"+ + "\1\251\57\0\1\252\104\0\1\253\41\0\1\254\100\0"+ + "\1\255\57\0\1\256\104\0\1\257\52\0\1\260\60\0"+ + "\1\261\75\0\1\262\50\0\1\203\73\0\1\263\56\0"+ + "\1\264\67\0\1\265\67\0\1\266\102\0\1\267\62\0"+ + "\1\270\52\0\1\271\65\0\1\272\6\0\1\273\65\0"+ + "\1\215\55\0\1\274\70\0\1\275\60\0\1\276\76\0"+ + "\1\277\71\0\1\300\62\0\1\301\44\0\4\126\1\0"+ + "\1\126\1\0\17\126\1\302\5\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\303\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\15\126\1\304"+ + "\7\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\5\126\1\305\17\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\3\126\1\306\21\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\23\126\1\307\1\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\10\126\1\310"+ + "\14\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\14\126\1\311\10\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\16\126\1\312\6\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\37\0\1\313\1\0\1\314\10\0"+ + "\1\315\42\0\1\316\67\0\1\317\73\0\1\320\55\0"+ + "\1\321\1\322\64\0\1\323\70\0\1\324\67\0\1\325"+ + "\2\0\1\326\62\0\1\327\64\0\1\330\61\0\1\331"+ + "\4\0\1\332\62\0\1\333\13\0\1\334\54\0\1\335"+ + "\105\0\1\246\54\0\1\336\65\0\1\337\47\0\1\340"+ + "\104\0\1\251\45\0\1\341\104\0\1\342\47\0\1\343"+ + "\104\0\1\255\45\0\1\344\71\0\1\267\63\0\1\345"+ + "\100\0\1\346\66\0\1\347\74\0\1\350\36\0\1\351"+ + "\107\0\1\352\54\0\1\353\100\0\1\265\70\0\1\265"+ + "\44\0\1\347\71\0\1\354\101\0\1\355\55\0\1\273"+ + "\77\0\1\356\43\0\1\357\71\0\1\360\50\0\4\126"+ + "\1\0\1\126\1\0\16\126\1\361\6\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\17\0\4\126\1\0\1\126"+ + "\1\0\1\362\24\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\1\126\1\363"+ + "\23\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\22\126\1\364\2\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\2\126\1\365\22\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\16\126\1\366\6\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\6\126\1\367"+ + "\16\126\1\0\1\126\6\0\1\126\1\0\1\126\17\0"+ + "\4\126\1\0\1\126\1\0\13\126\1\370\11\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\25\126\1\0\1\222\6\0\1\126\1\0"+ + "\1\126\41\0\1\371\60\0\1\372\75\0\1\373\50\0"+ + "\1\321\73\0\1\374\56\0\1\375\67\0\1\376\67\0"+ + "\1\377\102\0\1\u0100\62\0\1\u0101\52\0\1\u0102\65\0"+ + "\1\u0103\6\0\1\u0104\65\0\1\333\55\0\1\u0105\70\0"+ + "\1\u0106\60\0\1\u0107\76\0\1\u0108\71\0\1\u0109\62\0"+ + "\1\u010a\54\0\1\u010b\63\0\1\340\12\0\1\251\105\0"+ + "\1\u010c\24\0\2\341\5\u010d\25\341\1\u010d\1\341\2\u010d"+ + "\1\0\1\341\1\0\1\u010d\1\341\1\u010d\1\341\5\u010d"+ + "\1\341\1\0\1\u010d\1\0\1\u010d\3\0\1\u010d\7\0"+ + "\1\343\12\0\1\255\105\0\1\u010e\24\0\2\344\5\u010f"+ + "\25\344\1\u010f\1\344\2\u010f\1\0\1\344\1\0\1\u010f"+ + "\1\344\1\u010f\1\344\5\u010f\1\344\1\0\1\u010f\1\0"+ + "\1\u010f\3\0\1\u010f\22\0\1\u0110\54\0\1\u0111\60\0"+ + "\1\u0112\107\0\1\203\50\0\1\u0113\3\0\1\u0114\1\0"+ + "\1\u0115\56\0\1\265\105\0\1\u0116\66\0\1\u0117\56\0"+ + "\1\265\62\0\1\u0116\72\0\1\265\53\0\1\u0116\54\0"+ + "\4\126\1\0\1\126\1\0\12\126\1\u0118\12\126\1\0"+ + "\1\126\6\0\1\126\1\0\1\126\17\0\4\126\1\0"+ + "\1\126\1\0\12\126\1\u0119\12\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\1\u011a\24\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\17\126\1\u011b\5\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\3\126"+ + "\1\u011c\1\0\1\126\1\0\25\126\1\0\1\126\6\0"+ + "\1\126\1\0\1\126\17\0\4\126\1\0\1\126\1\0"+ + "\11\126\1\366\13\126\1\0\1\126\6\0\1\126\1\0"+ + "\1\126\17\0\4\126\1\0\1\126\1\0\1\u011d\24\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\30\0\1\u0100"+ + "\63\0\1\u011e\100\0\1\u011f\66\0\1\u0120\74\0\1\u0121"+ + "\41\0\1\146\62\0\1\u0122\107\0\1\u0123\54\0\1\u0124"+ + "\100\0\1\376\70\0\1\376\44\0\1\u0120\71\0\1\u0125"+ + "\101\0\1\u0126\55\0\1\u0104\77\0\1\u0127\43\0\1\u0128"+ + "\71\0\1\u0129\57\0\1\u012a\117\0\1\341\65\0\1\344"+ + "\35\0\1\u012b\63\0\1\u0117\66\0\1\u0113\3\0\1\u0114"+ + "\73\0\1\u012c\56\0\1\u012d\72\0\1\276\72\0\1\u012e"+ + "\65\0\1\265\40\0\4\126\1\0\1\126\1\0\15\126"+ + "\1\u012f\7\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\16\126\1\u011a\6\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\4\126"+ + "\1\0\1\126\1\0\2\126\1\366\22\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\17\0\4\126\1\0\1\126"+ + "\1\0\16\126\1\u0130\6\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\17\0\4\126\1\0\1\126\1\0\13\126"+ + "\1\u012f\11\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\11\126\1\u0131\13\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\40\0\1\u0132"+ + "\54\0\1\u0133\60\0\1\u0134\107\0\1\321\50\0\1\u0135"+ + "\3\0\1\u0136\1\0\1\u0137\56\0\1\376\105\0\1\u0138"+ + "\66\0\1\u0139\56\0\1\376\62\0\1\u0138\72\0\1\376"+ + "\53\0\1\u0138\65\0\1\u013a\57\0\1\u013b\65\0\1\u013c"+ + "\77\0\1\u013d\67\0\1\265\46\0\4\126\1\0\1\126"+ + "\1\0\11\126\1\u013e\13\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\17\0\4\126\1\0\1\126\1\0\3\126"+ + "\1\u011a\21\126\1\0\1\126\6\0\1\126\1\0\1\126"+ + "\17\0\4\126\1\0\1\126\1\0\17\126\1\u013f\5\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\30\0\1\u0140"+ + "\63\0\1\u0139\66\0\1\u0135\3\0\1\u0136\73\0\1\u0141"+ + "\56\0\1\u0142\72\0\1\u0107\72\0\1\u0143\65\0\1\376"+ + "\60\0\1\u0144\63\0\1\u0145\60\0\1\u0146\72\0\1\u012e"+ + "\47\0\4\126\1\0\1\126\1\0\5\126\1\307\17\126"+ + "\1\0\1\126\6\0\1\126\1\0\1\126\17\0\4\126"+ + "\1\0\1\126\1\0\16\126\1\u0147\6\126\1\0\1\126"+ + "\6\0\1\126\1\0\1\126\22\0\1\u0148\65\0\1\u0149"+ + "\77\0\1\u014a\67\0\1\376\60\0\1\u014b\70\0\1\u014c"+ + "\7\0\1\u014d\63\0\1\u014e\42\0\4\126\1\0\1\126"+ + "\1\0\12\126\1\366\12\126\1\0\1\126\6\0\1\126"+ + "\1\0\1\126\35\0\1\u014f\60\0\1\u0150\72\0\1\u0143"+ + "\60\0\1\u0151\66\0\1\u0117\64\0\1\260\100\0\1\u0117"+ + "\56\0\1\u0152\7\0\1\u0153\63\0\1\u0154\54\0\1\u0139"+ + "\64\0\1\371\100\0\1\u0139\40\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[16254]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\1\1\4\0\1\11\6\1\1\11\2\1\10\11"+ + "\3\1\1\11\3\1\4\11\5\1\1\11\1\1\1\11"+ + "\1\1\2\11\2\1\2\11\1\1\2\11\5\1\1\11"+ + "\4\1\1\11\2\0\1\11\3\0\1\1\15\0\15\1"+ + "\2\11\2\0\1\1\1\11\1\1\2\0\1\11\3\0"+ + "\2\1\1\0\2\11\33\0\11\1\15\0\1\1\16\0"+ + "\1\11\14\0\11\1\26\0\1\1\2\0\1\1\14\0"+ + "\10\1\5\0\1\1\31\0\6\1\21\0\3\1\14\0"+ + "\2\1\7\0\1\1\11\0\1\11\3\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[340]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the textposition at the last state to be included in yytext */ + private int zzPushbackPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -1; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -2; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether we are highlighting less instead of CSS. + */ + private boolean highlightingLess; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSSTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_CSS_STRING: + case INTERNAL_CSS_CHAR: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_CSS_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * Returns true since CSS uses curly braces. + * + * @return true always. + */ + public boolean getCurlyBracesDenoteCodeBlocks() { + return true; + } + + + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "/*", "*/" }; + } + + + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.RESERVED_WORD; // Used for CSS keys + } + + + @Override + public boolean getShouldIndentNextLineAfter(Token t) { + if (t!=null && t.length()==1) { + char ch = t.charAt(0); + return ch=='{' || ch=='('; + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = YYINITIAL; // Shouldn't be necessary + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = CSS_STRING; + break; + case Token.LITERAL_CHAR: + state = CSS_CHAR_LITERAL; + break; + case Token.COMMENT_MULTILINE: + state = CSS_C_STYLE_COMMENT; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Toggles whether we're highlighting less instead of just CSS. + * + * @param highlightingLess Whether we're highlighting less. + */ + public void setHighlightingLess(boolean highlightingLess) { + this.highlightingLess = highlightingLess; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CSSTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CSSTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 134) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public CSSTokenMaker(java.io.Reader in) { - this.zzReader = in; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public CSSTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 98) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + throw new Error(message); + } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) - zzReader.close(); - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + zzMarkedPos -= number; + } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - throw new Error(message); - } + zzAction = -1; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 6: { - start = zzMarkedPos - 1; - yybegin(CHAR_LITERAL); - } - case 22: - break; - case 20: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.COMMENT_DOCUMENTATION); - } - case 23: - break; - case 19: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 24: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 25: - break; - case 21: { - start = zzMarkedPos - 4; - yybegin(CD_COMMENT); - } - case 26: - break; - case 3: { - addToken(Token.WHITESPACE); - } - case 27: - break; - case 10: { - addToken(start, zzStartRead, Token.LITERAL_CHAR); - yybegin(YYINITIAL); + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 28: - break; - case 4: { - addToken(Token.SEPARATOR); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 29: - break; - case 16: { - addToken(Token.VARIABLE); - } - case 30: - break; - case 1: { - addToken(Token.IDENTIFIER); - } - case 31: - break; - case 8: { - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - yybegin(YYINITIAL); - } - case 32: - break; - case 14: { - addToken(Token.FUNCTION); - } - case 33: - break; - case 15: { - addToken(Token.DATA_TYPE); - } - case 34: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 35: - break; - case 17: { - start = zzMarkedPos - 2; - yybegin(C_STYLE_COMMENT); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 48: break; + case 2: + { /*System.out.println("yyinitial: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 49: break; + case 25: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 50: break; + case 16: + { addToken(highlightingLess ? Token.RESERVED_WORD : Token.IDENTIFIER); + } + case 51: break; + case 42: + { // This must be before {CSS_Value} since "//" is a valid CSS value + if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 52: break; + case 9: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 53: break; + case 29: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 54: break; + case 32: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 55: break; + case 37: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 56: break; + case 34: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; + } + case 57: break; + case 31: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 58: break; + case 43: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 59: break; + case 12: + { addToken(highlightingLess ? Token.SEPARATOR : Token.IDENTIFIER); + } + case 60: break; + case 10: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 61: break; + case 17: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 62: break; + case 5: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 63: break; + case 23: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 64: break; + case 28: + { /* Skip escaped chars. */ + } + case 65: break; + case 46: + { addToken(Token.REGEX); + } + case 66: break; + case 36: + { addToken(highlightingLess ? Token.ANNOTATION : Token.VARIABLE); + } + case 67: break; + case 3: + { addToken(highlightingLess ? Token.LITERAL_NUMBER_DECIMAL_INT : Token.IDENTIFIER); + } + case 68: break; + case 20: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 69: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 70: break; + case 19: + { addToken(Token.SEPARATOR); yybegin(YYINITIAL); + } + case 71: break; + case 47: + { addToken(Token.PREPROCESSOR); + } + case 72: break; + case 4: + { addToken(Token.DATA_TYPE); + } + case 73: break; + case 35: + { addToken(highlightingLess ? Token.VARIABLE : Token.REGEX); + } + case 74: break; + case 24: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 75: break; + case 18: + { addToken(Token.SEPARATOR); /* helps with auto-closing curlies when editing CSS */ + } + case 76: break; + case 22: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 77: break; + case 30: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 78: break; + case 41: + { if (highlightingLess) { + // Unfortunately, as we're sharing the CSS and Less + // syntax highlighting, we do not color nested selectors + // properly. For uniformity, color this the same as + // CSS_Property + addToken(Token.RESERVED_WORD); + } + else { + addToken(Token.IDENTIFIER); + } + } + case 79: break; + case 33: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 80: break; + case 26: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 81: break; + case 40: + { if (highlightingLess) { + cssPrevState = zzLexicalState; + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 82: break; + case 39: + { addToken(highlightingLess ? Token.VARIABLE : Token.IDENTIFIER); + } + case 83: break; + case 14: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 84: break; + case 15: + { addToken(Token.RESERVED_WORD); + } + case 85: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 86: break; + case 11: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 87: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 88: break; + case 13: + { addNullToken(); return firstToken; + } + case 89: break; + case 38: + { if (highlightingLess) { + start = zzMarkedPos-2; yybegin(LESS_EOL_COMMENT); + } + else { // Highlight the "//" as an identifier and continue on + int temp = zzStartRead + 2; + addToken(zzStartRead, zzStartRead + 1, Token.IDENTIFIER); + zzStartRead = temp; + } + } + case 90: break; + case 8: + { addToken(Token.OPERATOR); + } + case 91: break; + case 21: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 92: break; + case 45: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 93: break; + case 27: + { + } + case 94: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } - case 36: - break; - case 5: { - start = zzMarkedPos - 1; - yybegin(STRING); + case 341: break; + case LESS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + switch (cssPrevState) { + case CSS_PROPERTY: + addEndToken(INTERNAL_CSS_PROPERTY); + break; + case CSS_VALUE: + addEndToken(INTERNAL_CSS_VALUE); + break; + default: // Should be YYINITIAL + addNullToken(); + break; + } + return firstToken; } - case 37: - break; - case 18: { - addToken(Token.OPERATOR); + case 342: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 38: - break; - case 2: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + case 343: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } - case 39: - break; - case 7: { + case 344: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; } - case 40: - break; - case 13: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 345: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } - case 41: - break; - case 9: { - addToken(start, zzStartRead - 1, Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; + case 346: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } - case 42: - break; + case 347: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case CD_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 84: - break; - case STRING: { - addToken(start, zzStartRead - 1, Token.ERROR_STRING_DOUBLE); - return firstToken; - } - case 85: - break; - case CHAR_LITERAL: { - addToken(start, zzStartRead - 1, Token.ERROR_CHAR); - return firstToken; - } - case 86: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 87: - break; - case C_STYLE_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 88: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex old mode 100644 new mode 100755 index 14cb8fd19..821d6e3e8 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.flex @@ -3,23 +3,9 @@ * * CSharpTokenMaker.java - An object that can take a chunk of text and return * a linked list of tokens representing it in the C# programming language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -50,7 +36,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
              - *
            • The generated CSharpTokenMaker.java file will contain two + *
            • The generated CSharpTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -131,6 +117,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -138,13 +125,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -188,7 +172,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -199,9 +183,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -216,7 +199,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java old mode 100644 new mode 100755 index e24ef3e15..c51d9a2b7 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CSharpTokenMaker.java @@ -5,23 +5,9 @@ * * CSharpTokenMaker.java - An object that can take a chunk of text and return * a linked list of tokens representing it in the C# programming language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -30,1635 +16,1585 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * A lexer for the C# programming language. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

              - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

              - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * * If you wish to regenerate this file yourself, keep in mind the following: *

                - *
              • The generated CSharpTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
              • - *
              • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
              • - *
              • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
              • + *
              • The generated CSharpTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • *
              - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class CSharpTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int VERBATIMSTRING = 3; - public static final int DOCUMENTCOMMENT = 2; - public static final int YYINITIAL = 0; - public static final int DELIMITEDCOMMENT = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\2\1\1\1\0\2\15\22\0\1\2\1\45\1\41\1\16" + - "\1\66\1\45\1\46\1\37\2\65\1\4\1\32\1\56\1\12\1\36" + - "\1\3\1\30\11\11\1\44\1\56\1\53\1\52\1\54\1\51\1\14" + - "\3\27\1\35\1\33\1\35\5\10\1\26\1\34\7\10\1\7\2\10" + - "\1\31\2\10\1\65\1\5\1\65\1\50\1\13\1\0\1\23\1\42" + - "\1\71\1\57\1\21\1\22\1\64\1\67\1\60\1\75\1\72\1\24" + - "\1\73\1\61\1\62\1\70\1\10\1\20\1\25\1\17\1\6\1\40" + - "\1\63\1\43\1\74\1\76\1\55\1\47\1\55\1\51\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\2\0\2\1\1\2\1\3\1\4\2\5\2\6\1\7" + - "\1\5\3\2\7\6\1\7\1\5\1\2\1\10\1\6" + - "\1\11\1\6\5\5\1\12\11\6\1\1\1\13\5\1" + - "\1\14\1\1\1\15\3\1\1\16\1\17\1\0\1\20" + - "\1\21\5\6\1\22\1\7\1\22\1\23\1\7\1\0" + - "\1\24\7\2\14\6\1\25\10\6\1\22\1\23\1\26" + - "\1\10\1\27\2\6\2\11\1\30\4\6\2\25\21\6" + - "\1\31\7\0\1\32\2\0\1\1\7\0\1\20\1\33" + - "\5\6\1\7\1\23\1\0\7\2\1\34\1\2\17\6" + - "\1\25\10\6\1\35\1\10\1\36\2\10\1\26\1\10" + - "\3\6\1\11\1\37\3\11\7\6\1\40\20\6\20\0" + - "\1\6\1\40\2\6\6\2\1\41\12\6\2\35\2\10" + - "\1\26\2\6\2\11\16\6\1\0\1\42\2\0\1\43" + - "\7\0\3\2\10\6\1\35\2\10\1\26\1\6\2\11" + - "\10\6\7\0\2\2\3\6\2\10\1\26\1\11\5\6" + - "\2\0\1\2\3\6\1\0\1\6"; - - private static int[] zzUnpackAction() { - int[] result = new int[364]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9" + - "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u013b\0\u0372" + - "\0\u03b1\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a" + - "\0\u05a9\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u013b\0\u0723" + - "\0\u0762\0\u07a1\0\u07e0\0\u013b\0\u013b\0\u081f\0\u085e\0\u089d" + - "\0\u08dc\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u013b\0\u0a56" + - "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u013b\0\u0b91\0\u0bd0\0\u0c0f" + - "\0\u0c4e\0\u0c8d\0\u013b\0\u0ccc\0\u0d0b\0\u0d4a\0\u013b\0\u0d89" + - "\0\u0dc8\0\u0e07\0\u0e46\0\u0e85\0\u0ec4\0\u0f03\0\u0f42\0\u0ec4" + - "\0\u0f81\0\u05e8\0\u013b\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc" + - "\0\u10fb\0\u113a\0\u1179\0\u11b8\0\u11f7\0\u1236\0\u1275\0\u12b4" + - "\0\u12f3\0\u1332\0\u1371\0\u13b0\0\u13ef\0\u142e\0\u0276\0\u146d" + - "\0\u14ac\0\u14eb\0\u152a\0\u1569\0\u15a8\0\u15e7\0\u1626\0\u1665" + - "\0\u16a4\0\u16e3\0\u1722\0\u013b\0\u1761\0\u17a0\0\u17df\0\u181e" + - "\0\u013b\0\u185d\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7" + - "\0\u1a16\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\u1b90\0\u1bcf" + - "\0\u1c0e\0\u1c4d\0\u1c8c\0\u1ccb\0\u1d0a\0\u1d49\0\u1d88\0\u1dc7" + - "\0\u013b\0\u1e06\0\u1e45\0\u1e84\0\u1ec3\0\u1f02\0\u1f41\0\u0bd0" + - "\0\u013b\0\u1f80\0\u1fbf\0\u013b\0\u1ffe\0\u203d\0\u207c\0\u20bb" + - "\0\u20fa\0\u2139\0\u2178\0\u21b7\0\u013b\0\u21f6\0\u2235\0\u2274" + - "\0\u22b3\0\u22f2\0\u0ec4\0\u2331\0\u2370\0\u23af\0\u23ee\0\u242d" + - "\0\u246c\0\u24ab\0\u24ea\0\u2529\0\u2568\0\u25a7\0\u25e6\0\u2625" + - "\0\u2664\0\u26a3\0\u26e2\0\u2721\0\u2760\0\u279f\0\u27de\0\u281d" + - "\0\u285c\0\u289b\0\u28da\0\u2919\0\u2958\0\u2997\0\u29d6\0\u2a15" + - "\0\u2a54\0\u2a93\0\u2ad2\0\u2b11\0\u2b50\0\u2b8f\0\u2bce\0\u2c0d" + - "\0\u013b\0\u2c4c\0\u2c8b\0\u2cca\0\u2d09\0\u2d48\0\u2d87\0\u2dc6" + - "\0\u2e05\0\u013b\0\u2e44\0\u2e83\0\u2ec2\0\u2f01\0\u2f40\0\u2f7f" + - "\0\u2fbe\0\u2ffd\0\u303c\0\u307b\0\u30ba\0\u30f9\0\u3138\0\u3177" + - "\0\u31b6\0\u31f5\0\u3234\0\u3273\0\u32b2\0\u32f1\0\u3330\0\u336f" + - "\0\u33ae\0\u33ed\0\u342c\0\u346b\0\u34aa\0\u34e9\0\u3528\0\u3567" + - "\0\u35a6\0\u35e5\0\u3624\0\u3663\0\u36a2\0\u36e1\0\u3720\0\u375f" + - "\0\u379e\0\u37dd\0\u381c\0\u385b\0\u389a\0\u38d9\0\u0276\0\u3918" + - "\0\u3957\0\u3996\0\u39d5\0\u3a14\0\u3a53\0\u3a92\0\u3ad1\0\u0276" + - "\0\u3b10\0\u3b4f\0\u3b8e\0\u3bcd\0\u3c0c\0\u3c4b\0\u3c8a\0\u3cc9" + - "\0\u3d08\0\u3d47\0\u3d86\0\u3dc5\0\u3e04\0\u3e43\0\u3e82\0\u3ec1" + - "\0\u3f00\0\u3f3f\0\u3f7e\0\u3fbd\0\u3ffc\0\u403b\0\u407a\0\u40b9" + - "\0\u40f8\0\u4137\0\u4176\0\u41b5\0\u41f4\0\u4233\0\u4272\0\u42b1" + - "\0\u42f0\0\u432f\0\u436e\0\u43ad\0\u43ec\0\u442b\0\u446a\0\u44a9" + - "\0\u44e8\0\u4527\0\u4566\0\u45a5\0\u45e4\0\u4623\0\u4662\0\u46a1" + - "\0\u46e0\0\u471f\0\u475e\0\u479d\0\u47dc\0\u481b\0\u485a\0\u4899" + - "\0\u0ec4\0\u48d8\0\u4917\0\u4956\0\u4995\0\u49d4\0\u4a13\0\u4a52" + - "\0\u4a91\0\u4ad0\0\u4b0f\0\u4b4e\0\u4b8d\0\u4bcc\0\u4c0b\0\u4c4a" + - "\0\u436e\0\u4c89\0\u442b\0\u4cc8\0\u4d07\0\u4d46\0\u4d85\0\u4dc4" + - "\0\u4e03\0\u4e42\0\u4e81\0\u4ec0\0\u4eff\0\u4f3e\0\u4f7d\0\u4fbc" + - "\0\u4ffb\0\u503a\0\u5079\0\u50b8\0\u50f7\0\u5136\0\u5175\0\u51b4" + - "\0\u51f3\0\u5232\0\u5271\0\u52b0"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[364]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int VERBATIMSTRING = 3; + public static final int DOCUMENTCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int DELIMITEDCOMMENT = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\1\0\2\15\22\0\1\2\1\45\1\41\1\16"+ + "\1\66\1\45\1\46\1\37\2\65\1\4\1\32\1\56\1\12\1\36"+ + "\1\3\1\30\11\11\1\44\1\56\1\53\1\52\1\54\1\51\1\14"+ + "\3\27\1\35\1\33\1\35\5\10\1\26\1\34\7\10\1\7\2\10"+ + "\1\31\2\10\1\65\1\5\1\65\1\50\1\13\1\0\1\23\1\42"+ + "\1\71\1\57\1\21\1\22\1\64\1\67\1\60\1\75\1\72\1\24"+ + "\1\73\1\61\1\62\1\70\1\10\1\20\1\25\1\17\1\6\1\40"+ + "\1\63\1\43\1\74\1\76\1\55\1\47\1\55\1\51\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\2\1\1\2\1\3\1\4\2\5\2\6\1\7"+ + "\1\5\3\2\7\6\1\7\1\5\1\2\1\10\1\6"+ + "\1\11\1\6\5\5\1\12\11\6\1\1\1\13\5\1"+ + "\1\14\1\1\1\15\3\1\1\16\1\17\1\0\1\20"+ + "\1\21\5\6\1\22\1\7\1\22\1\23\1\7\1\0"+ + "\1\24\7\2\14\6\1\25\10\6\1\22\1\23\1\26"+ + "\1\10\1\27\2\6\2\11\1\30\4\6\2\25\21\6"+ + "\1\31\7\0\1\32\2\0\1\1\7\0\1\20\1\33"+ + "\5\6\1\7\1\23\1\0\7\2\1\34\1\2\17\6"+ + "\1\25\10\6\1\35\1\10\1\36\2\10\1\26\1\10"+ + "\3\6\1\11\1\37\3\11\7\6\1\40\20\6\20\0"+ + "\1\6\1\40\2\6\6\2\1\41\12\6\2\35\2\10"+ + "\1\26\2\6\2\11\16\6\1\0\1\42\2\0\1\43"+ + "\7\0\3\2\10\6\1\35\2\10\1\26\1\6\2\11"+ + "\10\6\7\0\2\2\3\6\2\10\1\26\1\11\5\6"+ + "\2\0\1\2\3\6\1\0\1\6"; + + private static int [] zzUnpackAction() { + int [] result = new int[364]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\77\0\176\0\275\0\374\0\u013b\0\u017a\0\u01b9"+ + "\0\u01f8\0\u0237\0\u0276\0\u02b5\0\u02f4\0\u0333\0\u013b\0\u0372"+ + "\0\u03b1\0\u03f0\0\u042f\0\u046e\0\u04ad\0\u04ec\0\u052b\0\u056a"+ + "\0\u05a9\0\u05e8\0\u0627\0\u0666\0\u06a5\0\u06e4\0\u013b\0\u0723"+ + "\0\u0762\0\u07a1\0\u07e0\0\u013b\0\u013b\0\u081f\0\u085e\0\u089d"+ + "\0\u08dc\0\u091b\0\u095a\0\u0999\0\u09d8\0\u0a17\0\u013b\0\u0a56"+ + "\0\u0a95\0\u0ad4\0\u0b13\0\u0b52\0\u013b\0\u0b91\0\u0bd0\0\u0c0f"+ + "\0\u0c4e\0\u0c8d\0\u013b\0\u0ccc\0\u0d0b\0\u0d4a\0\u013b\0\u0d89"+ + "\0\u0dc8\0\u0e07\0\u0e46\0\u0e85\0\u0ec4\0\u0f03\0\u0f42\0\u0ec4"+ + "\0\u0f81\0\u05e8\0\u013b\0\u0fc0\0\u0fff\0\u103e\0\u107d\0\u10bc"+ + "\0\u10fb\0\u113a\0\u1179\0\u11b8\0\u11f7\0\u1236\0\u1275\0\u12b4"+ + "\0\u12f3\0\u1332\0\u1371\0\u13b0\0\u13ef\0\u142e\0\u0276\0\u146d"+ + "\0\u14ac\0\u14eb\0\u152a\0\u1569\0\u15a8\0\u15e7\0\u1626\0\u1665"+ + "\0\u16a4\0\u16e3\0\u1722\0\u013b\0\u1761\0\u17a0\0\u17df\0\u181e"+ + "\0\u013b\0\u185d\0\u189c\0\u18db\0\u191a\0\u1959\0\u1998\0\u19d7"+ + "\0\u1a16\0\u1a55\0\u1a94\0\u1ad3\0\u1b12\0\u1b51\0\u1b90\0\u1bcf"+ + "\0\u1c0e\0\u1c4d\0\u1c8c\0\u1ccb\0\u1d0a\0\u1d49\0\u1d88\0\u1dc7"+ + "\0\u013b\0\u1e06\0\u1e45\0\u1e84\0\u1ec3\0\u1f02\0\u1f41\0\u0bd0"+ + "\0\u013b\0\u1f80\0\u1fbf\0\u013b\0\u1ffe\0\u203d\0\u207c\0\u20bb"+ + "\0\u20fa\0\u2139\0\u2178\0\u21b7\0\u013b\0\u21f6\0\u2235\0\u2274"+ + "\0\u22b3\0\u22f2\0\u0ec4\0\u2331\0\u2370\0\u23af\0\u23ee\0\u242d"+ + "\0\u246c\0\u24ab\0\u24ea\0\u2529\0\u2568\0\u25a7\0\u25e6\0\u2625"+ + "\0\u2664\0\u26a3\0\u26e2\0\u2721\0\u2760\0\u279f\0\u27de\0\u281d"+ + "\0\u285c\0\u289b\0\u28da\0\u2919\0\u2958\0\u2997\0\u29d6\0\u2a15"+ + "\0\u2a54\0\u2a93\0\u2ad2\0\u2b11\0\u2b50\0\u2b8f\0\u2bce\0\u2c0d"+ + "\0\u013b\0\u2c4c\0\u2c8b\0\u2cca\0\u2d09\0\u2d48\0\u2d87\0\u2dc6"+ + "\0\u2e05\0\u013b\0\u2e44\0\u2e83\0\u2ec2\0\u2f01\0\u2f40\0\u2f7f"+ + "\0\u2fbe\0\u2ffd\0\u303c\0\u307b\0\u30ba\0\u30f9\0\u3138\0\u3177"+ + "\0\u31b6\0\u31f5\0\u3234\0\u3273\0\u32b2\0\u32f1\0\u3330\0\u336f"+ + "\0\u33ae\0\u33ed\0\u342c\0\u346b\0\u34aa\0\u34e9\0\u3528\0\u3567"+ + "\0\u35a6\0\u35e5\0\u3624\0\u3663\0\u36a2\0\u36e1\0\u3720\0\u375f"+ + "\0\u379e\0\u37dd\0\u381c\0\u385b\0\u389a\0\u38d9\0\u0276\0\u3918"+ + "\0\u3957\0\u3996\0\u39d5\0\u3a14\0\u3a53\0\u3a92\0\u3ad1\0\u0276"+ + "\0\u3b10\0\u3b4f\0\u3b8e\0\u3bcd\0\u3c0c\0\u3c4b\0\u3c8a\0\u3cc9"+ + "\0\u3d08\0\u3d47\0\u3d86\0\u3dc5\0\u3e04\0\u3e43\0\u3e82\0\u3ec1"+ + "\0\u3f00\0\u3f3f\0\u3f7e\0\u3fbd\0\u3ffc\0\u403b\0\u407a\0\u40b9"+ + "\0\u40f8\0\u4137\0\u4176\0\u41b5\0\u41f4\0\u4233\0\u4272\0\u42b1"+ + "\0\u42f0\0\u432f\0\u436e\0\u43ad\0\u43ec\0\u442b\0\u446a\0\u44a9"+ + "\0\u44e8\0\u4527\0\u4566\0\u45a5\0\u45e4\0\u4623\0\u4662\0\u46a1"+ + "\0\u46e0\0\u471f\0\u475e\0\u479d\0\u47dc\0\u481b\0\u485a\0\u4899"+ + "\0\u0ec4\0\u48d8\0\u4917\0\u4956\0\u4995\0\u49d4\0\u4a13\0\u4a52"+ + "\0\u4a91\0\u4ad0\0\u4b0f\0\u4b4e\0\u4b8d\0\u4bcc\0\u4c0b\0\u4c4a"+ + "\0\u436e\0\u4c89\0\u442b\0\u4cc8\0\u4d07\0\u4d46\0\u4d85\0\u4dc4"+ + "\0\u4e03\0\u4e42\0\u4e81\0\u4ec0\0\u4eff\0\u4f3e\0\u4f7d\0\u4fbc"+ + "\0\u4ffb\0\u503a\0\u5079\0\u50b8\0\u50f7\0\u5136\0\u5175\0\u51b4"+ + "\0\u51f3\0\u5232\0\u5271\0\u52b0"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[364]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\2\13" + - "\1\14\1\15\1\13\1\16\1\17\1\20\1\21\1\22" + - "\1\23\1\24\1\25\1\26\1\27\2\13\1\30\1\13" + - "\1\31\3\13\1\32\1\33\1\34\1\35\1\36\1\13" + - "\1\37\1\11\1\40\1\41\1\11\1\37\1\11\1\42" + - "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52" + - "\1\53\1\44\1\5\1\13\1\54\1\55\5\13\1\56" + - "\1\57\2\56\1\60\15\56\1\61\40\56\1\62\3\56" + - "\1\63\7\56\1\64\1\65\20\64\1\66\30\64\1\67" + - "\7\64\1\70\3\64\1\71\7\64\1\72\1\73\37\72" + - "\1\74\35\72\1\5\4\0\5\5\1\0\2\5\1\0" + - "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\6\5\1\0\11\5\101\0\1\7\13\0\1\75\63\0" + - "\1\76\1\77\45\0\1\37\76\0\1\37\24\0\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\5\13\1\101\1\102\4\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\1\13\1\103\1\104\3\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\105" + - "\4\0\1\105\2\106\1\105\1\14\1\0\2\105\1\0" + - "\3\105\1\107\1\110\1\105\1\111\1\105\1\111\1\105" + - "\1\14\1\105\1\0\1\107\2\110\1\112\1\0\1\105" + - "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110" + - "\3\105\12\0\1\37\37\0\1\37\1\0\1\37\22\0" + - "\1\5\4\0\1\5\3\13\1\5\1\0\1\13\1\5" + - "\1\0\1\5\11\13\1\5\1\13\1\0\3\13\2\0" + - "\1\13\1\113\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\1\0\1\75\2\0\1\5\1\114\3\5\1\0" + - "\2\5\1\0\2\5\1\115\1\116\2\5\1\117\5\5" + - "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\1\120" + - "\1\121\2\5\1\122\1\5\1\0\12\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\123" + - "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\1\124\4\13\1\125\2\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\2\13\1\126\10\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13" + - "\1\127\5\13\1\0\3\13\2\0\1\130\1\0\1\13" + - "\1\131\13\0\2\13\1\132\3\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\4\13\1\133\1\134\5\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\1\13\1\135\1\13\1\136" + - "\2\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\6\13\1\137\4\13" + - "\1\0\3\13\2\0\1\13\1\0\1\140\1\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\3\13\1\141\2\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\142\1\13\1\143\10\13" + - "\1\0\3\13\2\0\1\13\1\0\1\144\1\13\13\0" + - "\1\13\1\145\2\13\1\146\1\13\1\0\1\5\1\147" + - "\7\13\1\105\4\0\1\105\2\106\1\105\1\14\1\0" + - "\2\105\1\0\3\105\1\107\1\110\1\105\1\111\1\105" + - "\1\111\1\105\1\14\1\150\1\0\1\107\2\110\1\112" + - "\1\0\1\105\1\0\1\105\1\150\13\0\1\110\5\105" + - "\1\0\5\105\1\110\3\105\32\0\1\37\17\0\1\37" + - "\35\0\1\151\16\0\1\151\46\0\1\152\1\0\3\152" + - "\1\153\31\152\1\154\37\152\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\1\13\1\155\1\13" + - "\1\156\2\13\1\0\1\5\10\13\1\35\1\157\3\35" + - "\1\160\33\35\1\161\35\35\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\1\13\1\162\2\13" + - "\1\127\6\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\3\13\1\163\2\13\1\0\1\5\5\13\1\164" + - "\2\13\46\0\1\37\3\0\1\37\73\0\1\37\2\0" + - "\1\37\76\0\1\37\1\11\75\0\1\37\1\0\1\11" + - "\22\0\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\2\13\1\165\10\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\3\13\1\166\2\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\3\13\1\137\2\13\1\137\4\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13" + - "\1\167\3\13\1\0\1\5\4\13\1\170\3\13\1\5" + - "\4\0\1\5\1\171\3\13\1\100\1\13\1\5\1\0" + - "\1\5\2\13\1\172\1\13\1\173\6\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\1\174\3\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\175" + - "\1\0\1\176\1\13\13\0\6\13\1\0\1\5\1\13" + - "\1\177\6\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\1\200\7\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\3\13\1\201\2\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\1\202\3\13\1\100\1\13\1\5\1\0" + - "\1\5\1\13\1\203\2\13\1\204\6\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\4\13\1\205\1\206\5\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\3\13\1\207\2\13" + - "\1\0\1\5\1\210\7\13\1\56\1\0\2\56\1\0" + - "\15\56\1\0\40\56\1\0\3\56\1\0\7\56\3\0" + - "\1\211\112\0\1\212\40\0\1\213\101\0\1\214\32\0" + - "\1\215\57\0\1\64\1\0\20\64\1\0\30\64\1\0" + - "\7\64\1\0\3\64\1\0\7\64\17\0\1\216\40\0" + - "\1\217\16\0\54\220\1\221\22\220\63\0\1\222\32\0" + - "\1\223\57\0\1\72\1\0\37\72\1\0\35\72\41\0" + - "\1\224\37\0\1\75\3\0\1\225\11\0\1\226\1\227" + - "\2\0\1\230\32\0\1\231\1\232\2\0\1\233\13\0" + - "\3\234\1\235\73\234\6\0\6\100\3\0\13\100\1\0" + - "\3\100\2\0\1\100\1\0\2\100\13\0\6\100\2\0" + - "\10\100\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\3\13\1\236\2\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\1\13\1\237\4\13\1\0\1\5\1\147\7\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\2\13\1\240\3\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\6\13\1\241\4\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\2\13\1\242\5\13" + - "\1\105\4\0\5\105\1\0\2\105\1\0\14\105\1\0" + - "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0" + - "\12\105\4\0\5\105\1\0\2\105\1\0\6\105\1\243" + - "\1\105\1\243\3\105\1\0\3\105\2\0\1\105\1\0" + - "\2\105\13\0\6\105\1\0\12\105\4\0\4\105\1\244" + - "\1\245\2\105\1\0\12\105\1\244\1\105\1\245\3\105" + - "\2\0\1\105\1\0\2\105\13\0\6\105\1\0\12\105" + - "\4\0\1\105\2\243\2\105\1\0\2\105\1\0\14\105" + - "\1\0\3\105\2\0\1\105\1\0\2\105\13\0\6\105" + - "\1\0\11\105\1\5\4\0\5\5\1\0\2\5\1\0" + - "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\2\5\1\246\3\5\1\0\12\5\4\0\5\5\1\0" + - "\2\5\1\0\3\5\1\247\10\5\1\0\3\5\2\0" + - "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0" + - "\5\5\1\0\2\5\1\0\2\5\1\250\3\5\1\251" + - "\5\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\2\5\1\252\3\5\1\0\12\5\4\0\5\5\1\0" + - "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0" + - "\2\5\13\0\1\5\1\253\4\5\1\0\12\5\4\0" + - "\5\5\1\0\2\5\1\0\3\5\1\254\10\5\1\0" + - "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0" + - "\12\5\4\0\5\5\1\0\2\5\1\0\4\5\1\255" + - "\7\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0" + - "\5\5\1\256\6\5\1\0\3\5\2\0\1\5\1\0" + - "\2\5\13\0\6\5\1\0\12\5\4\0\1\5\1\257" + - "\3\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\5\13\1\137\2\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\1\13\1\260\11\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13" + - "\1\261\4\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\1\13\1\262\6\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\1\263\2\13\1\137" + - "\1\264\6\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\6\13\1\265" + - "\4\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\2\13\1\266\10\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\267\12\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\1\13\1\270\6\13\1\5\4\0\1\5\1\271\3\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\5\13\1\272\5\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\3\13\1\273\2\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\13\13\1\0\3\13\2\0\1\13\1\0\1\13\1\274" + - "\13\0\2\13\1\275\3\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\1\13\1\276\11\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\6\13" + - "\1\277\4\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\300" + - "\3\13\1\0\1\5\2\13\1\301\5\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13" + - "\1\302\2\13\1\303\6\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\4\13\1\304\6\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\5\13\1\164\2\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\7\13\1\262\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\1\13\1\305\4\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\3\13\1\306\2\13\1\0\1\5" + - "\10\13\1\105\4\0\4\105\1\307\1\0\2\105\1\0" + - "\3\105\3\307\3\105\2\307\1\105\1\0\1\307\1\105" + - "\1\307\2\0\1\105\1\0\1\307\1\105\13\0\1\307" + - "\5\105\1\0\3\105\1\307\6\105\4\0\4\105\1\151" + - "\1\0\2\105\1\0\3\105\1\107\1\110\5\105\1\151" + - "\1\105\1\0\1\107\2\110\2\0\1\105\1\0\2\105" + - "\13\0\1\110\5\105\1\0\5\105\1\110\3\105\1\310" + - "\1\0\35\310\1\311\40\310\1\0\3\310\1\152\1\312" + - "\1\313\7\310\2\152\1\310\2\152\4\310\1\152\6\310" + - "\1\314\3\152\1\315\15\310\1\152\15\310\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13" + - "\1\316\11\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\317" + - "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\1\13\1\320\4\13\1\0\1\5\10\13\5\157\1\321" + - "\33\157\1\322\36\157\1\0\3\157\1\35\1\323\1\324" + - "\7\157\2\35\1\157\2\35\4\157\1\35\6\157\4\35" + - "\1\325\15\157\1\35\15\157\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\2\13\1\326\10\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\3\13\1\327\2\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\1\330\12\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\3\13\1\331\1\13\1\332\5\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\2\13\1\333\5\13\1\5\4\0\1\5\1\334\3\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\1\335\12\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\1\13\1\270\6\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13" + - "\1\336\5\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\4\13\1\137" + - "\1\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\4\13\1\337\3\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\137\12\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\2\13\1\340\10\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\6\13\1\341\1\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\2\13\1\342\10\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13" + - "\1\343\4\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\1\344\12\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\1\345\1\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\1\13\1\346\1\13\1\347\2\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\1\13\1\350\11\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\1\351\5\13\1\265\4\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\4\13\1\352\6\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\2\13\1\353\3\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\2\13\1\354\1\13\1\355\6\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\70\0\1\356\32\0\1\357\135\0\1\360\32\0\1\361" + - "\147\0\1\362\32\0\1\363\135\0\1\364\32\0\1\365" + - "\140\0\1\366\36\0\1\367\75\0\1\370\3\0\1\371" + - "\34\0\1\372\75\0\1\373\37\0\1\374\77\0\1\255" + - "\77\0\1\375\53\0\1\234\1\0\75\234\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13" + - "\1\300\3\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\376" + - "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\1\377\12\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\4\13\1\u0100\6\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\1\u0101\7\13\1\105" + - "\4\0\4\105\1\244\1\0\2\105\1\0\4\105\1\110" + - "\5\105\1\244\1\105\1\0\1\105\2\110\2\0\1\105" + - "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110" + - "\3\105\11\0\1\244\16\0\1\244\46\0\1\5\4\0" + - "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0" + - "\1\5\1\0\2\5\13\0\1\u0102\5\5\1\0\12\5" + - "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5" + - "\2\0\1\5\1\0\2\5\13\0\5\5\1\u0103\1\0" + - "\12\5\4\0\5\5\1\0\2\5\1\0\2\5\1\u0104" + - "\11\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0" + - "\7\5\1\u0105\4\5\1\0\3\5\2\0\1\5\1\0" + - "\2\5\13\0\1\5\1\121\4\5\1\0\12\5\4\0" + - "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0" + - "\1\5\1\0\2\5\13\0\1\u0106\5\5\1\0\12\5" + - "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5" + - "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0105\3\5" + - "\1\0\12\5\4\0\5\5\1\0\2\5\1\0\4\5" + - "\1\117\7\5\1\0\3\5\2\0\1\5\1\0\2\5" + - "\13\0\6\5\1\0\11\5\1\255\1\0\75\255\1\5" + - "\4\0\5\5\1\0\2\5\1\0\2\5\1\u0107\11\5" + - "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\6\5" + - "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\2\13\1\u0108\10\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\3\13\1\172\2\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\6\13\1\137\4\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13" + - "\1\u0109\10\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\1\u010a\3\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\1\u010b\5\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\2\13\1\137\10\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\2\13\1\174\3\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\2\13\1\u010a\10\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13" + - "\1\u010c\5\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\4\13\1\137\3\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\6\13\1\257\4\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\4\13\1\240\6\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\2\13\1\320\10\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\4\13\1\u010d\6\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\2\13\1\u010e\10\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\1\u010f\12\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\5\13\1\377" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13" + - "\1\137\4\13\1\5\4\0\1\5\1\u0110\3\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\1\13\1\237\4\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\1\u0111\12\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13" + - "\1\u0112\5\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\5\13\1\274\5\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\1\351\12\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\1\13\1\240\11\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\105\4\0" + - "\1\105\2\u0113\1\105\1\307\1\0\2\105\1\0\3\105" + - "\3\307\1\u0114\1\105\1\u0114\2\307\1\105\1\0\1\307" + - "\1\105\1\307\2\0\1\105\1\0\1\307\1\105\13\0" + - "\1\307\5\105\1\0\3\105\1\307\5\105\1\310\1\0" + - "\35\310\1\154\40\310\1\0\7\310\1\u0115\7\310\3\u0115" + - "\3\310\2\u0115\2\310\1\u0115\1\310\1\u0115\1\310\1\154" + - "\2\310\1\u0115\14\310\1\u0115\11\310\1\u0115\6\310\1\0" + - "\7\310\1\u0116\7\310\3\u0116\3\310\2\u0116\2\310\1\u0116" + - "\1\310\1\u0116\1\310\1\154\2\310\1\u0116\14\310\1\u0116" + - "\11\310\1\u0116\5\310\37\0\1\311\37\0\1\310\1\0" + - "\7\310\1\u0117\7\310\3\u0117\3\310\2\u0117\2\310\1\u0117" + - "\1\310\1\u0117\1\310\1\154\2\310\1\u0117\14\310\1\u0117" + - "\11\310\1\u0117\5\310\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\u0118\12\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\4\13\1\u0119\6\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\1\137\5\13\1\0\1\5\10\13\1\157\1\0" + - "\102\157\1\321\3\157\1\u011a\7\157\3\u011a\3\157\2\u011a" + - "\2\157\1\u011a\1\157\1\u011a\3\157\1\322\1\u011a\14\157" + - "\1\u011a\11\157\1\u011a\12\157\1\321\3\157\1\u011b\7\157" + - "\3\u011b\3\157\2\u011b\2\157\1\u011b\1\157\1\u011b\3\157" + - "\1\322\1\u011b\14\157\1\u011b\11\157\1\u011b\12\157\1\321" + - "\3\157\1\35\7\157\3\35\3\157\2\35\2\157\1\35" + - "\1\157\1\35\3\157\1\322\1\35\14\157\1\35\11\157" + - "\1\35\5\157\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\4\13\1\301\6\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\5\13\1\377\5\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\2\13\1\377\10\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\4\13\1\u011c\6\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13" + - "\1\u011d\10\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\1\13\1\u011e" + - "\4\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\1\u011f\1\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\2\13\1\u0120\10\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\5\13\1\137\5\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\2\13\1\u0121\10\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\1\13\1\u0122\11\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13" + - "\1\u0110\10\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\u0123" + - "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\5\13\1\265\5\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\3\13\1\137\2\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\5\13\1\u0111\5\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\u0124\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\u0125" + - "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\4\13\1\u0126\6\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13" + - "\1\u0127\5\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\6\13\1\261\4\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\1\u0128\5\13\1\174\4\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\2\13\1\u0129\5\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\1\13\1\377\11\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\44\0" + - "\1\u012a\53\0\1\356\113\0\1\u012b\130\0\1\u012c\52\0" + - "\1\u012d\53\0\1\362\113\0\1\u012e\130\0\1\u012f\65\0" + - "\1\u0130\103\0\1\u0131\32\0\1\u0132\103\0\1\u0133\32\0" + - "\1\232\75\0\1\u0134\100\0\1\u0133\37\0\1\230\74\0" + - "\1\u0135\56\0\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\5\13\1\137\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\3\13\1\265\7\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\2\13\1\354\10\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\5\5\1\0\2\5\1\0\3\5\1\121\10\5\1\0" + - "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0" + - "\12\5\4\0\5\5\1\0\2\5\1\0\14\5\1\0" + - "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\u0136" + - "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0" + - "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\3\5\1\u0137\2\5\1\0\12\5\4\0\5\5\1\0" + - "\2\5\1\0\3\5\1\255\10\5\1\0\3\5\2\0" + - "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0" + - "\5\5\1\0\2\5\1\0\2\5\1\115\11\5\1\0" + - "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\121" + - "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0" + - "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0" + - "\2\5\1\u0138\3\5\1\0\12\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\3\13\1\u0139\2\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\13\1\u013a\11\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\3\13\1\u013b\2\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\1\13\1\u013c\4\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\5\13\1\u013d\5\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\4\13\1\351\6\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13" + - "\1\u013e\11\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\2\13\1\174\5\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\1\13\1\u013f\4\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13" + - "\1\u0140\4\13\1\105\4\0\5\105\1\0\2\105\1\0" + - "\6\105\1\u0141\1\105\1\u0141\3\105\1\0\3\105\2\0" + - "\1\105\1\0\2\105\13\0\6\105\1\0\12\105\4\0" + - "\1\105\2\u0141\2\105\1\0\2\105\1\0\14\105\1\0" + - "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0" + - "\11\105\1\310\1\0\7\310\1\u0142\7\310\3\u0142\3\310" + - "\2\u0142\2\310\1\u0142\1\310\1\u0142\1\310\1\154\2\310" + - "\1\u0142\14\310\1\u0142\11\310\1\u0142\6\310\1\0\7\310" + - "\1\u0143\7\310\3\u0143\3\310\2\u0143\2\310\1\u0143\1\310" + - "\1\u0143\1\310\1\154\2\310\1\u0143\14\310\1\u0143\11\310" + - "\1\u0143\6\310\1\0\7\310\1\u0144\7\310\3\u0144\3\310" + - "\2\u0144\2\310\1\u0144\1\310\1\u0144\1\310\1\311\2\310" + - "\1\u0144\14\310\1\u0144\11\310\1\u0144\5\310\1\5\4\0" + - "\1\5\1\u0145\3\13\1\100\1\13\1\5\1\0\1\5" + - "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\1\200\12\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\5\157\1\321\3\157\1\u0146\7\157\3\u0146" + - "\3\157\2\u0146\2\157\1\u0146\1\157\1\u0146\3\157\1\322" + - "\1\u0146\14\157\1\u0146\11\157\1\u0146\12\157\1\321\3\157" + - "\1\u0147\7\157\3\u0147\3\157\2\u0147\2\157\1\u0147\1\157" + - "\1\u0147\3\157\1\322\1\u0147\14\157\1\u0147\11\157\1\u0147" + - "\5\157\1\5\4\0\1\5\1\u0148\3\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\5\13\1\u0124\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\4\13\1\u0145\3\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\5\13\1\330\5\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\13\1\u0149\11\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\6\13\1\u014a\4\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\1\13\1\u014b\11\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\4\13\1\u014c\6\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\4\13\1\u014d\6\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13" + - "\1\u014e\10\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\4\13\1\261\3\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\1\137\7\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\1\13\1\u014f\4\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\3\13\1\274\4\13" + - "\3\0\1\u0150\76\0\1\u012b\1\u0151\1\0\4\u012b\3\u0151" + - "\1\0\1\u0151\13\u012b\1\u0151\3\u012b\2\u0151\1\u012b\1\0" + - "\2\u012b\3\u0151\2\0\2\u0151\3\0\1\u0151\6\u012b\1\u0151" + - "\11\u012b\25\0\1\356\16\0\1\u012a\35\0\1\u0152\76\0" + - "\1\u012e\1\u0153\1\0\4\u012e\3\u0153\1\0\1\u0153\13\u012e" + - "\1\u0153\3\u012e\2\u0153\1\u012e\1\0\2\u012e\3\u0153\2\0" + - "\2\u0153\3\0\1\u0153\6\u012e\1\u0153\11\u012e\25\0\1\362" + - "\16\0\1\u012d\53\0\1\232\135\0\1\u0154\100\0\1\u0155" + - "\35\0\1\255\75\0\1\226\37\0\1\232\77\0\1\u0156" + - "\15\0\1\5\4\0\5\5\1\0\2\5\1\0\14\5" + - "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\3\5" + - "\1\u0157\2\5\1\0\12\5\4\0\5\5\1\0\2\5" + - "\1\0\2\5\1\255\11\5\1\0\3\5\2\0\1\5" + - "\1\0\2\5\13\0\6\5\1\0\12\5\4\0\5\5" + - "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5" + - "\1\0\2\5\13\0\1\5\1\u0158\4\5\1\0\12\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\3\13\1\137\7\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13" + - "\1\137\3\13\1\0\1\5\10\13\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\u013d" + - "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\2\13\1\u0159\5\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\5\13\1\u015a\5\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\4\13\1\u0110\6\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\2\13\1\137\5\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\4\13\1\u015b\6\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\310" + - "\1\0\7\310\1\u015c\7\310\3\u015c\3\310\2\u015c\2\310" + - "\1\u015c\1\310\1\u015c\1\310\1\154\2\310\1\u015c\14\310" + - "\1\u015c\11\310\1\u015c\6\310\1\0\7\310\1\u015d\7\310" + - "\3\u015d\3\310\2\u015d\2\310\1\u015d\1\310\1\u015d\1\310" + - "\1\154\2\310\1\u015d\14\310\1\u015d\11\310\1\u015d\6\310" + - "\1\0\7\310\1\u015e\7\310\3\u015e\3\310\2\u015e\2\310" + - "\1\u015e\1\310\1\u015e\1\310\1\311\2\310\1\u015e\14\310" + - "\1\u015e\11\310\1\u015e\5\310\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\4\13\1\336\6\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13" + - "\1\0\1\5\10\13\5\157\1\321\3\157\1\325\7\157" + - "\3\325\3\157\2\325\2\157\1\325\1\157\1\325\3\157" + - "\1\322\1\325\14\157\1\325\11\157\1\325\12\157\1\321" + - "\3\157\1\u015f\7\157\3\u015f\3\157\2\u015f\2\157\1\u015f" + - "\1\157\1\u015f\3\157\1\322\1\u015f\14\157\1\u015f\11\157" + - "\1\u015f\5\157\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\5\13\1\174\5\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\3\13\1\u0160\7\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\2\13\1\u0145\3\13\1\0" + - "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\1\13\1\u0160" + - "\6\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\1\13\1\u0161\4\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\1\u0162\12\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\265" + - "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\2\13\1\u0163\5\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0" + - "\1\13\1\0\2\13\13\0\2\13\1\u0164\3\13\1\0" + - "\1\5\10\13\3\0\1\u012b\76\0\1\u012e\155\0\1\u0165" + - "\34\0\1\255\136\0\1\u0166\16\0\1\5\4\0\5\5" + - "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5" + - "\1\0\2\5\13\0\2\5\1\255\3\5\1\0\12\5" + - "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5" + - "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0167\3\5" + - "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5" + - "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\1\13\1\174\4\13\1\0\1\5\10\13" + - "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0" + - "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13" + - "\13\0\6\13\1\0\1\5\5\13\1\137\2\13\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\5\13\1\u0168\5\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\310\1\0" + - "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152" + - "\1\310\1\152\1\310\1\154\2\310\1\152\14\310\1\152" + - "\11\310\1\152\6\310\1\0\7\310\1\312\7\310\3\312" + - "\3\310\2\312\2\310\1\312\1\310\1\312\1\310\1\154" + - "\2\310\1\312\14\310\1\312\11\310\1\312\6\310\1\0" + - "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152" + - "\1\310\1\152\1\310\1\311\2\310\1\152\14\310\1\152" + - "\11\310\1\152\5\310\5\157\1\321\3\157\1\323\7\157" + - "\3\323\3\157\2\323\2\157\1\323\1\157\1\323\3\157" + - "\1\322\1\323\14\157\1\323\11\157\1\323\5\157\1\5" + - "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5" + - "\4\13\1\u0169\6\13\1\0\3\13\2\0\1\13\1\0" + - "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0" + - "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13" + - "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\265" + - "\5\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\3\13\1\u016a\2\13" + - "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\274\12\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\10\13\1\5\4\0\1\5\1\265\3\13\1\100\1\13" + - "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13" + - "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\61\0" + - "\1\255\76\0\1\u016b\15\0\1\5\4\0\5\5\1\0" + - "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0" + - "\2\5\13\0\5\5\1\255\1\0\12\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\u016c" + - "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0" + - "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13" + - "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13" + - "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5" + - "\2\13\1\265\5\13\1\5\4\0\1\5\4\13\1\100" + - "\1\13\1\5\1\0\1\5\1\13\1\137\11\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0" + - "\1\5\10\13\64\0\1\255\12\0\1\5\4\0\1\5" + - "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0" + - "\3\13\2\0\1\13\1\0\2\13\13\0\3\13\1\u013f" + - "\2\13\1\0\1\5\10\13"; - - private static int[] zzUnpackTrans() { - int[] result = new int[21231]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\2\13"+ + "\1\14\1\15\1\13\1\16\1\17\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\2\13\1\30\1\13"+ + "\1\31\3\13\1\32\1\33\1\34\1\35\1\36\1\13"+ + "\1\37\1\11\1\40\1\41\1\11\1\37\1\11\1\42"+ + "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ + "\1\53\1\44\1\5\1\13\1\54\1\55\5\13\1\56"+ + "\1\57\2\56\1\60\15\56\1\61\40\56\1\62\3\56"+ + "\1\63\7\56\1\64\1\65\20\64\1\66\30\64\1\67"+ + "\7\64\1\70\3\64\1\71\7\64\1\72\1\73\37\72"+ + "\1\74\35\72\1\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\11\5\101\0\1\7\13\0\1\75\63\0"+ + "\1\76\1\77\45\0\1\37\76\0\1\37\24\0\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\5\13\1\101\1\102\4\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\1\13\1\103\1\104\3\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\105"+ + "\4\0\1\105\2\106\1\105\1\14\1\0\2\105\1\0"+ + "\3\105\1\107\1\110\1\105\1\111\1\105\1\111\1\105"+ + "\1\14\1\105\1\0\1\107\2\110\1\112\1\0\1\105"+ + "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ + "\3\105\12\0\1\37\37\0\1\37\1\0\1\37\22\0"+ + "\1\5\4\0\1\5\3\13\1\5\1\0\1\13\1\5"+ + "\1\0\1\5\11\13\1\5\1\13\1\0\3\13\2\0"+ + "\1\13\1\113\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\1\0\1\75\2\0\1\5\1\114\3\5\1\0"+ + "\2\5\1\0\2\5\1\115\1\116\2\5\1\117\5\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\1\120"+ + "\1\121\2\5\1\122\1\5\1\0\12\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\123"+ + "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\1\124\4\13\1\125\2\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\126\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\127\5\13\1\0\3\13\2\0\1\130\1\0\1\13"+ + "\1\131\13\0\2\13\1\132\3\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\133\1\134\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\135\1\13\1\136"+ + "\2\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\6\13\1\137\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\1\140\1\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\141\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\142\1\13\1\143\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\1\144\1\13\13\0"+ + "\1\13\1\145\2\13\1\146\1\13\1\0\1\5\1\147"+ + "\7\13\1\105\4\0\1\105\2\106\1\105\1\14\1\0"+ + "\2\105\1\0\3\105\1\107\1\110\1\105\1\111\1\105"+ + "\1\111\1\105\1\14\1\150\1\0\1\107\2\110\1\112"+ + "\1\0\1\105\1\0\1\105\1\150\13\0\1\110\5\105"+ + "\1\0\5\105\1\110\3\105\32\0\1\37\17\0\1\37"+ + "\35\0\1\151\16\0\1\151\46\0\1\152\1\0\3\152"+ + "\1\153\31\152\1\154\37\152\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\1\13\1\155\1\13"+ + "\1\156\2\13\1\0\1\5\10\13\1\35\1\157\3\35"+ + "\1\160\33\35\1\161\35\35\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\13\1\162\2\13"+ + "\1\127\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\163\2\13\1\0\1\5\5\13\1\164"+ + "\2\13\46\0\1\37\3\0\1\37\73\0\1\37\2\0"+ + "\1\37\76\0\1\37\1\11\75\0\1\37\1\0\1\11"+ + "\22\0\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\165\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\166\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\3\13\1\137\2\13\1\137\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\167\3\13\1\0\1\5\4\13\1\170\3\13\1\5"+ + "\4\0\1\5\1\171\3\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\172\1\13\1\173\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\1\174\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\175"+ + "\1\0\1\176\1\13\13\0\6\13\1\0\1\5\1\13"+ + "\1\177\6\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\1\200\7\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\201\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\1\202\3\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\13\1\203\2\13\1\204\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\205\1\206\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\207\2\13"+ + "\1\0\1\5\1\210\7\13\1\56\1\0\2\56\1\0"+ + "\15\56\1\0\40\56\1\0\3\56\1\0\7\56\3\0"+ + "\1\211\112\0\1\212\40\0\1\213\101\0\1\214\32\0"+ + "\1\215\57\0\1\64\1\0\20\64\1\0\30\64\1\0"+ + "\7\64\1\0\3\64\1\0\7\64\17\0\1\216\40\0"+ + "\1\217\16\0\54\220\1\221\22\220\63\0\1\222\32\0"+ + "\1\223\57\0\1\72\1\0\37\72\1\0\35\72\41\0"+ + "\1\224\37\0\1\75\3\0\1\225\11\0\1\226\1\227"+ + "\2\0\1\230\32\0\1\231\1\232\2\0\1\233\13\0"+ + "\3\234\1\235\73\234\6\0\6\100\3\0\13\100\1\0"+ + "\3\100\2\0\1\100\1\0\2\100\13\0\6\100\2\0"+ + "\10\100\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\3\13\1\236\2\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\1\13\1\237\4\13\1\0\1\5\1\147\7\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\240\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\6\13\1\241\4\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\242\5\13"+ + "\1\105\4\0\5\105\1\0\2\105\1\0\14\105\1\0"+ + "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ + "\12\105\4\0\5\105\1\0\2\105\1\0\6\105\1\243"+ + "\1\105\1\243\3\105\1\0\3\105\2\0\1\105\1\0"+ + "\2\105\13\0\6\105\1\0\12\105\4\0\4\105\1\244"+ + "\1\245\2\105\1\0\12\105\1\244\1\105\1\245\3\105"+ + "\2\0\1\105\1\0\2\105\13\0\6\105\1\0\12\105"+ + "\4\0\1\105\2\243\2\105\1\0\2\105\1\0\14\105"+ + "\1\0\3\105\2\0\1\105\1\0\2\105\13\0\6\105"+ + "\1\0\11\105\1\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\246\3\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\3\5\1\247\10\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\2\5\1\250\3\5\1\251"+ + "\5\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\252\3\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\1\5\1\253\4\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\3\5\1\254\10\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\4\5\1\255"+ + "\7\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\5\5\1\256\6\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\6\5\1\0\12\5\4\0\1\5\1\257"+ + "\3\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\5\13\1\137\2\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\13\1\260\11\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ + "\1\261\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\1\13\1\262\6\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\263\2\13\1\137"+ + "\1\264\6\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\6\13\1\265"+ + "\4\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\2\13\1\266\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\267\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\1\13\1\270\6\13\1\5\4\0\1\5\1\271\3\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\272\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\273\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\1\13\1\274"+ + "\13\0\2\13\1\275\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\276\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\6\13"+ + "\1\277\4\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\300"+ + "\3\13\1\0\1\5\2\13\1\301\5\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\302\2\13\1\303\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\304\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\5\13\1\164\2\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\7\13\1\262\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\305\4\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\3\13\1\306\2\13\1\0\1\5"+ + "\10\13\1\105\4\0\4\105\1\307\1\0\2\105\1\0"+ + "\3\105\3\307\3\105\2\307\1\105\1\0\1\307\1\105"+ + "\1\307\2\0\1\105\1\0\1\307\1\105\13\0\1\307"+ + "\5\105\1\0\3\105\1\307\6\105\4\0\4\105\1\151"+ + "\1\0\2\105\1\0\3\105\1\107\1\110\5\105\1\151"+ + "\1\105\1\0\1\107\2\110\2\0\1\105\1\0\2\105"+ + "\13\0\1\110\5\105\1\0\5\105\1\110\3\105\1\310"+ + "\1\0\35\310\1\311\40\310\1\0\3\310\1\152\1\312"+ + "\1\313\7\310\2\152\1\310\2\152\4\310\1\152\6\310"+ + "\1\314\3\152\1\315\15\310\1\152\15\310\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\316\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\317"+ + "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\1\13\1\320\4\13\1\0\1\5\10\13\5\157\1\321"+ + "\33\157\1\322\36\157\1\0\3\157\1\35\1\323\1\324"+ + "\7\157\2\35\1\157\2\35\4\157\1\35\6\157\4\35"+ + "\1\325\15\157\1\35\15\157\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\2\13\1\326\10\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\327\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\330\12\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\3\13\1\331\1\13\1\332\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\333\5\13\1\5\4\0\1\5\1\334\3\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\335\12\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\1\13\1\270\6\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\336\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\4\13\1\137"+ + "\1\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\4\13\1\337\3\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\137\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\340\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\6\13\1\341\1\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\342\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\13"+ + "\1\343\4\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\344\12\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\1\345\1\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\346\1\13\1\347\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\13\1\350\11\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\351\5\13\1\265\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\352\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\353\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\354\1\13\1\355\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\70\0\1\356\32\0\1\357\135\0\1\360\32\0\1\361"+ + "\147\0\1\362\32\0\1\363\135\0\1\364\32\0\1\365"+ + "\140\0\1\366\36\0\1\367\75\0\1\370\3\0\1\371"+ + "\34\0\1\372\75\0\1\373\37\0\1\374\77\0\1\255"+ + "\77\0\1\375\53\0\1\234\1\0\75\234\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\300\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\376"+ + "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\377\12\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\u0100\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\1\u0101\7\13\1\105"+ + "\4\0\4\105\1\244\1\0\2\105\1\0\4\105\1\110"+ + "\5\105\1\244\1\105\1\0\1\105\2\110\2\0\1\105"+ + "\1\0\2\105\13\0\1\110\5\105\1\0\5\105\1\110"+ + "\3\105\11\0\1\244\16\0\1\244\46\0\1\5\4\0"+ + "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\1\u0102\5\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\5\5\1\u0103\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\2\5\1\u0104"+ + "\11\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\6\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\7\5\1\u0105\4\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\1\5\1\121\4\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\14\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\1\u0106\5\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0105\3\5"+ + "\1\0\12\5\4\0\5\5\1\0\2\5\1\0\4\5"+ + "\1\117\7\5\1\0\3\5\2\0\1\5\1\0\2\5"+ + "\13\0\6\5\1\0\11\5\1\255\1\0\75\255\1\5"+ + "\4\0\5\5\1\0\2\5\1\0\2\5\1\u0107\11\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\6\5"+ + "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\u0108\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\3\13\1\172\2\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\6\13\1\137\4\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u0109\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\1\u010a\3\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\u010b\5\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\2\13\1\137\10\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\2\13\1\174\3\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\u010a\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\5\13"+ + "\1\u010c\5\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\137\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\6\13\1\257\4\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\4\13\1\240\6\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\2\13\1\320\10\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\u010d\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\u010e\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\u010f\12\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\5\13\1\377"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ + "\1\137\4\13\1\5\4\0\1\5\1\u0110\3\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\1\13\1\237\4\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\1\u0111\12\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ + "\1\u0112\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\274\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\351\12\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\240\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\105\4\0"+ + "\1\105\2\u0113\1\105\1\307\1\0\2\105\1\0\3\105"+ + "\3\307\1\u0114\1\105\1\u0114\2\307\1\105\1\0\1\307"+ + "\1\105\1\307\2\0\1\105\1\0\1\307\1\105\13\0"+ + "\1\307\5\105\1\0\3\105\1\307\5\105\1\310\1\0"+ + "\35\310\1\154\40\310\1\0\7\310\1\u0115\7\310\3\u0115"+ + "\3\310\2\u0115\2\310\1\u0115\1\310\1\u0115\1\310\1\154"+ + "\2\310\1\u0115\14\310\1\u0115\11\310\1\u0115\6\310\1\0"+ + "\7\310\1\u0116\7\310\3\u0116\3\310\2\u0116\2\310\1\u0116"+ + "\1\310\1\u0116\1\310\1\154\2\310\1\u0116\14\310\1\u0116"+ + "\11\310\1\u0116\5\310\37\0\1\311\37\0\1\310\1\0"+ + "\7\310\1\u0117\7\310\3\u0117\3\310\2\u0117\2\310\1\u0117"+ + "\1\310\1\u0117\1\310\1\154\2\310\1\u0117\14\310\1\u0117"+ + "\11\310\1\u0117\5\310\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\u0118\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\4\13\1\u0119\6\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\1\137\5\13\1\0\1\5\10\13\1\157\1\0"+ + "\102\157\1\321\3\157\1\u011a\7\157\3\u011a\3\157\2\u011a"+ + "\2\157\1\u011a\1\157\1\u011a\3\157\1\322\1\u011a\14\157"+ + "\1\u011a\11\157\1\u011a\12\157\1\321\3\157\1\u011b\7\157"+ + "\3\u011b\3\157\2\u011b\2\157\1\u011b\1\157\1\u011b\3\157"+ + "\1\322\1\u011b\14\157\1\u011b\11\157\1\u011b\12\157\1\321"+ + "\3\157\1\35\7\157\3\35\3\157\2\35\2\157\1\35"+ + "\1\157\1\35\3\157\1\322\1\35\14\157\1\35\11\157"+ + "\1\35\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\301\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\377\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\377\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u011c\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u011d\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\1\13\1\u011e"+ + "\4\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\1\u011f\1\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\2\13\1\u0120\10\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\5\13\1\137\5\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\2\13\1\u0121\10\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\1\13\1\u0122\11\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u0110\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\1\13\1\u0123"+ + "\11\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\5\13\1\265\5\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\3\13\1\137\2\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\u0111\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\u0124\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\u0125"+ + "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\4\13\1\u0126\6\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\2\13"+ + "\1\u0127\5\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\6\13\1\261\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\u0128\5\13\1\174\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\u0129\5\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\13\1\377\11\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\44\0"+ + "\1\u012a\53\0\1\356\113\0\1\u012b\130\0\1\u012c\52\0"+ + "\1\u012d\53\0\1\362\113\0\1\u012e\130\0\1\u012f\65\0"+ + "\1\u0130\103\0\1\u0131\32\0\1\u0132\103\0\1\u0133\32\0"+ + "\1\232\75\0\1\u0134\100\0\1\u0133\37\0\1\230\74\0"+ + "\1\u0135\56\0\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\5\13\1\137\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\3\13\1\265\7\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\2\13\1\354\10\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\5\5\1\0\2\5\1\0\3\5\1\121\10\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\6\5\1\0"+ + "\12\5\4\0\5\5\1\0\2\5\1\0\14\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\u0136"+ + "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\3\5\1\u0137\2\5\1\0\12\5\4\0\5\5\1\0"+ + "\2\5\1\0\3\5\1\255\10\5\1\0\3\5\2\0"+ + "\1\5\1\0\2\5\13\0\6\5\1\0\12\5\4\0"+ + "\5\5\1\0\2\5\1\0\2\5\1\115\11\5\1\0"+ + "\3\5\2\0\1\5\1\0\2\5\13\0\1\5\1\121"+ + "\4\5\1\0\12\5\4\0\5\5\1\0\2\5\1\0"+ + "\14\5\1\0\3\5\2\0\1\5\1\0\2\5\13\0"+ + "\2\5\1\u0138\3\5\1\0\12\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\u0139\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\u013a\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\3\13\1\u013b\2\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\u013c\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\5\13\1\u013d\5\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\351\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\13"+ + "\1\u013e\11\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\2\13\1\174\5\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\1\13\1\u013f\4\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\3\13"+ + "\1\u0140\4\13\1\105\4\0\5\105\1\0\2\105\1\0"+ + "\6\105\1\u0141\1\105\1\u0141\3\105\1\0\3\105\2\0"+ + "\1\105\1\0\2\105\13\0\6\105\1\0\12\105\4\0"+ + "\1\105\2\u0141\2\105\1\0\2\105\1\0\14\105\1\0"+ + "\3\105\2\0\1\105\1\0\2\105\13\0\6\105\1\0"+ + "\11\105\1\310\1\0\7\310\1\u0142\7\310\3\u0142\3\310"+ + "\2\u0142\2\310\1\u0142\1\310\1\u0142\1\310\1\154\2\310"+ + "\1\u0142\14\310\1\u0142\11\310\1\u0142\6\310\1\0\7\310"+ + "\1\u0143\7\310\3\u0143\3\310\2\u0143\2\310\1\u0143\1\310"+ + "\1\u0143\1\310\1\154\2\310\1\u0143\14\310\1\u0143\11\310"+ + "\1\u0143\6\310\1\0\7\310\1\u0144\7\310\3\u0144\3\310"+ + "\2\u0144\2\310\1\u0144\1\310\1\u0144\1\310\1\311\2\310"+ + "\1\u0144\14\310\1\u0144\11\310\1\u0144\5\310\1\5\4\0"+ + "\1\5\1\u0145\3\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\1\200\12\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\5\157\1\321\3\157\1\u0146\7\157\3\u0146"+ + "\3\157\2\u0146\2\157\1\u0146\1\157\1\u0146\3\157\1\322"+ + "\1\u0146\14\157\1\u0146\11\157\1\u0146\12\157\1\321\3\157"+ + "\1\u0147\7\157\3\u0147\3\157\2\u0147\2\157\1\u0147\1\157"+ + "\1\u0147\3\157\1\322\1\u0147\14\157\1\u0147\11\157\1\u0147"+ + "\5\157\1\5\4\0\1\5\1\u0148\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\13\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\5\13\1\u0124\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\u0145\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\5\13\1\330\5\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\u0149\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\6\13\1\u014a\4\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\1\13\1\u014b\11\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\6\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\u014c\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u014d\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\2\13"+ + "\1\u014e\10\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\4\13\1\261\3\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\1\137\7\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\1\13\1\u014f\4\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\3\13\1\274\4\13"+ + "\3\0\1\u0150\76\0\1\u012b\1\u0151\1\0\4\u012b\3\u0151"+ + "\1\0\1\u0151\13\u012b\1\u0151\3\u012b\2\u0151\1\u012b\1\0"+ + "\2\u012b\3\u0151\2\0\2\u0151\3\0\1\u0151\6\u012b\1\u0151"+ + "\11\u012b\25\0\1\356\16\0\1\u012a\35\0\1\u0152\76\0"+ + "\1\u012e\1\u0153\1\0\4\u012e\3\u0153\1\0\1\u0153\13\u012e"+ + "\1\u0153\3\u012e\2\u0153\1\u012e\1\0\2\u012e\3\u0153\2\0"+ + "\2\u0153\3\0\1\u0153\6\u012e\1\u0153\11\u012e\25\0\1\362"+ + "\16\0\1\u012d\53\0\1\232\135\0\1\u0154\100\0\1\u0155"+ + "\35\0\1\255\75\0\1\226\37\0\1\232\77\0\1\u0156"+ + "\15\0\1\5\4\0\5\5\1\0\2\5\1\0\14\5"+ + "\1\0\3\5\2\0\1\5\1\0\2\5\13\0\3\5"+ + "\1\u0157\2\5\1\0\12\5\4\0\5\5\1\0\2\5"+ + "\1\0\2\5\1\255\11\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\6\5\1\0\12\5\4\0\5\5"+ + "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\1\5\1\u0158\4\5\1\0\12\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\3\13\1\137\7\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\2\13"+ + "\1\137\3\13\1\0\1\5\10\13\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\2\13\1\u013d"+ + "\3\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\u0159\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\5\13\1\u015a\5\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\4\13\1\u0110\6\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\2\13\1\137\5\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\4\13\1\u015b\6\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\1\310"+ + "\1\0\7\310\1\u015c\7\310\3\u015c\3\310\2\u015c\2\310"+ + "\1\u015c\1\310\1\u015c\1\310\1\154\2\310\1\u015c\14\310"+ + "\1\u015c\11\310\1\u015c\6\310\1\0\7\310\1\u015d\7\310"+ + "\3\u015d\3\310\2\u015d\2\310\1\u015d\1\310\1\u015d\1\310"+ + "\1\154\2\310\1\u015d\14\310\1\u015d\11\310\1\u015d\6\310"+ + "\1\0\7\310\1\u015e\7\310\3\u015e\3\310\2\u015e\2\310"+ + "\1\u015e\1\310\1\u015e\1\310\1\311\2\310\1\u015e\14\310"+ + "\1\u015e\11\310\1\u015e\5\310\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\4\13\1\336\6\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\6\13"+ + "\1\0\1\5\10\13\5\157\1\321\3\157\1\325\7\157"+ + "\3\325\3\157\2\325\2\157\1\325\1\157\1\325\3\157"+ + "\1\322\1\325\14\157\1\325\11\157\1\325\12\157\1\321"+ + "\3\157\1\u015f\7\157\3\u015f\3\157\2\u015f\2\157\1\u015f"+ + "\1\157\1\u015f\3\157\1\322\1\u015f\14\157\1\u015f\11\157"+ + "\1\u015f\5\157\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\5\13\1\174\5\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\3\13\1\u0160\7\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\2\13\1\u0145\3\13\1\0"+ + "\1\5\10\13\1\5\4\0\1\5\4\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\1\13\1\u0160"+ + "\6\13\1\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\u0161\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\1\u0162\12\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\1\265"+ + "\12\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\u0163\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\13\13\1\0\3\13\2\0"+ + "\1\13\1\0\2\13\13\0\2\13\1\u0164\3\13\1\0"+ + "\1\5\10\13\3\0\1\u012b\76\0\1\u012e\155\0\1\u0165"+ + "\34\0\1\255\136\0\1\u0166\16\0\1\5\4\0\5\5"+ + "\1\0\2\5\1\0\14\5\1\0\3\5\2\0\1\5"+ + "\1\0\2\5\13\0\2\5\1\255\3\5\1\0\12\5"+ + "\4\0\5\5\1\0\2\5\1\0\14\5\1\0\3\5"+ + "\2\0\1\5\1\0\2\5\13\0\2\5\1\u0167\3\5"+ + "\1\0\12\5\4\0\1\5\4\13\1\100\1\13\1\5"+ + "\1\0\1\5\13\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\1\13\1\174\4\13\1\0\1\5\10\13"+ + "\1\5\4\0\1\5\4\13\1\100\1\13\1\5\1\0"+ + "\1\5\13\13\1\0\3\13\2\0\1\13\1\0\2\13"+ + "\13\0\6\13\1\0\1\5\5\13\1\137\2\13\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\5\13\1\u0168\5\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\310\1\0"+ + "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ + "\1\310\1\152\1\310\1\154\2\310\1\152\14\310\1\152"+ + "\11\310\1\152\6\310\1\0\7\310\1\312\7\310\3\312"+ + "\3\310\2\312\2\310\1\312\1\310\1\312\1\310\1\154"+ + "\2\310\1\312\14\310\1\312\11\310\1\312\6\310\1\0"+ + "\7\310\1\152\7\310\3\152\3\310\2\152\2\310\1\152"+ + "\1\310\1\152\1\310\1\311\2\310\1\152\14\310\1\152"+ + "\11\310\1\152\5\310\5\157\1\321\3\157\1\323\7\157"+ + "\3\323\3\157\2\323\2\157\1\323\1\157\1\323\3\157"+ + "\1\322\1\323\14\157\1\323\11\157\1\323\5\157\1\5"+ + "\4\0\1\5\4\13\1\100\1\13\1\5\1\0\1\5"+ + "\4\13\1\u0169\6\13\1\0\3\13\2\0\1\13\1\0"+ + "\2\13\13\0\6\13\1\0\1\5\10\13\1\5\4\0"+ + "\1\5\4\13\1\100\1\13\1\5\1\0\1\5\13\13"+ + "\1\0\3\13\2\0\1\13\1\0\2\13\13\0\1\265"+ + "\5\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\3\13\1\u016a\2\13"+ + "\1\0\1\5\10\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\274\12\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\10\13\1\5\4\0\1\5\1\265\3\13\1\100\1\13"+ + "\1\5\1\0\1\5\13\13\1\0\3\13\2\0\1\13"+ + "\1\0\2\13\13\0\6\13\1\0\1\5\10\13\61\0"+ + "\1\255\76\0\1\u016b\15\0\1\5\4\0\5\5\1\0"+ + "\2\5\1\0\14\5\1\0\3\5\2\0\1\5\1\0"+ + "\2\5\13\0\5\5\1\255\1\0\12\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\5\13\1\u016c"+ + "\5\13\1\0\3\13\2\0\1\13\1\0\2\13\13\0"+ + "\6\13\1\0\1\5\10\13\1\5\4\0\1\5\4\13"+ + "\1\100\1\13\1\5\1\0\1\5\13\13\1\0\3\13"+ + "\2\0\1\13\1\0\2\13\13\0\6\13\1\0\1\5"+ + "\2\13\1\265\5\13\1\5\4\0\1\5\4\13\1\100"+ + "\1\13\1\5\1\0\1\5\1\13\1\137\11\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\6\13\1\0"+ + "\1\5\10\13\64\0\1\255\12\0\1\5\4\0\1\5"+ + "\4\13\1\100\1\13\1\5\1\0\1\5\13\13\1\0"+ + "\3\13\2\0\1\13\1\0\2\13\13\0\3\13\1\u013f"+ + "\2\13\1\0\1\5\10\13"; + + private static int [] zzUnpackTrans() { + int [] result = new int[21231]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\2\0\3\1\1\11\10\1\1\11\17\1\1\11\4\1" + - "\2\11\11\1\1\11\5\1\1\11\5\1\1\11\1\1" + - "\1\0\1\1\1\11\12\1\1\0\1\11\40\1\1\11" + - "\4\1\1\11\27\1\1\11\7\0\1\11\2\0\1\11" + - "\7\0\1\1\1\11\7\1\1\0\43\1\1\11\10\1" + - "\1\11\33\1\20\0\54\1\1\0\1\1\2\0\1\1" + - "\7\0\32\1\7\0\16\1\2\0\4\1\1\0\1\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[364]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public CSharpTokenMaker() { - super(); + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\3\1\1\11\10\1\1\11\17\1\1\11\4\1"+ + "\2\11\11\1\1\11\5\1\1\11\5\1\1\11\1\1"+ + "\1\0\1\1\1\11\12\1\1\0\1\11\40\1\1\11"+ + "\4\1\1\11\27\1\1\11\7\0\1\11\2\0\1\11"+ + "\7\0\1\1\1\11\7\1\1\0\43\1\1\11\10\1"+ + "\1\11\33\1\20\0\54\1\1\0\1\1\2\0\1\1"+ + "\7\0\32\1\7\0\16\1\2\0\4\1\1\0\1\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[364]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CSharpTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VERBATIMSTRING; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = DELIMITEDCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CSharpTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CSharpTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 158) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } + throw new Error(message); + } - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = VERBATIMSTRING; - start = text.offset; - break; - case Token.COMMENT_MULTILINE: - state = DELIMITEDCOMMENT; - start = text.offset; - break; - default: - state = Token.NULL; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + zzMarkedPos -= number; + } - } - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public CSharpTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public CSharpTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 158) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + zzAction = -1; - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - if (zzReader != null) - zzReader.close(); - } + zzState = zzLexicalState; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 35: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_DOCUMENTATION); - start = zzMarkedPos; - } - case 36: - break; - case 28: { - addToken(Token.PREPROCESSOR); - } - case 37: - break; - case 3: { - addNullToken(); - return firstToken; - } - case 38: - break; - case 30: { - addToken(Token.LITERAL_CHAR); - } - case 39: - break; - case 25: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 40: - break; - case 4: { - addToken(Token.WHITESPACE); - } - case 41: - break; - case 29: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 42: - break; - case 22: { - addToken(Token.ERROR_CHAR); /* addNullToken(); return firstToken; */ - } - case 43: - break; - case 31: { - addToken(Token.ERROR_STRING_DOUBLE); - } - case 44: - break; - case 19: { - addToken(Token.LITERAL_NUMBER_FLOAT); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 45: - break; - case 21: { - addToken(Token.RESERVED_WORD); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 46: - break; - case 10: { - addToken(Token.SEPARATOR); - } - case 47: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addNullToken(); - return firstToken; - } - case 48: - break; - case 6: { - addToken(Token.IDENTIFIER); - } - case 49: - break; - case 13: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzEndRead, Token.PREPROCESSOR); - addNullToken(); - return firstToken; - } - case 50: - break; - case 8: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 51: - break; - case 9: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 52: - break; - case 32: { - addToken(Token.DATA_TYPE); - } - case 53: - break; - case 2: { - addToken(Token.ERROR_IDENTIFIER); - } - case 54: - break; - case 23: { - addToken(Token.ERROR_CHAR); - } - case 55: - break; - case 33: { - addToken(Token.LITERAL_BOOLEAN); - } - case 56: - break; - case 20: { - start = zzMarkedPos - 2; - yybegin(VERBATIMSTRING); - } - case 57: - break; - case 24: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 58: - break; - case 14: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 59: - break; - case 34: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 60: - break; - case 16: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 61: - break; - case 18: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 62: - break; - case 27: { - start = zzMarkedPos - 3; - yybegin(DOCUMENTCOMMENT); - } - case 63: - break; - case 17: { - start = zzMarkedPos - 2; - yybegin(DELIMITEDCOMMENT); - } - case 64: - break; - case 7: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 65: - break; - case 5: { - addToken(Token.OPERATOR); - } - case 66: - break; - case 26: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.PREPROCESSOR); - start = zzMarkedPos; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 36: break; + case 28: + { addToken(Token.PREPROCESSOR); + } + case 37: break; + case 3: + { addNullToken(); return firstToken; + } + case 38: break; + case 30: + { addToken(Token.LITERAL_CHAR); + } + case 39: break; + case 25: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 40: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 41: break; + case 29: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 42: break; + case 22: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 43: break; + case 31: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 44: break; + case 19: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 45: break; + case 21: + { addToken(Token.RESERVED_WORD); + } + case 46: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 47: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 48: break; + case 6: + { addToken(Token.IDENTIFIER); + } + case 49: break; + case 13: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzEndRead, Token.PREPROCESSOR); addNullToken(); return firstToken; + } + case 50: break; + case 8: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 51: break; + case 9: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 52: break; + case 32: + { addToken(Token.DATA_TYPE); + } + case 53: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 54: break; + case 23: + { addToken(Token.ERROR_CHAR); + } + case 55: break; + case 33: + { addToken(Token.LITERAL_BOOLEAN); + } + case 56: break; + case 20: + { start = zzMarkedPos-2; yybegin(VERBATIMSTRING); + } + case 57: break; + case 24: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 58: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 59: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 60: break; + case 16: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 61: break; + case 18: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 62: break; + case 27: + { start = zzMarkedPos-3; yybegin(DOCUMENTCOMMENT); + } + case 63: break; + case 17: + { start = zzMarkedPos-2; yybegin(DELIMITEDCOMMENT); + } + case 64: break; + case 7: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 65: break; + case 5: + { addToken(Token.OPERATOR); + } + case 66: break; + case 26: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; + } + case 67: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 68: break; + case 1: + { + } + case 69: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 70: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case VERBATIMSTRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 67: - break; - case 15: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + case 365: break; + case DOCUMENTCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } - case 68: - break; - case 1: { + case 366: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 69: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 367: break; + case DELIMITEDCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 70: - break; + case 368: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case VERBATIMSTRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 365: - break; - case DOCUMENTCOMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addNullToken(); - return firstToken; - } - case 366: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 367: - break; - case DELIMITEDCOMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 368: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex old mode 100644 new mode 100755 index afc6c140d..67d9a6bba --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex @@ -4,23 +4,9 @@ * CTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in the C programming * language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -65,7 +51,7 @@ import org.fife.ui.rsyntaxtextarea.*; *
            * * @author Robert Futrell - * @version 0.5 + * @version 0.6 * */ %% @@ -132,6 +118,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -139,13 +126,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -185,7 +169,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -196,9 +180,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -213,7 +196,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -253,7 +236,7 @@ OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) HexEscape = ([\\][xX]{HexDigit}{HexDigit}) AnyChrChr = ([^\'\n\\]) -Escape = ([\\]([abfnrtv\'\"\?\\0])) +Escape = ([\\]([abfnrtv\'\"\?\\0e])) UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) CharLiteral = ({UnclosedCharLiteral}[\']) ErrorUnclosedCharLiteral = ([\'][^\'\n]*) @@ -313,7 +296,6 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "goto" | "if" | "register" | - "return" | "sizeof" | "static" | "struct" | @@ -323,6 +305,8 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "volatile" | "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + /* Data types. */ "char" | "div_t" | @@ -596,6 +580,12 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "*=" | "/=" | "%=" | + "&=" | + "|=" | + "^=" | + ">=" | + "<=" | + "!=" | ">>=" | "<<=" | "^" | diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java old mode 100644 new mode 100755 index a03587718..93fe1a299 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.1 on 1/25/09 9:54 PM */ +/* The following code was generated by JFlex 1.4.1 on 3/22/15 4:43 PM */ /* * 11/13/2004 @@ -6,23 +6,9 @@ * CTokenMaker.java - An object that can take a chunk of text and * return a linked list of tokens representing it in the C programming * language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -31,2086 +17,2067 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * Scanner for the C programming language. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

            - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

            - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

            + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

            + * * If you wish to regenerate this file yourself, keep in mind the following: *

              - *
            • The generated CTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
            • - *
            • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
            • - *
            • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
            • + *
            • The generated CTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
            • + *
            • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
            • + *
            • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
            • *
            - * + * * @author Robert Futrell - * @version 0.5 - * + * @version 0.6 + * */ public class CTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int EOL_COMMENT = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44" + - "\1\57\1\60\1\65\1\114\1\33\1\31\1\31\1\51\1\7\1\64" + - "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70" + - "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102" + - "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110" + - "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\113\1\2" + - "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13" + - "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16" + - "\1\67\1\22\1\45\1\71\1\73\1\75\1\74\1\112\1\115\1\112" + - "\1\64\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\2\2\1\3\1\4\16\2\2\4\1\5" + - "\1\4\1\6\4\4\1\2\1\7\1\10\2\2\1\3" + - "\1\11\1\4\2\1\4\2\2\4\2\12\1\13\5\12" + - "\1\14\2\12\1\2\2\15\2\3\1\16\2\2\1\17" + - "\21\2\1\17\50\2\1\0\1\20\1\21\2\22\1\23" + - "\1\6\2\10\1\24\7\2\1\15\6\1\1\0\11\2" + - "\2\0\1\25\6\0\5\2\1\3\1\0\1\3\1\15" + - "\1\16\2\2\1\26\5\2\1\26\17\2\1\27\15\2" + - "\1\26\1\2\1\26\45\2\1\6\1\30\1\6\3\22" + - "\1\6\2\10\1\31\6\2\1\32\4\1\1\33\4\1" + - "\6\0\10\2\10\0\5\2\1\16\1\0\27\2\1\27" + - "\36\2\1\26\2\2\1\26\6\2\1\6\1\10\6\2" + - "\2\32\7\1\4\0\1\33\4\0\10\2\2\0\1\34" + - "\2\0\1\35\47\2\1\32\1\33\3\1\7\0\7\2" + - "\4\0\12\2\2\1\1\33\3\0\4\2\2\0\1\33"; - - private static int[] zzUnpackAction() { - int[] result = new int[500]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\50\1\43\1\0\1\50\1\56\22\0\1\50\1\36\1\44"+ + "\1\57\1\60\1\65\1\113\1\33\1\31\1\31\1\51\1\7\1\64"+ + "\1\37\1\54\1\32\1\47\1\77\1\76\1\41\4\5\2\3\1\70"+ + "\1\63\1\34\1\30\1\35\1\27\1\61\1\103\1\4\1\111\1\102"+ + "\1\6\1\55\2\1\1\105\2\1\1\53\1\106\1\107\4\1\1\110"+ + "\1\104\1\52\2\1\1\42\2\1\1\62\1\40\1\62\1\115\1\2"+ + "\1\0\1\24\1\46\1\21\1\10\1\11\1\12\1\25\1\66\1\13"+ + "\1\100\1\72\1\15\1\26\1\14\1\20\1\23\1\101\1\17\1\16"+ + "\1\67\1\22\1\45\1\71\1\73\1\75\1\74\1\112\1\114\1\112"+ + "\1\64\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\2\2\1\3\1\4\16\2\2\4\1\5"+ + "\1\4\1\6\3\4\1\2\1\7\1\10\2\2\1\3"+ + "\1\11\1\4\2\1\1\2\1\4\3\2\2\4\2\12"+ + "\1\13\5\12\1\14\2\12\1\2\2\15\2\3\1\16"+ + "\2\2\1\17\21\2\1\17\50\2\1\0\1\20\1\21"+ + "\2\22\1\23\1\6\2\10\1\24\7\2\1\15\6\1"+ + "\1\0\11\2\2\0\1\25\6\0\5\2\1\3\1\0"+ + "\1\3\1\15\1\16\2\2\1\26\5\2\1\26\17\2"+ + "\1\27\15\2\1\26\1\2\1\26\45\2\1\6\1\30"+ + "\1\6\3\22\1\6\2\10\1\31\6\2\1\32\4\1"+ + "\1\33\4\1\6\0\10\2\10\0\5\2\1\16\1\0"+ + "\27\2\1\27\37\2\1\26\2\2\1\26\6\2\1\6"+ + "\1\10\6\2\2\32\7\1\4\0\1\33\4\0\10\2"+ + "\2\0\1\34\2\0\1\35\50\2\1\32\1\33\3\1"+ + "\7\0\7\2\4\0\5\2\1\36\5\2\2\1\1\33"+ + "\3\0\4\2\2\0\1\33"; + + private static int [] zzUnpackAction() { + int [] result = new int[503]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492"+ + "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702"+ + "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u08d6\0\352\0\u0750"+ + "\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0750\0\u0af8"+ + "\0\u0750\0\u0750\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc"+ + "\0\u0d1a\0\u0750\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0750"+ + "\0\u0eee\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110"+ + "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380"+ + "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ + "\0\u163e\0\u168c\0\u16da\0\u1728\0\u0138\0\u1776\0\u17c4\0\u1812"+ + "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82"+ + "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2"+ + "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62"+ + "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2"+ + "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u0750\0\u0750"+ + "\0\u23f4\0\u2442\0\u0750\0\u2490\0\u24de\0\u252c\0\u0750\0\u257a"+ + "\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea"+ + "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a"+ + "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca"+ + "\0\u2d18\0\u0750\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec"+ + "\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u0fd8"+ + "\0\u315c\0\u0fd8\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330"+ + "\0\u337e\0\u33cc\0\u0138\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552"+ + "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2"+ + "\0\u3810\0\u385e\0\u0138\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4"+ + "\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54"+ + "\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4"+ + "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884"+ + "\0\u48d2\0\u0750\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ + "\0\u4af4\0\u0750\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8"+ + "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ + "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8"+ + "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u5418"+ + "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688"+ + "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8"+ + "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68"+ + "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8"+ + "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048"+ + "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8"+ + "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528"+ + "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798"+ + "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08"+ + "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78"+ + "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8"+ + "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158"+ + "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8"+ + "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638"+ + "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ + "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u3d3e\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c\0\u848a"+ + "\0\u0fd8\0\352\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e"+ + "\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce"+ + "\0\u891c\0\u3246\0\u896a\0\u89b8\0\u77be\0\u8a06\0\u78a8\0\u8a54"+ + "\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u0138\0\u8bda\0\u8c28\0\u8c76"+ + "\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u0750\0\u8dfc\0\u8e4a\0\u8e98"+ + "\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c\0\u0138"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[503]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222" + - "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u0444\0\u0492" + - "\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u06b4\0\u0702" + - "\0\u0750\0\u079e\0\u07ec\0\u083a\0\u0888\0\u0750\0\u08d6\0\352" + - "\0\u0750\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa\0\u0750" + - "\0\u0af8\0\u0750\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc" + - "\0\u0d1a\0\u0750\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0750" + - "\0\u0eee\0\u0f3c\0\u0f8a\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110" + - "\0\u115e\0\u11ac\0\u11fa\0\u1248\0\u1296\0\u12e4\0\u1332\0\u1380" + - "\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0" + - "\0\u163e\0\u168c\0\u16da\0\u1728\0\u0138\0\u1776\0\u17c4\0\u1812" + - "\0\u1860\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82" + - "\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u1cf2" + - "\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62" + - "\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u2136\0\u2184\0\u21d2" + - "\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6\0\u0750\0\u0750" + - "\0\u23f4\0\u2442\0\u0750\0\u2490\0\u24de\0\u252c\0\u0750\0\u257a" + - "\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea" + - "\0\u2838\0\u2886\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a" + - "\0\u2aa8\0\u2af6\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca" + - "\0\u2d18\0\u0750\0\u2d66\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec" + - "\0\u2f3a\0\u2f88\0\u2fd6\0\u3024\0\u3072\0\u30c0\0\u310e\0\u0fd8" + - "\0\u315c\0\u0fd8\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2\0\u3330" + - "\0\u337e\0\u33cc\0\u0138\0\u341a\0\u3468\0\u34b6\0\u3504\0\u3552" + - "\0\u35a0\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2" + - "\0\u3810\0\u385e\0\u0138\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4" + - "\0\u3a32\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54" + - "\0\u3ca2\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4" + - "\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u40e6\0\u4134" + - "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4" + - "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614" + - "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u4884" + - "\0\u48d2\0\u0750\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6" + - "\0\u4af4\0\u0750\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u4c7a\0\u4cc8" + - "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38" + - "\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u510c\0\u515a\0\u51a8" + - "\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u532e\0\u537c\0\u53ca\0\u5418" + - "\0\u5466\0\u54b4\0\u5502\0\u5550\0\u559e\0\u55ec\0\u563a\0\u5688" + - "\0\u56d6\0\u5724\0\u5772\0\u57c0\0\u580e\0\u585c\0\u58aa\0\u58f8" + - "\0\u5946\0\u5994\0\u59e2\0\u5a30\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68" + - "\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8" + - "\0\u5e26\0\u5e74\0\u5ec2\0\u5f10\0\u5f5e\0\u5fac\0\u5ffa\0\u6048" + - "\0\u6096\0\u60e4\0\u6132\0\u6180\0\u61ce\0\u621c\0\u626a\0\u62b8" + - "\0\u6306\0\u6354\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528" + - "\0\u6576\0\u65c4\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798" + - "\0\u67e6\0\u6834\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08" + - "\0\u6a56\0\u6aa4\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78" + - "\0\u6cc6\0\u6d14\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8" + - "\0\u6f36\0\u6f84\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158" + - "\0\u71a6\0\u71f4\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8" + - "\0\u7416\0\u7464\0\u74b2\0\u7500\0\u754e\0\u759c\0\u75ea\0\u7638" + - "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8" + - "\0\u78f6\0\u7944\0\u7992\0\u3d3e\0\u79e0\0\u7a2e\0\u7a7c\0\u7aca" + - "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a" + - "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa" + - "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a" + - "\0\u8268\0\u82b6\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u0fd8\0\352" + - "\0\u843c\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e" + - "\0\u86ac\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u3246" + - "\0\u88ce\0\u891c\0\u7770\0\u896a\0\u785a\0\u89b8\0\u8a06\0\u8a54" + - "\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c\0\u8bda\0\u8c28\0\u8c76\0\u8cc4" + - "\0\u8d12\0\u0750\0\u8d60\0\u8dae\0\u8dfc\0\u8e4a\0\u8e98\0\u8ee6" + - "\0\u8f34\0\u8f82\0\u8fd0\0\u0138"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[500]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10"+ + "\1\11\1\12\1\13\1\14\1\5\1\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\35\1\30\1\36"+ + "\1\37\1\7\1\5\1\40\1\41\1\42\1\43\1\44"+ + "\1\45\1\30\2\5\1\46\1\5\1\47\1\50\2\4"+ + "\1\31\1\51\1\52\1\30\1\5\1\53\1\52\1\54"+ + "\4\5\2\7\1\5\1\55\10\5\1\31\1\56\1\57"+ + "\1\30\12\60\1\61\30\60\1\62\5\60\1\63\14\60"+ + "\1\64\2\60\1\65\24\60\12\66\1\67\30\66\1\70"+ + "\22\66\1\71\2\66\1\72\24\66\7\4\1\0\17\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\73"+ + "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\3\74\1\7\1\74"+ + "\1\7\1\75\1\0\1\74\1\75\3\74\1\76\4\74"+ + "\1\77\4\74\11\0\1\74\1\7\1\74\2\0\2\74"+ + "\1\7\2\0\1\77\1\76\1\100\1\74\1\0\3\74"+ + "\4\0\2\74\1\0\5\74\2\7\12\74\13\0\1\52"+ + "\20\0\1\52\65\0\1\4\6\5\1\0\1\5\1\101"+ + "\1\5\1\102\4\5\1\103\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\104\1\105\1\5\1\106\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\107\16\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\110\1\111\2\5\1\112\1\113\1\114\1\115\1\116"+ + "\1\5\1\117\1\120\1\121\1\122\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\123\1\0\1\124\20\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\125\1\5\1\126"+ + "\1\5\1\127\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\130\7\5\1\131\3\5\1\120\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\132\1\5\1\133\2\5"+ + "\1\134\1\135\1\5\1\136\1\5\1\137\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\140\1\141\1\0"+ + "\1\142\3\5\1\143\3\5\1\144\10\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\145\12\5\1\146\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\147\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\150\3\5\1\151"+ + "\2\5\1\152\3\5\1\153\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\154\1\155\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\156\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\157\5\5\1\160\1\161"+ + "\1\5\1\162\4\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\163\2\5\1\164\1\165\4\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\166\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\167"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\170"+ + "\6\5\1\165\5\5\1\171\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\172\6\5\1\173\3\5\1\174\2\5"+ + "\11\0\1\4\2\5\2\0\1\5\1\175\1\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\171\17\5\33\0\1\176\116\0"+ + "\1\52\233\0\1\52\1\0\1\177\16\0\1\200\44\0"+ + "\27\201\1\202\3\201\1\203\4\201\1\204\2\201\1\0"+ + "\52\201\30\0\1\52\3\0\1\30\111\0\1\52\4\0"+ + "\1\30\110\0\1\52\6\0\1\52\56\0\40\41\1\205"+ + "\2\41\1\206\1\207\51\41\1\4\6\5\1\0\2\5"+ + "\1\210\3\5\1\210\1\5\1\211\2\5\1\137\1\212"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\213\20\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\214\1\215\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\216\1\0\21\5\4\0\3\74\1\7"+ + "\1\74\1\7\1\75\1\0\1\74\1\75\3\74\1\76"+ + "\4\74\1\77\4\74\11\0\1\74\1\7\1\217\2\0"+ + "\2\74\1\7\2\0\1\77\1\76\1\100\1\74\1\0"+ + "\3\74\4\0\2\74\1\0\2\74\1\217\2\74\2\7"+ + "\12\74\54\0\1\45\50\0\1\100\1\0\1\100\33\0"+ + "\1\100\5\0\1\100\26\0\2\100\16\0\7\4\1\0"+ + "\1\220\1\221\1\4\1\222\1\4\1\223\4\4\1\224"+ + "\1\225\3\4\11\0\3\4\2\0\3\4\1\226\1\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\1\4\6\5\1\0\3\5\1\227\4\5"+ + "\1\230\3\5\1\231\1\5\1\232\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\4\5\1\233\14\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\134\2\5\1\234"+ + "\1\5\1\137\2\5\1\235\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\236\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\237\10\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\34\0\1\52"+ + "\62\0\1\52\32\0\1\52\63\0\1\52\1\0\12\60"+ + "\1\0\30\60\1\0\5\60\1\0\14\60\1\0\2\60"+ + "\1\0\24\60\13\0\1\240\53\0\1\241\60\0\1\242"+ + "\152\0\1\243\117\0\1\244\24\0\12\66\1\0\30\66"+ + "\1\0\22\66\1\0\2\66\1\0\24\66\13\0\1\245"+ + "\53\0\1\246\115\0\1\247\117\0\1\250\24\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\1\5\1\251\1\0\1\252\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\11\5\1\253\1\5\1\254"+ + "\3\5\1\255\1\5\4\0\7\74\1\0\17\74\11\0"+ + "\3\74\2\0\3\74\2\0\2\74\1\0\1\74\1\0"+ + "\3\74\4\0\2\74\1\0\21\74\4\0\3\74\1\256"+ + "\1\74\1\256\1\74\1\257\17\74\10\0\1\257\1\74"+ + "\1\256\1\74\2\0\2\74\1\256\2\0\2\74\1\0"+ + "\1\74\1\0\3\74\4\0\2\74\1\0\5\74\2\256"+ + "\12\74\4\0\7\74\1\0\12\74\1\260\4\74\11\0"+ + "\3\74\2\0\3\74\2\0\1\260\1\74\1\0\1\74"+ + "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\74"+ + "\1\0\5\74\1\260\11\74\11\0\3\74\2\0\3\74"+ + "\2\0\1\74\1\260\1\0\1\74\1\0\3\74\4\0"+ + "\2\74\1\0\21\74\4\0\3\74\1\100\1\74\1\100"+ + "\1\261\1\0\1\74\1\261\1\262\2\74\1\262\11\74"+ + "\11\0\1\74\1\100\1\74\2\0\2\74\1\100\2\0"+ + "\1\74\1\262\1\0\1\262\1\0\3\74\4\0\2\74"+ + "\1\0\5\74\2\100\12\74\4\0\1\4\6\5\1\0"+ + "\2\5\1\263\14\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\264\14\5\11\0\1\4\2\5\2\0\1\265"+ + "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\12\5\1\266\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\12\5\1\267\4\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\270\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\271\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\272\7\5\1\273\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\274\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\275\1\276\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\5\5\1\277\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\300\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\301\7\5"+ + "\1\136\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\302\15\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5"+ + "\1\125\3\5\1\303\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\5\5\1\304\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\160\2\5\1\305\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\5\1\306\1\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\307\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\310\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\311\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\6\5\1\134\1\312\3\5\1\137"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\313\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\314\4\5\1\315"+ + "\1\316\2\5\1\317\1\320\1\321\1\322\1\323\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\2\5\1\324\16\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\325\1\5\1\326\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\327\4\5\1\330\3\5\1\331\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\332\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\4\5\1\333\10\5\1\334"+ + "\1\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\3\5\1\335\15\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\136\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\336\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\14\5\1\337\2\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\160\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\340\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\341\4\5\1\342\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\343\2\5\1\134\4\5\1\137"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\344"+ + "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\272"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\345"+ + "\7\5\1\174\1\346\1\347\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\350\1\0\1\351\20\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\352\1\310\12\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\353\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\3\5\1\354\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\355\6\5\1\356"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\357"+ + "\1\5\1\333\10\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\360\1\270\10\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\361\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\227\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\362\2\5\1\363\6\5\1\364\1\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\275\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\365\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\273\20\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\366\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\367\2\5\1\370\2\5"+ + "\1\171\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\306\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\371"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\273"+ + "\1\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\372\6\5\1\373\3\5\1\374\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\375\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\155\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\16\5\1\376\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\276\16\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\360\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\303\1\377\1\u0100\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\216\1\0\21\5\34\0"+ + "\10\52\56\0\33\u0101\1\u0102\7\u0101\1\0\101\u0101\1\u0103"+ + "\3\u0101\1\u0102\7\u0101\1\0\57\u0101\1\u0104\3\u0101\2\201"+ + "\1\u0101\1\201\2\u0101\1\201\4\u0101\1\201\2\u0101\1\201"+ + "\3\u0101\1\u0105\4\u0101\1\201\1\u0106\1\u0107\1\0\3\201"+ + "\1\u0106\17\u0101\1\201\3\u0101\1\u0107\2\u0101\2\u0106\16\u0101"+ + "\5\206\1\41\3\206\2\41\1\206\1\41\2\206\1\41"+ + "\4\206\1\41\2\206\1\41\3\206\1\41\4\206\2\41"+ + "\1\u0108\1\0\4\41\17\206\1\41\3\206\1\u0108\2\206"+ + "\2\41\56\206\1\u0109\3\206\1\u010a\51\206\1\4\6\5"+ + "\1\0\13\5\1\137\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\213\20\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u010b\1\5\1\u010c\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\1\5\1\u010d\4\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\137\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u010e\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u010f\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u0110\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\3\74\4\u0111\1\0\3\u0111\6\74\1\u0111\2\74"+ + "\1\u0111\2\74\11\0\1\74\1\u0111\1\74\2\0\1\74"+ + "\2\u0111\2\0\2\74\1\0\1\u0111\1\0\3\74\4\0"+ + "\2\74\1\0\5\74\2\u0111\2\74\2\u0111\5\74\1\u0111"+ + "\4\0\7\4\1\0\1\4\1\u0112\15\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4"+ + "\1\u0113\1\u0114\1\4\1\u0115\7\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\2\4\1\u0116"+ + "\1\4\1\u0117\12\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\3\4\1\u0118\13\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\4\4\1\u0119\12\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\7\4\1\u011a\7\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\14\0\1\u011b\1\u011c"+ + "\1\0\1\u011d\1\0\1\u011e\4\0\1\u011f\1\u0120\24\0"+ + "\1\226\45\0\1\4\6\5\1\0\16\5\1\u0121\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\315\4\5\1\320"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\333"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0122"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\13\5\1\u0123"+ + "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0124"+ + "\1\u0125\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u0126\1\u0127\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\172\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u0128\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\144\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\21\0\1\u0129\123\0\1\u012a"+ + "\161\0\1\u012b\117\0\1\u012c\41\0\1\u012d\123\0\1\u012e"+ + "\161\0\1\u012f\117\0\1\u0130\24\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0131\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0132\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\12\5\1\u0133\6\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\14\5\1\u0134\4\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\13\5\1\u0135\5\5\4\0\3\74\1\256\1\74"+ + "\1\256\1\74\1\0\5\74\1\76\4\74\1\77\4\74"+ + "\11\0\1\74\1\256\1\74\2\0\2\74\1\256\2\0"+ + "\1\77\1\76\1\0\1\74\1\0\3\74\4\0\2\74"+ + "\1\0\5\74\2\256\12\74\7\0\1\256\1\0\1\256"+ + "\33\0\1\256\5\0\1\256\26\0\2\256\16\0\3\74"+ + "\1\u0136\1\74\1\u0136\1\74\1\u0137\17\74\10\0\1\u0137"+ + "\1\74\1\u0136\1\74\2\0\2\74\1\u0136\2\0\2\74"+ + "\1\0\1\74\1\0\3\74\4\0\2\74\1\0\5\74"+ + "\2\u0136\12\74\4\0\1\4\6\5\1\0\14\5\1\u0138"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\171"+ + "\14\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\1\5\1\126\4\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\1\5\1\u0139\1\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\16\5\1\125"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\125\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u013a\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\273\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u013b\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u013c\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\2\5\1\273\14\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\12\5\1\u013d\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u013e\3\5\1\126"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u013f"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0140\1\0\21\5\4\0\1\4\6\5\1\0\1\5"+ + "\1\273\6\5\1\u0141\3\5\1\310\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\2\5\1\u0142"+ + "\16\5\4\0\1\4\6\5\1\0\1\5\1\367\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\352\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u0143\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\273\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0144\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\273\16\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\5\5\1\354\11\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0145\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\3\5\1\u0146\13\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0147\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u0148\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0149\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u014a\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\u014b\2\5\1\u014c\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u014d\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u014e\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\314\16\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\2\5\1\u0142\16\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\1\265\2\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\15\5\1\u014f\1\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u0150\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\6\5\1\u0151\12\5\4\0\1\4"+ + "\6\5\1\0\5\5\1\u0152\11\5\11\0\1\4\2\5"+ + "\2\0\1\u0153\1\u0154\1\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\7\5"+ + "\1\u0155\11\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\273\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0156\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0157\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\310\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\276\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\7\5\1\126\7\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\157\1\171"+ + "\1\5\1\u0158\1\303\1\u0159\1\u015a\1\5\1\u015b\1\u015c"+ + "\1\u015d\3\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u015e\1\0\2\5\1\u015f\16\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0160\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0161\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5"+ + "\1\u0162\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\227\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\u0163\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5"+ + "\1\u0164\6\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\12\5"+ + "\1\u0165\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5"+ + "\1\336\13\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0121\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0166\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5"+ + "\1\273\11\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5"+ + "\1\u0167\2\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5"+ + "\1\u013f\5\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\u0168\10\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0169\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\u016a\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\313\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\10\5\1\u016b\6\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\u016c\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u016d\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\4\5\1\u016e\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\6\5\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\273\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\144\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\125\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\2\5\1\u0171\16\5\4\0"+ + "\1\4\6\5\1\0\2\5\2\273\1\5\1\273\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u0172\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u0173\4\5"+ + "\1\273\2\5\1\u016f\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u0170\20\5\4\0\1\4"+ + "\6\5\1\0\6\5\1\u0174\2\5\1\u0175\4\5\1\347"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u0176\3\5"+ + "\1\u0177\7\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\5\5\1\303\11\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\216\1\0\21\5\4\0\33\u0101\1\203"+ + "\7\u0101\1\0\102\u0101\3\201\1\u0105\4\201\3\u0101\1\0"+ + "\57\u0101\1\201\25\u0101\1\u0102\5\u0101\1\201\1\u0101\1\0"+ + "\3\u0101\1\201\26\u0101\2\201\16\u0101\33\0\1\u0102\62\0"+ + "\5\u0101\1\u0104\25\u0101\1\u0102\5\u0101\1\u0104\1\u0101\1\0"+ + "\3\u0101\1\u0104\26\u0101\2\u0104\21\u0101\4\u0179\1\u0101\3\u0179"+ + "\6\u0101\1\u0179\2\u0101\1\u0179\6\u0101\1\203\5\u0101\1\u0179"+ + "\1\u0101\1\0\2\u0101\2\u0179\5\u0101\1\u0179\20\u0101\2\u0179"+ + "\2\u0101\2\u0179\5\u0101\1\u0179\4\u0101\3\206\4\u017a\1\206"+ + "\3\u017a\6\206\1\u017a\2\206\1\u017a\13\206\1\u0109\1\u017a"+ + "\2\206\1\u010a\1\206\2\u017a\5\206\1\u017a\20\206\2\u017a"+ + "\2\206\2\u017a\5\206\1\u017a\47\206\1\0\52\206\1\4"+ + "\6\5\1\0\1\313\16\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\14\5\1\u017b\2\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\336\4\5\1\u017c\5\5\1\u017d\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017e\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\14\5\1\u017f\2\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u0180\20\5"+ + "\4\0\3\74\4\u0111\1\0\3\u0111\2\74\1\u0181\3\74"+ + "\1\u0111\1\u0182\1\74\1\u0111\2\74\11\0\1\74\1\u0111"+ + "\1\74\2\0\1\74\2\u0111\2\0\1\u0182\1\u0181\1\0"+ + "\1\u0111\1\0\3\74\4\0\2\74\1\0\5\74\2\u0111"+ + "\2\74\2\u0111\5\74\1\u0111\4\0\7\4\1\0\2\4"+ + "\1\223\14\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\1\u0183\16\4\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\4\0\7\4\1\0\3\4\1\u0184"+ + "\2\4\1\u0185\10\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\4\0\7\4\1\0\7\4\1\u0186\7\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\1\u0187\3\4\1\u0119\12\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\11\4\1\u0188\5\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\4\4\1\u0185\12\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\1\u0187\16\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\14\4\1\u0189\2\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\15\0\1\u018a\120\0\1\u018b\1\u018c\1\0\1\u018d"+ + "\110\0\1\u018e\1\0\1\u018f\114\0\1\u0190\116\0\1\u0191"+ + "\120\0\1\u0192\76\0\1\4\6\5\1\0\1\5\1\273"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\2\5\1\u0193"+ + "\1\5\1\u0194\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\u0195\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\2\5\1\171\1\5\1\u0158\1\303\1\u0159\1\u0196\1\5"+ + "\1\u015b\1\5\1\u015d\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u0197\1\0\2\5\1\u015f\16\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0198\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u0199\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u019a\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\270\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\15\0"+ + "\1\u012a\174\0\1\u019b\50\0\1\u019c\146\0\1\u019d\52\0"+ + "\1\u012e\174\0\1\u019e\50\0\1\u019f\146\0\1\u01a0\41\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\16\5\1\u01a1\2\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\1\5\1\u01a1\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\13\5\1\u01a1\5\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\15\5\1\u01a1\3\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\11\5\1\u01a2\7\5\4\0\3\74"+ + "\1\u0136\1\74\1\u0136\1\74\1\0\2\74\1\262\2\74"+ + "\1\262\11\74\11\0\1\74\1\u0136\1\74\2\0\2\74"+ + "\1\u0136\2\0\1\74\1\262\1\0\1\262\1\0\3\74"+ + "\4\0\2\74\1\0\5\74\2\u0136\12\74\7\0\1\u0136"+ + "\1\0\1\u0136\33\0\1\u0136\5\0\1\u0136\26\0\2\u0136"+ + "\16\0\1\4\6\5\1\0\12\5\1\u01a3\4\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\5\5\1\u01a4\11\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\273\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u016b\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u013e\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\u01a5\10\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\273\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\1\5\1\273\17\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\164\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\303\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\273\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\6\5\1\273\2\5\1\273"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\u01a6\20\5\4\0\1\4\6\5\1\0\6\5"+ + "\1\273\2\5\1\273\1\5\1\164\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01a6\20\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\u0121\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\u0171\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\u01a7\20\5\4\0\1\4"+ + "\6\5\1\0\14\5\1\u01a8\2\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u01a9\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\13\5\1\u01a7\3\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\3\5\1\u01aa\13\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u01ab\12\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\4\5\1\u01ac\6\5\1\u01ad\3\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\14\5\1\u01ae\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\7\5\1\u0155\11\5\4\0"+ + "\1\4\6\5\1\0\5\5\1\u01af\11\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\2\5\1\273\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u01b0\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\u0154\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\12\5\1\276\4\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\16\5\1\u0142\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\u010b\12\5\1\354\2\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\1\5\1\126\4\5\1\0\10\5\1\u01b1\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b2\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\13\5\1\367\3\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u013e"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b3"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u01b4"+ + "\1\5\1\311\2\5\1\u01b5\1\272\1\5\1\u0142\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u0168\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\5\1\u01b6\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01b7\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\2\5\1\u01b8\14\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\3\5\1\u01b9\13\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01ba\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01bb\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01bc\10\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\1\u0121\2\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01bd\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\5\1\u01be\15\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01bf\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\125\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\3\5\1\u01c0\13\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\10\5\1\u0180\6\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\125\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\15\5\1\u01c1\1\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\5\1\u01c2\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\276\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\u01c3\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\u016f\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\3\5\1\272\13\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\5\5\1\273\13\5\4\0\1\4\6\5\1\0"+ + "\4\5\1\u01c4\12\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\1\5\1\272\15\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\13\5\1\u01b5\2\5\1\u0142\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\u013e\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\4\5\1\u0171\12\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\u0178\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\10\5\1\u01c5\6\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\3\u0101\4\201"+ + "\1\u0101\3\201\6\u0101\1\201\2\u0101\1\201\6\u0101\1\203"+ + "\5\u0101\1\201\1\u0101\1\0\2\u0101\2\201\5\u0101\1\201"+ + "\20\u0101\2\201\2\u0101\2\201\5\u0101\1\201\4\u0101\3\206"+ + "\4\41\1\206\3\41\6\206\1\41\2\206\1\41\13\206"+ + "\1\u0109\1\41\2\206\1\u010a\1\206\2\41\5\206\1\41"+ + "\20\206\2\41\2\206\2\41\5\206\1\41\4\206\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\1\5\1\236\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\5\1\u01c6\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u01c7\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\7\5\1\u01c8\7\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\1\5\1\125\17\5\4\0\1\4\6\5\1\0"+ + "\11\5\1\273\5\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\21\5\4\0\7\74\1\0\12\74"+ + "\1\u01c9\4\74\11\0\3\74\2\0\3\74\2\0\1\u01c9"+ + "\1\74\1\0\1\74\1\0\3\74\4\0\2\74\1\0"+ + "\21\74\4\0\7\74\1\0\5\74\1\u01c9\11\74\11\0"+ + "\3\74\2\0\3\74\2\0\1\74\1\u01c9\1\0\1\74"+ + "\1\0\3\74\4\0\2\74\1\0\21\74\4\0\7\4"+ + "\1\0\3\4\1\u0184\13\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\2\4\1\u01ca\14\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\4\1\u01ca\15\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\10\4\1\u01cb\6\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\1\4\1\u0184\15\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\4\0\7\4\1\0\5\4\1\u01cc\11\4"+ + "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4"+ + "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\7\4"+ + "\1\0\15\4\1\u01cd\1\4\11\0\3\4\2\0\3\4"+ + "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4"+ + "\1\0\21\4\16\0\1\u011e\113\0\1\u01ce\120\0\1\u01cf"+ + "\2\0\1\u01d0\116\0\1\u01d1\106\0\1\u01d2\3\0\1\u0191"+ + "\122\0\1\u01d3\110\0\1\u01d0\111\0\1\u01d2\131\0\1\u01d4"+ + "\71\0\1\4\6\5\1\0\3\5\1\u01d5\13\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\u01bb\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\u01d6\16\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01b3\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\5\1\u01d7\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u01d8\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\10\5\1\u01d9\6\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u01da\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4"+ + "\2\5\2\0\1\5\1\273\1\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\36\0\1\u01dc\101\0\1\u012a\51\0\1\u019b\26\0"+ + "\1\u019d\1\u01dd\4\u019d\1\u01dd\17\u019d\3\u01dd\1\u019d\1\u01dd"+ + "\2\0\2\u01dd\1\0\2\u019d\2\0\3\u019d\1\0\1\u01dd"+ + "\2\u019d\1\u01dd\1\u019d\1\0\1\u01dd\1\u019d\5\u01dd\2\u019d"+ + "\1\u01dd\21\u019d\1\0\1\u01dd\34\0\1\u01de\101\0\1\u012e"+ + "\51\0\1\u019e\26\0\1\u01a0\1\u01df\4\u01a0\1\u01df\17\u01a0"+ + "\3\u01df\1\u01a0\1\u01df\2\0\2\u01df\1\0\2\u01a0\2\0"+ + "\3\u01a0\1\0\1\u01df\2\u01a0\1\u01df\1\u01a0\1\0\1\u01df"+ + "\1\u01a0\5\u01df\2\u01a0\1\u01df\21\u01a0\1\0\1\u01df\2\0"+ + "\1\4\5\5\1\u01e0\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5"+ + "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4"+ + "\4\0\2\5\1\0\20\5\1\u01e0\4\0\1\4\6\5"+ + "\1\0\5\5\1\u0168\11\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\1\5\1\313\15\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\6\5\1\273\2\5\1\273\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\1\5\1\u013e\15\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u0121\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\7\5\1\354\7\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\4\5\1\272\12\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\272\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\12\5\1\u01bb\4\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\1\u01e1\1\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\13\5\1\u01a5\3\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\1\5\1\u01e2\15\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\1\5\1\155\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\11\5\1\u01e3\5\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\2\5\1\125\14\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0"+ + "\1\4\6\5\1\0\13\5\1\u01b5\1\272\1\5\1\u0142"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\13\5\1\367\3\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\4\5\1\273\14\5"+ + "\4\0\1\4\6\5\1\0\7\5\1\u013f\7\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\1\273\4\5\1\273\4\5"+ + "\1\354\4\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\1\5\1\273\17\5\4\0\1\4\6\5"+ + "\1\0\7\5\1\u01bb\7\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\11\5\1\125\5\5\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5"+ + "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\1\125\1\5\1\0\21\5\4\0\1\4\6\5\1\0"+ + "\16\5\1\273\11\0\1\4\2\5\2\0\3\5\2\0"+ + "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0"+ + "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e4"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e5"+ + "\12\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e6\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01e7\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e8\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\4\5\1\u01e9\12\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\11\5\1\273\5\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\1\u0180\20\5\4\0\1\4\6\5\1\0\14\5\1\u013e"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0"+ + "\1\4\2\5\2\0\1\273\2\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4"+ + "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0"+ + "\1\4\1\5\1\4\4\0\2\5\1\0\1\u01ea\20\5"+ + "\4\0\1\4\6\5\1\0\14\5\1\144\2\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\15\5\1\273\1\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\1\4\6\5\1\0\11\5\1\u01a5\5\5\11\0"+ + "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5"+ + "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5"+ + "\4\0\7\4\1\0\7\4\1\u01ca\7\4\11\0\3\4"+ + "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4"+ + "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\12\4"+ + "\1\u01eb\4\4\11\0\3\4\2\0\3\4\2\0\2\4"+ + "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4"+ + "\4\0\7\4\1\0\16\4\1\u01ec\11\0\3\4\2\0"+ + "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0"+ + "\2\4\1\0\21\4\17\0\1\u01cf\114\0\1\u01ed\114\0"+ + "\1\u01ed\124\0\1\u01ee\106\0\1\u01cf\121\0\1\u01ef\125\0"+ + "\1\u01f0\70\0\1\4\6\5\1\0\5\5\1\u0121\11\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01b1\15\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\10\5\1\u01f1\6\5"+ + "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0"+ + "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0"+ + "\21\5\4\0\1\4\6\5\1\0\1\273\4\5\1\273"+ + "\4\5\1\354\3\5\1\120\11\0\1\4\2\5\2\0"+ + "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5"+ + "\1\4\4\0\2\5\1\0\1\5\1\273\17\5\4\0"+ + "\1\4\6\5\1\0\16\5\1\u01db\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5"+ + "\1\273\1\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\36\0\1\u019d"+ + "\115\0\1\u01a0\63\0\1\4\1\5\1\u01f2\4\5\1\0"+ + "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\273"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u01f3"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u01d5"+ + "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f4"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\276"+ + "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\u013e"+ + "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\270"+ + "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\u010b"+ + "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\306"+ + "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5"+ + "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5"+ + "\1\0\21\5\4\0\7\4\1\0\1\u0185\16\4\11\0"+ + "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0"+ + "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0"+ + "\14\4\1\u01ca\2\4\11\0\3\4\2\0\3\4\2\0"+ + "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0"+ + "\21\4\23\0\1\u01ed\120\0\1\u01f5\121\0\1\u01f6\67\0"+ + "\1\4\6\5\1\0\16\5\1\120\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\1\5\1\u01f7\4\5\1\0\17\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\10\5\1\u0173\6\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4"+ + "\6\5\1\0\7\5\1\125\7\5\11\0\1\4\2\5"+ + "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4"+ + "\1\5\1\4\4\0\2\5\1\0\21\5\14\0\1\u01d0"+ + "\131\0\1\u01ed\71\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[37050]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\1\6\1\7\1\5\1\7\1\5\1\10" + - "\1\11\1\12\1\13\1\14\1\5\1\15\1\16\1\17" + - "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27" + - "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37" + - "\1\40\1\7\1\5\1\41\1\42\1\43\1\44\1\45" + - "\1\46\1\30\2\5\1\47\1\5\1\50\1\51\2\4" + - "\1\31\1\52\1\36\1\30\1\5\1\53\1\36\1\54" + - "\4\5\2\7\1\5\1\55\10\5\1\31\1\36\1\56" + - "\1\57\12\60\1\61\30\60\1\62\5\60\1\63\14\60" + - "\1\64\2\60\1\65\24\60\12\66\1\67\30\66\1\70" + - "\22\66\1\71\2\66\1\72\24\66\7\4\1\0\17\4" + - "\11\0\3\4\2\0\3\4\2\0\2\4\1\0\1\4" + - "\1\0\3\4\4\0\2\4\1\0\21\4\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\1\5\1\73" + - "\4\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\3\74\1\7\1\74" + - "\1\7\1\75\1\0\1\74\1\75\3\74\1\76\4\74" + - "\1\77\4\74\11\0\1\74\1\7\1\74\2\0\2\74" + - "\1\7\2\0\1\77\1\76\1\100\1\74\1\0\3\74" + - "\4\0\2\74\1\0\5\74\2\7\12\74\13\0\1\36" + - "\20\0\1\36\65\0\1\4\6\5\1\0\1\5\1\101" + - "\1\5\1\102\4\5\1\103\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\4\5\1\104\1\105\1\5\1\106\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\2\5\1\107\16\5\4\0\1\4\6\5\1\0\1\5" + - "\1\110\1\111\2\5\1\112\1\113\1\114\1\115\1\116" + - "\1\5\1\117\1\120\1\121\1\122\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\123\1\0\1\124\20\5" + - "\4\0\1\4\6\5\1\0\2\5\1\125\1\5\1\126" + - "\1\5\1\127\10\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\130\7\5\1\131\3\5\1\120\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\132\1\5\1\133\2\5" + - "\1\134\1\135\1\5\1\136\1\5\1\137\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\140\1\141\1\0" + - "\1\142\3\5\1\143\3\5\1\144\10\5\4\0\1\4" + - "\6\5\1\0\1\5\1\145\12\5\1\146\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\2\5\1\147\14\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\150\3\5\1\151" + - "\2\5\1\152\3\5\1\153\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\154\1\155\1\0\21\5\4\0" + - "\1\4\6\5\1\0\4\5\1\156\12\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\157\5\5\1\160\1\161" + - "\1\5\1\162\4\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\163\2\5\1\164\1\165\4\5\11\0\1\4" + - "\2\5\2\0\1\5\1\166\1\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\167" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\170" + - "\6\5\1\165\5\5\1\171\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\1\5\1\172\6\5\1\173\3\5\1\174\2\5" + - "\11\0\1\4\2\5\2\0\1\5\1\175\1\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\1\5\1\171\17\5\33\0\1\176\116\0" + - "\1\36\233\0\1\36\1\0\1\177\16\0\1\200\44\0" + - "\27\201\1\202\3\201\1\203\4\201\1\204\2\201\1\0" + - "\52\201\34\0\1\30\116\0\1\30\110\0\1\36\6\0" + - "\1\36\56\0\40\42\1\205\2\42\1\206\1\207\51\42" + - "\1\4\6\5\1\0\2\5\1\210\3\5\1\210\1\5" + - "\1\211\2\5\1\137\1\212\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\213\20\5\4\0" + - "\1\4\6\5\1\0\6\5\1\214\1\215\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\216\1\0" + - "\21\5\4\0\3\74\1\7\1\74\1\7\1\75\1\0" + - "\1\74\1\75\3\74\1\76\4\74\1\77\4\74\11\0" + - "\1\74\1\7\1\217\2\0\2\74\1\7\2\0\1\77" + - "\1\76\1\100\1\74\1\0\3\74\4\0\2\74\1\0" + - "\2\74\1\217\2\74\2\7\12\74\54\0\1\46\50\0" + - "\1\100\1\0\1\100\33\0\1\100\5\0\1\100\26\0" + - "\2\100\16\0\7\4\1\0\1\220\1\221\1\4\1\222" + - "\1\4\1\223\4\4\1\224\1\225\3\4\11\0\3\4" + - "\2\0\3\4\1\226\1\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\1\4\6\5" + - "\1\0\3\5\1\227\4\5\1\230\3\5\1\231\1\5" + - "\1\232\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\4\5\1\233\14\5\4\0\1\4\6\5\1\0" + - "\6\5\1\134\2\5\1\234\1\5\1\137\2\5\1\235" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\236\1\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\237" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\120\0\1\36\116\0\1\36\12\60\1\0" + - "\30\60\1\0\5\60\1\0\14\60\1\0\2\60\1\0" + - "\24\60\13\0\1\240\53\0\1\241\60\0\1\242\152\0" + - "\1\243\117\0\1\244\24\0\12\66\1\0\30\66\1\0" + - "\22\66\1\0\2\66\1\0\24\66\13\0\1\245\53\0" + - "\1\246\115\0\1\247\117\0\1\250\24\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\1\5\1\251\1\0\1\252\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\11\5\1\253\1\5\1\254\3\5" + - "\1\255\1\5\4\0\7\74\1\0\17\74\11\0\3\74" + - "\2\0\3\74\2\0\2\74\1\0\1\74\1\0\3\74" + - "\4\0\2\74\1\0\21\74\4\0\3\74\1\256\1\74" + - "\1\256\1\74\1\257\17\74\10\0\1\257\1\74\1\256" + - "\1\74\2\0\2\74\1\256\2\0\2\74\1\0\1\74" + - "\1\0\3\74\4\0\2\74\1\0\5\74\2\256\12\74" + - "\4\0\7\74\1\0\12\74\1\260\4\74\11\0\3\74" + - "\2\0\3\74\2\0\1\260\1\74\1\0\1\74\1\0" + - "\3\74\4\0\2\74\1\0\21\74\4\0\7\74\1\0" + - "\5\74\1\260\11\74\11\0\3\74\2\0\3\74\2\0" + - "\1\74\1\260\1\0\1\74\1\0\3\74\4\0\2\74" + - "\1\0\21\74\4\0\3\74\1\100\1\74\1\100\1\261" + - "\1\0\1\74\1\261\1\262\2\74\1\262\11\74\11\0" + - "\1\74\1\100\1\74\2\0\2\74\1\100\2\0\1\74" + - "\1\262\1\0\1\262\1\0\3\74\4\0\2\74\1\0" + - "\5\74\2\100\12\74\4\0\1\4\6\5\1\0\2\5" + - "\1\263\14\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\2\5" + - "\1\264\14\5\11\0\1\4\2\5\2\0\1\265\2\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\12\5\1\266\4\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\12\5\1\267\4\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\270\10\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\7\5\1\271\7\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\272\7\5\1\273\3\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\274\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\275\1\276\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\5\5\1\277\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\300\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\301\7\5\1\136" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\302" + - "\15\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\7\5\1\125" + - "\3\5\1\303\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\5\5\1\304\11\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\7\5\1\160\2\5\1\305\4\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\5" + - "\1\306\1\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\307\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\10\5\1\310\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\311\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\6\5\1\134\1\312\3\5\1\137\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\313\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\314\4\5\1\315\1\316" + - "\2\5\1\317\1\320\1\321\1\322\1\323\1\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\2\5" + - "\1\324\16\5\4\0\1\4\6\5\1\0\1\5\1\325" + - "\1\5\1\326\13\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\4\5\1\327\4\5\1\330\3\5\1\331\1\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\332\1\0\21\5\4\0" + - "\1\4\6\5\1\0\4\5\1\333\10\5\1\334\1\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\3\5\1\335\15\5\4\0\1\4\6\5\1\0\11\5" + - "\1\136\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\336\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\14\5" + - "\1\337\2\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\160\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\340\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\341\4\5\1\342\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\343\2\5\1\134\4\5\1\137\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\344\10\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\7\5\1\272\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\4\5\1\345\7\5" + - "\1\174\1\346\1\347\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\350\1\0\1\351\20\5\4\0\1\4" + - "\6\5\1\0\3\5\1\352\1\310\12\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\2\5\1\353\14\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\3\5\1\354\13\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\355\6\5\1\356\6\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\4\5\1\357\1\5" + - "\1\333\10\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\360\1\270\10\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\14\5\1\361\2\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\227\13\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\362\2\5\1\363\6\5\1\364\1\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\275\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\365\13\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\273\20\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\366\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\367\2\5\1\370\2\5\1\171" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\306" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\371\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\273\1\5" + - "\1\144\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\372\6\5\1\373\3\5\1\374\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\375\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\155\1\0\21\5\4\0\1\4\6\5" + - "\1\0\16\5\1\376\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\276\16\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\360\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\303\1\377\1\u0100\7\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\216\1\0\21\5\34\0\10\36" + - "\56\0\33\u0101\1\u0102\7\u0101\1\0\101\u0101\1\u0103\3\u0101" + - "\1\u0102\7\u0101\1\0\57\u0101\1\u0104\4\u0101\1\201\1\u0101" + - "\1\201\2\u0101\1\201\4\u0101\1\201\2\u0101\1\201\3\u0101" + - "\1\u0105\4\u0101\1\201\1\u0106\1\u0107\1\0\3\201\1\u0106" + - "\17\u0101\1\201\3\u0101\1\u0107\2\u0101\2\u0106\16\u0101\5\206" + - "\1\42\4\206\1\42\1\206\1\42\2\206\1\42\4\206" + - "\1\42\2\206\1\42\3\206\1\42\4\206\2\42\1\u0108" + - "\1\0\4\42\17\206\1\42\3\206\1\u0108\2\206\2\42" + - "\56\206\1\u0109\3\206\1\u010a\51\206\1\4\6\5\1\0" + - "\13\5\1\137\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\1\213\20\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u010b\1\5\1\u010c\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\1\5\1\u010d\4\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\137\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u010e\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u010f\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u0110\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\3\74\4\u0111\1\0\3\u0111\6\74\1\u0111\2\74\1\u0111" + - "\2\74\11\0\1\74\1\u0111\1\74\2\0\1\74\2\u0111" + - "\2\0\2\74\1\0\1\u0111\1\0\3\74\4\0\2\74" + - "\1\0\5\74\2\u0111\2\74\2\u0111\5\74\1\u0111\4\0" + - "\7\4\1\0\1\4\1\u0112\15\4\11\0\3\4\2\0" + - "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0" + - "\2\4\1\0\21\4\4\0\7\4\1\0\4\4\1\u0113" + - "\1\u0114\1\4\1\u0115\7\4\11\0\3\4\2\0\3\4" + - "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4" + - "\1\0\21\4\4\0\7\4\1\0\2\4\1\u0116\1\4" + - "\1\u0117\12\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\3\4\1\u0118\13\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\4\4" + - "\1\u0119\12\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\7\4\1\u011a\7\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\14\0\1\u011b\1\u011c\1\0" + - "\1\u011d\1\0\1\u011e\4\0\1\u011f\1\u0120\24\0\1\226" + - "\45\0\1\4\6\5\1\0\16\5\1\u0121\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\315\4\5\1\320\4\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\4\5\1\333\12\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0122\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\13\5\1\u0123\3\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\u0124\1\u0125" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u0126" + - "\1\u0127\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\172\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\u0128\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\144\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\21\0\1\u0129\123\0\1\u012a\161\0" + - "\1\u012b\117\0\1\u012c\41\0\1\u012d\123\0\1\u012e\161\0" + - "\1\u012f\117\0\1\u0130\24\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0131\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0132\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\12\5\1\u0133\6\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\14\5\1\u0134\4\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\13\5\1\u0135\5\5\4\0\3\74\1\256\1\74\1\256" + - "\1\74\1\0\5\74\1\76\4\74\1\77\4\74\11\0" + - "\1\74\1\256\1\74\2\0\2\74\1\256\2\0\1\77" + - "\1\76\1\0\1\74\1\0\3\74\4\0\2\74\1\0" + - "\5\74\2\256\12\74\7\0\1\256\1\0\1\256\33\0" + - "\1\256\5\0\1\256\26\0\2\256\16\0\3\74\1\u0136" + - "\1\74\1\u0136\1\74\1\u0137\17\74\10\0\1\u0137\1\74" + - "\1\u0136\1\74\2\0\2\74\1\u0136\2\0\2\74\1\0" + - "\1\74\1\0\3\74\4\0\2\74\1\0\5\74\2\u0136" + - "\12\74\4\0\1\4\6\5\1\0\14\5\1\u0138\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\2\5\1\171\14\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\1\5\1\126\4\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\1\5\1\u0139\1\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\16\5\1\125\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\125\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u013a\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\273\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u013b\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u013c\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\2\5\1\273\14\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\12\5\1\u013d\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u013e\3\5\1\126\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u013f\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0140" + - "\1\0\21\5\4\0\1\4\6\5\1\0\1\5\1\273" + - "\6\5\1\u0141\3\5\1\310\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\2\5\1\u0142\16\5" + - "\4\0\1\4\6\5\1\0\1\5\1\367\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\352\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\u0143\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\273\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\u0144\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\273\16\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\5\5\1\354\11\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u0145\13\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\3\5\1\u0146\13\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u0147\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u0148\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\u0149\12\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u014a\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\7\5\1\u014b\2\5\1\u014c\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\u014d\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u014e\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\314\16\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\2\5\1\u0142\16\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\1\265" + - "\2\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\15\5\1\u014f\1\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\14\5\1\u0150\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\6\5\1\u0151\12\5\4\0\1\4\6\5" + - "\1\0\5\5\1\u0152\11\5\11\0\1\4\2\5\2\0" + - "\1\u0153\1\u0154\1\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\7\5\1\u0155" + - "\11\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\273\1\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u0156\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0157\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\310\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\276\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\7\5\1\126\7\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\157\1\171\1\5" + - "\1\u0158\1\303\1\u0159\1\u015a\1\5\1\u015b\1\u015c\1\u015d" + - "\3\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u015e\1\0\2\5\1\u015f\16\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u0160\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0161\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\1\5\1\u0162" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\227" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\u0163" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\10\5\1\u0164" + - "\6\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\12\5\1\u013b" + - "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\3\5\1\336" + - "\13\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0121" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0165" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\5\5\1\273" + - "\11\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\14\5\1\u0166" + - "\2\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\11\5\1\u013f" + - "\5\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\6\5\1\u0167" + - "\10\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0168\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\u0169\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\313\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\10\5" + - "\1\u016a\6\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\u016b\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\u016c\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u016d\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\6\5" + - "\1\273\2\5\1\u016e\5\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\u016f\20\5\4\0\1\4" + - "\6\5\1\0\4\5\1\273\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\144\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\10\5\1\125\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\2\5\1\u0170\16\5\4\0\1\4" + - "\6\5\1\0\2\5\2\273\1\5\1\273\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u0171\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u0172\4\5\1\273" + - "\2\5\1\u016e\5\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\1\u016f\20\5\4\0\1\4\6\5" + - "\1\0\6\5\1\u0173\2\5\1\u0174\4\5\1\347\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\u0175\3\5\1\u0176" + - "\7\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u0177\1\0\21\5\4\0\1\4\6\5\1\0\5\5" + - "\1\303\11\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\216\1\0\21\5\4\0\33\u0101\1\203\7\u0101" + - "\1\0\102\u0101\3\201\1\u0105\4\201\3\u0101\1\0\57\u0101" + - "\1\201\25\u0101\1\u0102\5\u0101\1\201\1\u0101\1\0\3\u0101" + - "\1\201\26\u0101\2\201\16\u0101\33\0\1\u0102\62\0\5\u0101" + - "\1\u0104\25\u0101\1\u0102\5\u0101\1\u0104\1\u0101\1\0\3\u0101" + - "\1\u0104\26\u0101\2\u0104\21\u0101\4\u0178\1\u0101\3\u0178\6\u0101" + - "\1\u0178\2\u0101\1\u0178\6\u0101\1\203\5\u0101\1\u0178\1\u0101" + - "\1\0\2\u0101\2\u0178\5\u0101\1\u0178\20\u0101\2\u0178\2\u0101" + - "\2\u0178\5\u0101\1\u0178\4\u0101\3\206\4\u0179\1\206\3\u0179" + - "\6\206\1\u0179\2\206\1\u0179\13\206\1\u0109\1\u0179\2\206" + - "\1\u010a\1\206\2\u0179\5\206\1\u0179\20\206\2\u0179\2\206" + - "\2\u0179\5\206\1\u0179\47\206\1\0\52\206\1\4\6\5" + - "\1\0\1\313\16\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\14\5\1\u017a\2\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\336\4\5\1\u017b\5\5\1\u017c\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\14\5\1\u017d\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\14\5\1\u017e\2\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\u017f\20\5\4\0" + - "\3\74\4\u0111\1\0\3\u0111\2\74\1\u0180\3\74\1\u0111" + - "\1\u0181\1\74\1\u0111\2\74\11\0\1\74\1\u0111\1\74" + - "\2\0\1\74\2\u0111\2\0\1\u0181\1\u0180\1\0\1\u0111" + - "\1\0\3\74\4\0\2\74\1\0\5\74\2\u0111\2\74" + - "\2\u0111\5\74\1\u0111\4\0\7\4\1\0\2\4\1\223" + - "\14\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0" + - "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0" + - "\7\4\1\0\1\u0182\16\4\11\0\3\4\2\0\3\4" + - "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4" + - "\1\0\21\4\4\0\7\4\1\0\3\4\1\u0183\2\4" + - "\1\u0184\10\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\4\0\7\4\1\0\7\4\1\u0185\7\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\1\u0186" + - "\3\4\1\u0119\12\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\11\4\1\u0187\5\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\4\4\1\u0184\12\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\1\u0186\16\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\14\4" + - "\1\u0188\2\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\15\0\1\u0189\120\0\1\u018a\1\u018b\1\0\1\u018c\110\0" + - "\1\u018d\1\0\1\u018e\114\0\1\u018f\116\0\1\u0190\120\0" + - "\1\u0191\76\0\1\4\6\5\1\0\1\5\1\273\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\2\5\1\u0192\1\5" + - "\1\u0193\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\u0194\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\2\5" + - "\1\171\1\5\1\u0158\1\303\1\u0159\1\u0195\1\5\1\u015b" + - "\1\5\1\u015d\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\u0196\1\0\2\5\1\u015f\16\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\u0197\1\0\21\5\4\0\1\4" + - "\6\5\1\0\14\5\1\u0198\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\10\5\1\u0199\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\5\5\1\270\11\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\15\0\1\u012a" + - "\174\0\1\u019a\50\0\1\u019b\146\0\1\u019c\52\0\1\u012e" + - "\174\0\1\u019d\50\0\1\u019e\146\0\1\u019f\41\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\16\5\1\u01a0\2\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\1\5\1\u01a0\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\13\5\1\u01a0\5\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\15\5\1\u01a0\3\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\11\5\1\u01a1\7\5\4\0\3\74\1\u0136" + - "\1\74\1\u0136\1\74\1\0\2\74\1\262\2\74\1\262" + - "\11\74\11\0\1\74\1\u0136\1\74\2\0\2\74\1\u0136" + - "\2\0\1\74\1\262\1\0\1\262\1\0\3\74\4\0" + - "\2\74\1\0\5\74\2\u0136\12\74\7\0\1\u0136\1\0" + - "\1\u0136\33\0\1\u0136\5\0\1\u0136\26\0\2\u0136\16\0" + - "\1\4\6\5\1\0\12\5\1\u01a2\4\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\5\5\1\u01a3\11\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\273\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u016a\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u013e\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\u01a4\10\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\273\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\1\5\1\273\17\5\4\0" + - "\1\4\6\5\1\0\13\5\1\164\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\303\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\273\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\6\5\1\273\2\5\1\273\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\u01a5\20\5\4\0\1\4\6\5\1\0\6\5\1\273" + - "\2\5\1\273\1\5\1\164\3\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\u01a5\20\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\u0121\1\0\21\5\4\0\1\4" + - "\6\5\1\0\15\5\1\u0170\1\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\1\u01a6\20\5\4\0\1\4\6\5" + - "\1\0\14\5\1\u01a7\2\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u01a8\1\0\21\5\4\0\1\4\6\5\1\0" + - "\13\5\1\u01a6\3\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\3\5\1\u01a9\13\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\4\5\1\u01aa\12\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\4\5\1\u01ab\6\5\1\u01ac\3\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\14\5\1\u01ad\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\7\5\1\u0155\11\5\4\0\1\4" + - "\6\5\1\0\5\5\1\u01ae\11\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\2\5" + - "\1\273\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u01af\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\1\5\1\u0154" + - "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\12\5\1\276\4\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\16\5\1\u0142\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\u010b\12\5\1\354\2\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\1\5\1\126\4\5\1\0\10\5\1\u01b0\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\u01b1\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\13\5\1\367\3\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\u013e\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01b2\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\6\5\1\u01b3\1\5" + - "\1\311\2\5\1\u01b4\1\272\1\5\1\u0142\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\u013e\1\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\u0167\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\1\5\1\u01b5\1\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\u01b6\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\2\5\1\u01b7\14\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\3\5\1\u01b8\13\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\u01b9\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u01ba\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\6\5\1\u01bb\10\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\1\u0121\2\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\5\1\u01bc\15\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u01bd\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\125\1\0\21\5\4\0\1\4" + - "\6\5\1\0\3\5\1\u01be\13\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\10\5\1\u017f\6\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\4\5\1\125\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\15\5\1\u01bf\1\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\5\1\u01c0\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\276\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\u01c1" + - "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\11\5" + - "\1\u016e\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\3\5" + - "\1\272\13\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\5\5\1\273\13\5\4\0\1\4\6\5\1\0\4\5" + - "\1\u01c2\12\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\1\5" + - "\1\272\15\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\13\5" + - "\1\u01b4\2\5\1\u0142\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\u013e\1\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\4\5\1\u0170\12\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\u0177\1\0\21\5\4\0\1\4\6\5\1\0" + - "\10\5\1\u01c3\6\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\3\u0101\4\201\1\u0101" + - "\3\201\6\u0101\1\201\2\u0101\1\201\6\u0101\1\203\5\u0101" + - "\1\201\1\u0101\1\0\2\u0101\2\201\5\u0101\1\201\20\u0101" + - "\2\201\2\u0101\2\201\5\u0101\1\201\4\u0101\3\206\4\42" + - "\1\206\3\42\6\206\1\42\2\206\1\42\13\206\1\u0109" + - "\1\42\2\206\1\u010a\1\206\2\42\5\206\1\42\20\206" + - "\2\42\2\206\2\42\5\206\1\42\4\206\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\1\5\1\236\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\5" + - "\1\u01c4\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u01c5\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\7\5" + - "\1\u01c6\7\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\1\4\6\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\1\5\1\125\17\5\4\0\1\4\6\5\1\0\11\5" + - "\1\273\5\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\21\5\4\0\7\74\1\0\12\74\1\u01c7" + - "\4\74\11\0\3\74\2\0\3\74\2\0\1\u01c7\1\74" + - "\1\0\1\74\1\0\3\74\4\0\2\74\1\0\21\74" + - "\4\0\7\74\1\0\5\74\1\u01c7\11\74\11\0\3\74" + - "\2\0\3\74\2\0\1\74\1\u01c7\1\0\1\74\1\0" + - "\3\74\4\0\2\74\1\0\21\74\4\0\7\4\1\0" + - "\3\4\1\u0183\13\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\2\4\1\u01c8\14\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\1\4\1\u01c8\15\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\10\4\1\u01c9\6\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\1\4\1\u0183\15\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\4\0\7\4\1\0\5\4\1\u01ca\11\4\11\0" + - "\3\4\2\0\3\4\2\0\2\4\1\0\1\4\1\0" + - "\3\4\4\0\2\4\1\0\21\4\4\0\7\4\1\0" + - "\15\4\1\u01cb\1\4\11\0\3\4\2\0\3\4\2\0" + - "\2\4\1\0\1\4\1\0\3\4\4\0\2\4\1\0" + - "\21\4\16\0\1\u011e\113\0\1\u01cc\120\0\1\u01cd\2\0" + - "\1\u01ce\116\0\1\u01cf\106\0\1\u01d0\3\0\1\u0190\122\0" + - "\1\u01d1\110\0\1\u01ce\111\0\1\u01d0\131\0\1\u01d2\71\0" + - "\1\4\6\5\1\0\3\5\1\u01d3\13\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\14\5\1\u01ba\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\u01d4\16\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\11\5\1\u01b2\5\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\5\1\u01d5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u01d6\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\10\5\1\u01d7\6\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u01d8\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\16\5\1\u01d9\11\0\1\4\2\5" + - "\2\0\1\5\1\273\1\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\36\0\1\u01da\101\0\1\u012a\51\0\1\u019a\26\0\1\u019c" + - "\1\u01db\4\u019c\1\u01db\17\u019c\3\u01db\1\u019c\1\u01db\2\0" + - "\2\u01db\1\0\2\u019c\2\0\3\u019c\1\0\1\u01db\2\u019c" + - "\1\u01db\1\u019c\1\0\1\u01db\1\u019c\5\u01db\2\u019c\1\u01db" + - "\21\u019c\2\0\1\u01db\33\0\1\u01dc\101\0\1\u012e\51\0" + - "\1\u019d\26\0\1\u019f\1\u01dd\4\u019f\1\u01dd\17\u019f\3\u01dd" + - "\1\u019f\1\u01dd\2\0\2\u01dd\1\0\2\u019f\2\0\3\u019f" + - "\1\0\1\u01dd\2\u019f\1\u01dd\1\u019f\1\0\1\u01dd\1\u019f" + - "\5\u01dd\2\u019f\1\u01dd\21\u019f\2\0\1\u01dd\1\0\1\4" + - "\5\5\1\u01de\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\3\5\2\0" + - "\2\5\1\0\1\5\1\0\1\4\1\5\1\4\4\0" + - "\2\5\1\0\20\5\1\u01de\4\0\1\4\6\5\1\0" + - "\5\5\1\u0167\11\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\1\5\1\313\15\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\6\5\1\273\2\5\1\273\5\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\1\5\1\u013e\15\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\11\5\1\u0121\5\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\7\5\1\354\7\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\4\5\1\272\12\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\11\5\1\272\5\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\12\5\1\u01ba\4\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\17\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\1\u01df\1\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\13\5\1\u01a4\3\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\1\5\1\u01e0\15\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\1\5\1\155\1\0\21\5\4\0\1\4" + - "\6\5\1\0\11\5\1\u01e1\5\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\2\5\1\125\14\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\21\5\4\0\1\4" + - "\6\5\1\0\13\5\1\u01b4\1\272\1\5\1\u0142\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\1\u013e\1\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\13\5\1\367\3\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\4\5\1\273\14\5\4\0" + - "\1\4\6\5\1\0\7\5\1\u013f\7\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\1\273\4\5\1\273\4\5\1\354" + - "\4\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\1\5\1\273\17\5\4\0\1\4\6\5\1\0" + - "\7\5\1\u01ba\7\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\11\5\1\125\5\5\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\21\5\4\0\1\4\6\5\1\0" + - "\17\5\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\1\125" + - "\1\5\1\0\21\5\4\0\1\4\6\5\1\0\16\5" + - "\1\273\11\0\1\4\2\5\2\0\3\5\2\0\2\5" + - "\1\0\1\5\1\0\1\4\1\5\1\4\4\0\2\5" + - "\1\0\21\5\4\0\1\4\6\5\1\0\17\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\1\5\1\u01e2\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\1\5\1\u01e3\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u01e4\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u01e5\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\4\5\1\u01e6\12\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\11\5\1\273\5\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\1\u017f" + - "\20\5\4\0\1\4\6\5\1\0\14\5\1\u013e\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\17\5\11\0\1\4" + - "\2\5\2\0\1\273\2\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\17\5\11\0\1\4\2\5" + - "\2\0\3\5\2\0\2\5\1\0\1\5\1\0\1\4" + - "\1\5\1\4\4\0\2\5\1\0\1\u01e7\20\5\4\0" + - "\1\4\6\5\1\0\14\5\1\144\2\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\15\5\1\273\1\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\1\4\6\5\1\0\11\5\1\u01a4\5\5\11\0\1\4" + - "\2\5\2\0\3\5\2\0\2\5\1\0\1\5\1\0" + - "\1\4\1\5\1\4\4\0\2\5\1\0\21\5\4\0" + - "\7\4\1\0\7\4\1\u01c8\7\4\11\0\3\4\2\0" + - "\3\4\2\0\2\4\1\0\1\4\1\0\3\4\4\0" + - "\2\4\1\0\21\4\4\0\7\4\1\0\12\4\1\u01e8" + - "\4\4\11\0\3\4\2\0\3\4\2\0\2\4\1\0" + - "\1\4\1\0\3\4\4\0\2\4\1\0\21\4\4\0" + - "\7\4\1\0\16\4\1\u01e9\11\0\3\4\2\0\3\4" + - "\2\0\2\4\1\0\1\4\1\0\3\4\4\0\2\4" + - "\1\0\21\4\17\0\1\u01cd\114\0\1\u01ea\114\0\1\u01ea" + - "\124\0\1\u01eb\106\0\1\u01cd\121\0\1\u01ec\125\0\1\u01ed" + - "\70\0\1\4\6\5\1\0\5\5\1\u0121\11\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\5\1\u01b0\15\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\10\5\1\u01ee\6\5\11\0" + - "\1\4\2\5\2\0\3\5\2\0\2\5\1\0\1\5" + - "\1\0\1\4\1\5\1\4\4\0\2\5\1\0\21\5" + - "\4\0\1\4\6\5\1\0\1\273\4\5\1\273\4\5" + - "\1\354\3\5\1\120\11\0\1\4\2\5\2\0\3\5" + - "\2\0\2\5\1\0\1\5\1\0\1\4\1\5\1\4" + - "\4\0\2\5\1\0\1\5\1\273\17\5\4\0\1\4" + - "\6\5\1\0\16\5\1\u01d9\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\17\5\11\0\1\4\2\5\2\0\1\5\1\273" + - "\1\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\36\0\1\u019c\115\0" + - "\1\u019f\63\0\1\4\1\5\1\u01ef\4\5\1\0\17\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\273\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\u01f0\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\14\5\1\u01d3\2\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u01f1\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\10\5\1\276\6\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\7\5\1\u013e\7\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\12\5\1\270\4\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\1\5\1\u010b\15\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\1\4\6\5\1\0\11\5\1\306\5\5" + - "\11\0\1\4\2\5\2\0\3\5\2\0\2\5\1\0" + - "\1\5\1\0\1\4\1\5\1\4\4\0\2\5\1\0" + - "\21\5\4\0\7\4\1\0\1\u0184\16\4\11\0\3\4" + - "\2\0\3\4\2\0\2\4\1\0\1\4\1\0\3\4" + - "\4\0\2\4\1\0\21\4\4\0\7\4\1\0\14\4" + - "\1\u01c8\2\4\11\0\3\4\2\0\3\4\2\0\2\4" + - "\1\0\1\4\1\0\3\4\4\0\2\4\1\0\21\4" + - "\23\0\1\u01ea\120\0\1\u01f2\121\0\1\u01f3\67\0\1\4" + - "\6\5\1\0\16\5\1\120\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\1\5" + - "\1\u01f4\4\5\1\0\17\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\10\5\1\u0172\6\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\4\0\1\4\6\5" + - "\1\0\7\5\1\125\7\5\11\0\1\4\2\5\2\0" + - "\3\5\2\0\2\5\1\0\1\5\1\0\1\4\1\5" + - "\1\4\4\0\2\5\1\0\21\5\14\0\1\u01ce\131\0" + - "\1\u01ea\71\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[36894]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\25\1\1\11\4\1\1\11\2\1\1\11\6\1" + - "\1\11\1\1\1\11\7\1\1\11\5\1\1\11\105\1" + - "\1\0\2\11\2\1\1\11\3\1\1\11\16\1\1\0" + - "\11\1\2\0\1\11\6\0\6\1\1\0\122\1\1\11" + - "\7\1\1\11\20\1\6\0\10\1\10\0\6\1\1\0" + - "\121\1\4\0\1\1\4\0\10\1\2\0\1\1\2\0" + - "\55\1\7\0\7\1\4\0\14\1\1\11\3\0\4\1" + - "\2\0\1\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[500]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public CTokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\25\1\1\11\6\1\1\11\6\1\1\11\1\1"+ + "\2\11\7\1\1\11\5\1\1\11\105\1\1\0\2\11"+ + "\2\1\1\11\3\1\1\11\16\1\1\0\11\1\2\0"+ + "\1\11\6\0\6\1\1\0\122\1\1\11\7\1\1\11"+ + "\20\1\6\0\10\1\10\0\6\1\1\0\122\1\4\0"+ + "\1\1\4\0\10\1\2\0\1\1\2\0\56\1\7\0"+ + "\7\1\4\0\15\1\1\11\3\0\4\1\2\0\1\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[503]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 184) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public CTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public CTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 184) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 27: { - addToken(Token.PREPROCESSOR); - } - case 30: - break; - case 7: { - addNullToken(); - return firstToken; - } - case 31: - break; - case 24: { - addToken(Token.LITERAL_CHAR); - } - case 32: - break; - case 21: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 33: - break; - case 17: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 34: - break; - case 9: { - addToken(Token.WHITESPACE); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 35: - break; - case 26: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 36: - break; - case 18: { - addToken(Token.ERROR_CHAR); /* addNullToken(); return firstToken; */ - } - case 37: - break; - case 25: { - addToken(Token.ERROR_STRING_DOUBLE); - } - case 38: - break; - case 14: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 39: - break; - case 15: { - addToken(Token.RESERVED_WORD); - } - case 40: - break; - case 5: { - addToken(Token.SEPARATOR); - } - case 41: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 42: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 43: - break; - case 16: { - start = zzMarkedPos - 2; - yybegin(EOL_COMMENT); - } - case 44: - break; - case 22: { - addToken(Token.FUNCTION); - } - case 45: - break; - case 6: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 46: - break; - case 8: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 47: - break; - case 23: { - addToken(Token.DATA_TYPE); - } - case 48: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 49: - break; - case 19: { - addToken(Token.ERROR_CHAR); - } - case 50: - break; - case 20: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 51: - break; - case 29: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 52: - break; - case 28: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 53: - break; - case 13: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 54: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 55: - break; - case 4: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 27: + { addToken(Token.PREPROCESSOR); + } + case 31: break; + case 7: + { addNullToken(); return firstToken; + } + case 32: break; + case 24: + { addToken(Token.LITERAL_CHAR); + } + case 33: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 34: break; + case 17: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 35: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 36: break; + case 26: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 37: break; + case 18: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 38: break; + case 25: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 39: break; + case 14: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 40: break; + case 15: + { addToken(Token.RESERVED_WORD); + } + case 41: break; + case 5: + { addToken(Token.SEPARATOR); + } + case 42: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 43: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 44: break; + case 16: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 45: break; + case 22: + { addToken(Token.FUNCTION); + } + case 46: break; + case 6: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 47: break; + case 8: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 48: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 49: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 50: break; + case 19: + { addToken(Token.ERROR_CHAR); + } + case 51: break; + case 20: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 52: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 53: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 54: break; + case 30: + { addToken(Token.RESERVED_WORD_2); + } + case 55: break; + case 13: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 56: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 57: break; + case 4: + { addToken(Token.OPERATOR); + } + case 58: break; + case 10: + { + } + case 59: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 60: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 56: - break; - case 10: { + case 504: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 57: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 505: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 58: - break; + case 506: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 501: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 502: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 503: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex old mode 100644 new mode 100755 index b53f6ffa2..d5dea3c27 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.flex @@ -2,23 +2,9 @@ * 12/23/2010 * * ClojureTokenMaker.java - Scanner for Clojure. - * Copyright (C) 2010 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -31,8 +17,9 @@ import org.fife.ui.rsyntaxtextarea.*; /** * Scanner for the Clojure programming language.

            * - * This was graciously donated by the folks at the + * The original version of this class was graciously donated by the folks at the * Fiji project. + * This version has been modified to fix a few issues. * Its original location was * here. *

            @@ -55,7 +42,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

              - *
            • The generated ClojureTokenMaker.java file will contain two + *
            • The generated ClojureTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -135,6 +122,7 @@ import org.fife.ui.rsyntaxtextarea.*; * occurs. * @param hyperlink Whether this token is a hyperlink. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); @@ -143,13 +131,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { ";", null }; } @@ -197,7 +182,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -208,9 +193,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -225,7 +209,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -257,9 +241,7 @@ OctalDigit = ([0-7]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) -UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) -ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) -StringLiteral = ([\"]) +StringLiteralStart = ([\"]) CharLiteral = ("\\."|"\\space"|"\\tab"|"\\newline") AnyCharacter = ([.]*) Separator = ([\(\)\{\}\[\]]) @@ -289,7 +271,7 @@ Unquote = (\(\~@\|\~\)) DispatchStart = ("#^"|"#^{") Dispatch = ({DispatchStart}[^\s\t\n;\"}]*([ \t\n;\"]|"}")) VarQuote = ("#'"[.]*[ \t\n;(\"]) -DefName = (\s*[a-zA-Z0-9?!\-+*\./<>]*) +DefName = ([a-zA-Z0-9?!\-+*\./<>_]*) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"<"|"*"|">="|"%"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|">>>") AssignmentOperator = ("=") @@ -314,185 +296,222 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) { -"fn" | -"if" | +"case" | +"class" | "cond" | +"condp" | "def" | +"defmacro" | "defn" | +"do" | +"fn" | +"for" | +"if" | +"if-let" | +"if-not" | +"instance?" | "let" | -"new" | -"defmacro" | -"recur" | "loop" | -"thisfn" | -"do" | +"monitor-enter" | +"monitor-exit" | +"new" | "quote" | -"the-var" | -"class" | -"instance?" | +"recur" | +"set!" | +"this" | "throw" | "try-finally" | -"set!" | -"monitor-enter" | -"monitor-exit" { addToken(Token.RESERVED_WORD); } - -"load-file" | -"eql-ref?" | -"list" | -"cons" | -"conj" | -"vector" | -"hash-map" | -"sorted-map" | -"sorted-map-by" | -"meta" | -"with-meta" | +"var" | "when" | -"when-not" | -"nil?" | -"not" | -"first" | -"rest" | -"second" | -"ffirst" | -"frest" | -"rfirst" | -"rrest" | -"eql?" | -"str" | -"strcat" | -"gensym" | +"when-first" | +"when-let" | +"when-not" { addToken(Token.RESERVED_WORD); } + +"*warn-on-reflection*" | +"*1" | +"*2" | +"*3" | +"*agent*" | +"*allow-unresolved-args*" | +"*assert*" | +"*clojure-version*" | +"*command-line-args*" | +"*compile-files*" | +"*compile-path*" | +"*e" | +"*err*" | +"*file*" | +"*flush-on-newline*" | +"*fn-loader*" | +"*in*" | +"*math-context*" | +"*ns*" | +"*out*" | +"*print-dup*" | +"*print-length*" | +"*print-level*" | +"*print-meta*" | +"*print-readably*" | +"*read-eval*" | +"*source-path*" | +"*unchecked-math*" | +"*use-context-classloader*" { addToken(Token.VARIABLE); } + +"*current-namespace*" | +"*in*" | +"*out*" | +"*print-meta*" | +"->" | +".." | +"agent" | +"agent-errors" | +"agent-of" | +"aget" | +"alter" | +"and" | +"any" | +"appl" | "apply" | -"list*" | -"delay" | -"lazy-cons" | -"fnseq" | -"concat" | -"inc" | -"dec" | -"pos?" | -"neg?" | -"zero?" | -"quot" | -"rem" | +"array" | +"aset" | +"aset-boolean" | +"aset-byte" | +"aset-double" | +"aset-float" | +"aset-int" | +"aset-long" | +"aset-short" | +"assoc" | +"binding" | +"boolean" | +"byte" | +"char" | +"clear-agent-errors" | +"commute" | +"comp" | "complement" | +"concat" | +"conj" | +"cons" | "constantly" | -"identity" | -"seq" | "count" | -"assoc" | +"cycle" | +"dec" | +"defmethod" | +"defmulti" | +"delay" | +"deref" | "dissoc" | +"doseq" | +"dotimes" | +"doto" | +"double" | +"drop" | +"drop-while" | +"ensure" | +"eql-ref?" | +"eql?" | +"eval" | +"every" | +"ffirst" | +"filter" | "find" | +"find-var" | +"first" | +"float" | +"fnseq" | +"frest" | +"gensym" | +"get" | +"hash-map" | +"identity" | +"implement" | +"import" | +"in-namespace" | +"inc" | +"int" | +"into" | +"into-array" | +"iterate" | +"key" | "keys" | -"vals" | +"lazy-cons" | +"list" | +"list*" | +"load-file" | +"locking" | +"long" | +"make-array" | +"make-proxy" | +"map" | +"mapcat" | +"max" | +"memfn" | "merge" | -"rseq" | -"sym" | +"meta" | +"min" | "name" | "namespace" | -"locking" | -".." | -"->" | -"defmulti" | -"defmethod" | -"remove-method" | -"binding" | -"find-var" | +"neg?" | +"newline" | +"nil?" | +"not" | +"not-any" | +"not-every" | +"nth" | +"or" | +"peek" | +"pmap" | +"pop" | +"pos?" | +"print" | +"prn" | +"quot" | +"range" | +"read" | +"reduce" | "ref" | -"deref" | -"commute" | -"alter" | +"refer" | +"rem" | +"remove-method" | +"repeat" | +"replicate" | +"rest" | +"reverse" | +"rfirst" | +"rrest" | +"rseq" | +"second" | +"seq" | "set" | -"ensure" | +"short" | +"sorted-map" | +"sorted-map-by" | +"split-at" | +"split-with" | +"str" | +"strcat" | +"sym" | "sync" | -"agent" | -"agent-of" | -"agent-errors" | -"clear-agent-errors" | -"reduce" | -"reverse" | -"comp" | -"appl" | -"every" | -"not-every" | -"any" | -"not-any" | -"map" | -"pmap" | -"mapcat" | -"filter" | "take" | "take-while" | -"drop" | -"drop-while" | -"zipmap" | -"cycle" | -"split-at" | -"split-with" | -"repeat" | -"replicate" | -"iterate" | -"range" | -"doseq" | -"dotimes" | -"into" | -"eval" | -"import" | +"time" | "unimport" | -"refer" | -"unrefer" | -"in-namespace" | "unintern" | -"into-array" | -"array" | -"make-proxy" | -"implement" | -"prn" | -"print" | -"newline" | -"*out*" | -"*current-namespace*" | -"*print-meta*" -"doto" | -"memfn" | -"read" | -"*in*" | -"time" | -"key" | +"unrefer" | "val" | -"int" | -"long" | -"float" | -"double" | -"short" | -"byte" | -"boolean" | -"char" | -"aget" | -"aset" | -"aset-boolean" | -"aset-int" | -"aset-long" | -"aset-float" | -"aset-double" | -"aset-short" | -"aset-byte" | -"make-array" | -"peek" | -"pop" | -"nth" | -"get" | -"and" | -"or" { addToken(Token.FUNCTION); } +"vals" | +"vector" | +"with-meta" | +"zero?" | +"zipmap" { addToken(Token.FUNCTION); } {LineTerminator} { addNullToken(); return firstToken; } {WhiteSpace}+ { addToken(Token.WHITESPACE); } {CharLiteral} { addToken(Token.LITERAL_CHAR); } -{StringLiteral} { start = zzMarkedPos-1; yybegin(STRING); } - //{UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } - //{ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } +{StringLiteralStart} { start = zzMarkedPos-1; yybegin(STRING); } {Nil} { addToken(Token.DATA_TYPE); } @@ -524,20 +543,19 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) } { - - [^\n\"]+ {} - \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - "\"\"" {} - "\"" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \"\" {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - } { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java old mode 100644 new mode 100755 index 163d06111..185cdcf1a --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ClojureTokenMaker.java @@ -1,1901 +1,2304 @@ -/* The following code was generated by JFlex 1.4.1 on 12/23/10 11:06 AM */ +/* The following code was generated by JFlex 1.4.1 on 7/9/16 7:07 PM */ /* * 12/23/2010 * * ClojureTokenMaker.java - Scanner for Clojure. - * Copyright (C) 2010 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.io.Reader; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** - * Scanner for the Clojure programming language. - *

              - * - * This was graciously donated by the folks at the Fiji - * project. Its original location was here. - *

              - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

              - * - * The actual algorithm generated for scanning has, of course, not been modified. + * Scanner for the Clojure programming language.

              + * + * The original version of this class was graciously donated by the folks at the + * Fiji project. + * This version has been modified to fix a few issues. + * Its original location was + * here. *

              - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * * If you wish to regenerate this file yourself, keep in mind the following: *

                - *
              • The generated ClojureTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
              • - *
              • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
              • - *
              • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
              • + *
              • The generated ClojureTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • *
              - * - * + * + * */ public class ClojureTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int EOL_COMMENT = 2; - public static final int STRING = 1; - public static final int YYINITIAL = 0; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\56\1\15\1\0\1\36\1\34\22\0\1\57\1\67\1\16" + - "\1\52\1\71\1\65\1\65\1\12\1\44\1\47\1\64\1\61\1\72" + - "\1\43\1\17\1\66\1\4\3\7\4\7\2\5\1\2\1\1\1\62" + - "\1\63\1\60\1\35\1\51\3\6\1\41\1\42\1\41\5\3\1\40" + - "\13\3\1\37\2\3\1\33\1\11\1\33\1\53\1\70\1\46\1\22" + - "\1\26\1\23\1\75\1\24\1\14\1\104\1\73\1\32\1\103\1\106" + - "\1\31\1\76\1\27\1\74\1\21\1\77\1\13\1\20\1\25\1\10" + - "\1\100\1\30\1\102\1\101\1\105\1\54\1\45\1\55\1\50\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\1\2\0\1\2\1\3\1\4\1\1\2\5\1\1" + - "\1\2\2\1\1\6\1\7\14\1\1\10\1\4\1\11" + - "\1\4\1\10\1\4\1\2\4\4\11\1\1\12\1\13" + - "\1\14\2\12\1\15\2\12\1\16\2\17\1\20\1\17" + - "\2\21\1\17\1\5\1\17\1\1\1\22\3\0\6\1" + - "\1\23\2\1\1\24\51\1\1\23\4\1\4\0\1\4" + - "\10\1\1\23\12\1\1\12\4\0\1\20\1\21\1\1" + - "\1\20\2\1\3\0\4\1\1\24\5\1\1\24\6\1" + - "\2\24\40\1\1\23\1\25\1\24\12\1\1\24\3\1" + - "\2\0\2\25\7\1\1\23\10\1\1\24\4\1\4\0" + - "\3\1\2\0\5\1\1\24\4\1\2\24\3\1\2\24" + - "\3\1\1\26\1\1\1\24\5\1\1\24\3\1\1\24" + - "\1\1\1\24\3\1\1\24\3\1\2\0\11\1\1\24" + - "\2\1\1\0\1\27\1\0\1\1\2\0\7\1\1\24" + - "\37\1\2\0\1\1\1\0\107\1\1\24\27\1"; - - private static int[] zzUnpackAction() { - int[] result = new int[466]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int STRING = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\57\1\16\1\0\1\37\1\35\22\0\1\60\1\71\1\17"+ + "\1\53\1\72\1\67\1\67\1\12\1\45\1\50\1\66\1\63\1\73"+ + "\1\44\1\20\1\70\1\4\1\15\1\15\1\15\4\7\2\5\1\2"+ + "\1\1\1\64\1\65\1\62\1\36\1\52\3\6\1\42\1\43\1\42"+ + "\5\3\1\41\13\3\1\40\2\3\1\34\1\11\1\34\1\54\1\61"+ + "\1\47\1\23\1\27\1\24\1\76\1\25\1\14\1\104\1\74\1\33"+ + "\1\105\1\106\1\32\1\77\1\30\1\75\1\22\1\101\1\13\1\21"+ + "\1\26\1\10\1\103\1\31\1\100\1\102\1\107\1\55\1\46\1\56"+ + "\1\51\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\1\2\0\1\2\1\3\1\4\1\1\2\5\1\1"+ + "\1\2\2\1\1\6\1\7\14\1\1\10\1\4\1\11"+ + "\1\4\1\10\1\4\1\2\4\4\11\1\1\12\1\13"+ + "\1\14\1\15\2\12\1\16\2\12\1\17\2\20\1\21"+ + "\1\20\2\22\1\20\1\5\1\20\1\1\1\23\3\0"+ + "\6\1\1\24\3\1\1\25\52\1\1\24\4\1\4\0"+ + "\1\4\3\1\1\26\4\1\1\26\11\1\1\24\13\1"+ + "\1\13\1\12\4\0\1\21\1\22\1\1\1\21\2\1"+ + "\3\0\4\1\1\25\5\1\1\25\4\1\1\24\2\1"+ + "\2\25\40\1\1\24\1\27\1\25\13\1\1\25\3\1"+ + "\2\0\2\27\26\1\1\24\10\1\1\25\4\1\4\0"+ + "\3\1\2\0\4\1\1\25\4\1\2\25\2\1\1\25"+ + "\1\24\1\25\3\1\1\30\1\1\1\25\3\1\1\25"+ + "\3\1\1\24\1\1\1\25\5\1\1\25\3\1\2\0"+ + "\26\1\1\25\2\1\1\0\1\31\1\0\1\1\2\0"+ + "\7\1\1\25\52\1\2\0\1\1\1\0\176\1\1\25"+ + "\112\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[627]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\110\0\220\0\330\0\330\0\u0120\0\u0168\0\u01b0"+ + "\0\u01f8\0\u0240\0\u0288\0\u02d0\0\u0318\0\330\0\330\0\u0360"+ + "\0\u03a8\0\u03f0\0\u0438\0\u0480\0\u04c8\0\u0510\0\u0558\0\u05a0"+ + "\0\u05e8\0\u0630\0\u0678\0\330\0\u0168\0\u06c0\0\u0708\0\u0750"+ + "\0\330\0\u0798\0\u07e0\0\u0828\0\u0870\0\u08b8\0\u0900\0\u0948"+ + "\0\u0990\0\u09d8\0\u0a20\0\u0a68\0\u0ab0\0\u0af8\0\u0b40\0\u0b88"+ + "\0\u0bd0\0\330\0\u0c18\0\u0c60\0\u0ca8\0\330\0\u0cf0\0\u0d38"+ + "\0\u0d80\0\u0dc8\0\u0e10\0\u0e58\0\u0ea0\0\u0e10\0\u0ee8\0\u0f30"+ + "\0\u0e10\0\u0f78\0\u0fc0\0\330\0\u1008\0\u1050\0\u1098\0\u10e0"+ + "\0\u1128\0\u1170\0\u11b8\0\u1200\0\u1248\0\u1290\0\u12d8\0\u1320"+ + "\0\u1368\0\u0168\0\u13b0\0\u13f8\0\u1440\0\u1488\0\u14d0\0\u1518"+ + "\0\u1560\0\u15a8\0\u15f0\0\u1638\0\u1680\0\u16c8\0\u1710\0\u1758"+ + "\0\u17a0\0\u17e8\0\u1830\0\u1878\0\u18c0\0\u1908\0\u1950\0\u1998"+ + "\0\u19e0\0\u1a28\0\u1a70\0\u1ab8\0\u1b00\0\u1b48\0\u1b90\0\u1bd8"+ + "\0\u1c20\0\u1c68\0\u1cb0\0\u1cf8\0\u1d40\0\u1d88\0\u1dd0\0\u1e18"+ + "\0\u1e60\0\u1ea8\0\u1ef0\0\u1f38\0\u1f80\0\u1fc8\0\u2010\0\u2058"+ + "\0\u20a0\0\u20e8\0\u2130\0\u2178\0\u21c0\0\u2208\0\u2250\0\u2298"+ + "\0\u22e0\0\u0168\0\u2328\0\u2370\0\u23b8\0\u2400\0\u2448\0\u2490"+ + "\0\u24d8\0\u2520\0\u2568\0\u25b0\0\u25f8\0\u2640\0\u2688\0\u26d0"+ + "\0\u2718\0\u2760\0\u27a8\0\u27f0\0\u2838\0\u2880\0\u28c8\0\u2910"+ + "\0\u2958\0\u29a0\0\u29e8\0\u2a30\0\330\0\330\0\u2a78\0\u2ac0"+ + "\0\u2b08\0\u2b50\0\u0e10\0\u2b98\0\u2be0\0\u2c28\0\u2c70\0\u2cb8"+ + "\0\u2d00\0\u2d48\0\u2d90\0\u2dd8\0\u2e20\0\u2e68\0\u2eb0\0\u2ef8"+ + "\0\u2f40\0\u2f88\0\u2fd0\0\u3018\0\u3060\0\u30a8\0\u30f0\0\u3138"+ + "\0\u3180\0\u31c8\0\u0168\0\u3210\0\u3258\0\u32a0\0\u32e8\0\u3330"+ + "\0\u3378\0\u33c0\0\u3408\0\u3450\0\u3498\0\u34e0\0\u3528\0\u3570"+ + "\0\u35b8\0\u3600\0\u2ef8\0\u3648\0\u3690\0\u36d8\0\u3720\0\u3768"+ + "\0\u37b0\0\u37f8\0\u3840\0\u3888\0\u38d0\0\u3918\0\u3960\0\u39a8"+ + "\0\u39f0\0\u3a38\0\u3a80\0\u3ac8\0\u3b10\0\u3b58\0\u3ba0\0\u3be8"+ + "\0\u3498\0\u3c30\0\u3c78\0\u3cc0\0\u3d08\0\u3d50\0\u3d98\0\u3de0"+ + "\0\u3e28\0\u3e70\0\u3eb8\0\u3f00\0\u3f48\0\u3f90\0\u3fd8\0\u4020"+ + "\0\u4068\0\u40b0\0\u40f8\0\330\0\u21c0\0\u4140\0\u4188\0\u41d0"+ + "\0\u4218\0\u4260\0\u42a8\0\u42f0\0\u4338\0\u4380\0\u43c8\0\u4410"+ + "\0\u4458\0\u44a0\0\u44e8\0\u4530\0\u4578\0\u45c0\0\u4608\0\u4650"+ + "\0\u4698\0\u46e0\0\u4728\0\u4770\0\u47b8\0\u4800\0\u4848\0\u4890"+ + "\0\u48d8\0\u4920\0\u4968\0\u49b0\0\u49f8\0\u4a40\0\u4a88\0\u4ad0"+ + "\0\u4b18\0\u4b60\0\u4ba8\0\u4bf0\0\u4c38\0\u4c80\0\u4cc8\0\u4d10"+ + "\0\u4d58\0\u4da0\0\u4de8\0\u4e30\0\u4e78\0\u4ec0\0\u4f08\0\u4f50"+ + "\0\u4f98\0\u4fe0\0\u5028\0\u5070\0\u5028\0\u50b8\0\u5100\0\u5148"+ + "\0\u3e70\0\u5190\0\u51d8\0\u5220\0\u5268\0\u0168\0\u52b0\0\u52f8"+ + "\0\u5340\0\u5388\0\u53d0\0\u5418\0\u5460\0\u54a8\0\u54f0\0\u5538"+ + "\0\u5580\0\u55c8\0\u5610\0\u5658\0\u56a0\0\u56e8\0\u5730\0\u5778"+ + "\0\u57c0\0\u5808\0\u5850\0\u5898\0\u58e0\0\u5928\0\u5970\0\u59b8"+ + "\0\u5a00\0\u5a48\0\u5a90\0\u5ad8\0\u5b20\0\u5b68\0\u5bb0\0\u5bf8"+ + "\0\u5c40\0\u5c88\0\u5cd0\0\u5d18\0\u5d60\0\u5da8\0\u5df0\0\u5e38"+ + "\0\u5e80\0\u5ec8\0\u5f10\0\u3690\0\u5f58\0\u5fa0\0\u5fe8\0\u6030"+ + "\0\u6078\0\u60c0\0\u6108\0\u6150\0\u6198\0\u61e0\0\u6228\0\u6270"+ + "\0\u62b8\0\u6300\0\u6348\0\u6390\0\u63d8\0\u6420\0\u6468\0\u64b0"+ + "\0\u64f8\0\u6540\0\u6588\0\u65d0\0\u6618\0\u6660\0\u66a8\0\u66f0"+ + "\0\u6738\0\u6780\0\u67c8\0\u6810\0\u6858\0\u68a0\0\u68e8\0\u6930"+ + "\0\u6978\0\u69c0\0\u6a08\0\u6a50\0\u6a98\0\u6ae0\0\u6b28\0\u6b70"+ + "\0\u6bb8\0\u6c00\0\u6c48\0\u6c90\0\u6cd8\0\u6d20\0\u6d68\0\u6db0"+ + "\0\u6df8\0\u6e40\0\u6e88\0\u6ed0\0\u6f18\0\u6f60\0\u6fa8\0\u6030"+ + "\0\u6ff0\0\u7038\0\u7080\0\u70c8\0\u7110\0\u7158\0\u71a0\0\u71e8"+ + "\0\u7230\0\u7278\0\u72c0\0\u7308\0\u7350\0\u7398\0\u73e0\0\u7428"+ + "\0\u7470\0\u74b8\0\u7500\0\u7548\0\u7590\0\u75d8\0\u7620\0\u7668"+ + "\0\u76b0\0\u76f8\0\u7740\0\u7788\0\u77d0\0\u7818\0\u7860\0\u78a8"+ + "\0\u78f0\0\u7938\0\u7980\0\u79c8\0\u7a10\0\u7a58\0\u7aa0\0\u7ae8"+ + "\0\u7b30\0\u7b78\0\u7bc0\0\u7c08\0\u49f8\0\u7c50\0\u7c98\0\u7ce0"+ + "\0\u7d28\0\u7d70\0\u7db8\0\u7e00\0\u7e48\0\u7e90\0\u7ed8\0\u7f20"+ + "\0\u7f68\0\u7fb0\0\u7ff8\0\u5418\0\u8040\0\u8088\0\u80d0\0\u8118"+ + "\0\u8160\0\u81a8\0\u81f0\0\u8238\0\u8280\0\u82c8\0\u8310\0\u8358"+ + "\0\u83a0\0\u83e8\0\u8430\0\u8478\0\u84c0\0\u8508\0\u8550\0\u8598"+ + "\0\u85e0\0\u8628\0\u8670\0\u86b8\0\u8700\0\u8748\0\u8790\0\u87d8"+ + "\0\u8820\0\u8868\0\u88b0\0\u88f8\0\u8940\0\u8988\0\u89d0\0\u8a18"+ + "\0\u8a60\0\u8aa8\0\u8af0\0\u8b38\0\u8b80\0\u8bc8\0\u8c10\0\u8c58"+ + "\0\u8ca0\0\u8ce8\0\u8d30\0\u8d78\0\u8dc0\0\u8e08\0\u8e50\0\u8e98"+ + "\0\u8ee0\0\u8f28\0\u8f70\0\u8fb8\0\u9000\0\u9048\0\u9090\0\u90d8"+ + "\0\u9120\0\u9168\0\u91b0\0\u91f8\0\u9240\0\u9288\0\u92d0\0\u9318"+ + "\0\u9360\0\u93a8\0\u93f0\0\u9438\0\u9480\0\u94c8\0\u9510\0\u9558"+ + "\0\u95a0\0\u95e8\0\u9630\0\u9678\0\u96c0\0\u9708\0\u9750\0\u9798"+ + "\0\u97e0\0\u9828\0\u9870\0\u98b8\0\u9900\0\u9948\0\u9990\0\u99d8"+ + "\0\u9a20\0\u9a68\0\u9ab0\0\u9af8\0\u9b40\0\u9b88\0\u9bd0\0\u9c18"+ + "\0\u9c60\0\u9ca8\0\u9cf0\0\u9d38\0\u9d80\0\u9dc8\0\u9e10\0\u9e58"+ + "\0\u9ea0\0\u9ee8\0\u9f30\0\u9f78\0\u9fc0\0\ua008\0\ua050\0\ua098"+ + "\0\ua0e0\0\ua128\0\ua170\0\ua1b8\0\ua200\0\ua248\0\ua290\0\ua2d8"+ + "\0\ua320\0\ua368\0\ua3b0\0\ua3f8\0\ua440\0\ua488\0\ua4d0\0\ua518"+ + "\0\ua560\0\ua5a8\0\ua5f0\0\ua638\0\ua680\0\ua6c8\0\ua710\0\ua758"+ + "\0\ua7a0\0\ua7e8\0\u55c8"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[627]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\107\0\216\0\325\0\325\0\u011c\0\u0163\0\u01aa" + - "\0\u01f1\0\u0238\0\u027f\0\u02c6\0\u030d\0\325\0\325\0\u0354" + - "\0\u039b\0\u03e2\0\u0429\0\u0470\0\u04b7\0\u04fe\0\u0545\0\u058c" + - "\0\u05d3\0\u061a\0\u0661\0\325\0\u0163\0\u06a8\0\u06ef\0\u0736" + - "\0\325\0\u077d\0\u07c4\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927" + - "\0\u096e\0\u09b5\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\u0b18\0\u0b5f" + - "\0\325\0\u0ba6\0\u0bed\0\u0c34\0\325\0\u0c7b\0\u0cc2\0\u0d09" + - "\0\u0d50\0\u0d97\0\u0dde\0\u0e25\0\u0d97\0\u0e6c\0\u0eb3\0\u0d97" + - "\0\u0efa\0\u0f41\0\325\0\u0f88\0\u0fcf\0\u1016\0\u105d\0\u10a4" + - "\0\u10eb\0\u1132\0\u1179\0\u11c0\0\u1207\0\u124e\0\u1295\0\u0163" + - "\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8\0\u143f\0\u1486\0\u14cd" + - "\0\u1514\0\u155b\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u1705" + - "\0\u174c\0\u1793\0\u17da\0\u1821\0\u1868\0\u18af\0\u18f6\0\u193d" + - "\0\u1984\0\u19cb\0\u1a12\0\u1a59\0\u1aa0\0\u1ae7\0\u1b2e\0\u1b75" + - "\0\u1bbc\0\u1c03\0\u1c4a\0\u1c91\0\u1cd8\0\u1d1f\0\u1d66\0\u1dad" + - "\0\u1df4\0\u0163\0\u1e3b\0\u1e82\0\u1ec9\0\u1f10\0\u1f57\0\u1f9e" + - "\0\u1fe5\0\u202c\0\u2073\0\u20ba\0\u2101\0\u2148\0\u218f\0\u21d6" + - "\0\u221d\0\u2264\0\u22ab\0\u22f2\0\u2339\0\u2380\0\u23c7\0\u240e" + - "\0\u2455\0\u249c\0\u24e3\0\u252a\0\u2571\0\u25b8\0\325\0\u25ff" + - "\0\u2646\0\u268d\0\u26d4\0\u0d97\0\u271b\0\u2762\0\u27a9\0\u27f0" + - "\0\u2837\0\u287e\0\u28c5\0\u290c\0\u2953\0\u299a\0\u29e1\0\u2a28" + - "\0\u2a6f\0\u2ab6\0\u2afd\0\u2b44\0\u2b8b\0\u2bd2\0\u2c19\0\u2c60" + - "\0\u2ca7\0\u2cee\0\u2d35\0\u2d7c\0\u2dc3\0\u2e0a\0\u2e51\0\u2e98" + - "\0\u2edf\0\u2f26\0\u2f6d\0\u2fb4\0\u2ffb\0\u3042\0\u3089\0\u30d0" + - "\0\u3117\0\u315e\0\u2a6f\0\u31a5\0\u31ec\0\u3233\0\u327a\0\u32c1" + - "\0\u3308\0\u334f\0\u3396\0\u33dd\0\u3424\0\u346b\0\u34b2\0\u34f9" + - "\0\u3540\0\u3587\0\u35ce\0\u3615\0\u365c\0\u36a3\0\u36ea\0\u3731" + - "\0\u2ffb\0\u3778\0\u37bf\0\u3806\0\u384d\0\u3894\0\u38db\0\u3922" + - "\0\u3969\0\u39b0\0\u39f7\0\u3a3e\0\u3a85\0\u3acc\0\u3b13\0\u3b5a" + - "\0\u3ba1\0\u3be8\0\325\0\u202c\0\u3c2f\0\u3c76\0\u3cbd\0\u3d04" + - "\0\u3d4b\0\u3d92\0\u3dd9\0\u3e20\0\u3e67\0\u3eae\0\u3ef5\0\u3f3c" + - "\0\u3f83\0\u3fca\0\u4011\0\u4058\0\u409f\0\u40e6\0\u412d\0\u4174" + - "\0\u41bb\0\u4202\0\u4249\0\u4290\0\u42d7\0\u431e\0\u4365\0\u43ac" + - "\0\u43f3\0\u443a\0\u4481\0\u44c8\0\u450f\0\u4556\0\u459d\0\u45e4" + - "\0\u462b\0\u4672\0\u46b9\0\u4700\0\u4747\0\u4700\0\u478e\0\u47d5" + - "\0\u481c\0\u4863\0\u48aa\0\u48f1\0\u4938\0\u497f\0\u0163\0\u49c6" + - "\0\u4a0d\0\u4a54\0\u4a9b\0\u4ae2\0\u4b29\0\u4b70\0\u4bb7\0\u4bfe" + - "\0\u4c45\0\u4c8c\0\u4cd3\0\u4d1a\0\u3cbd\0\u4d61\0\u4da8\0\u4def" + - "\0\u4e36\0\u4e7d\0\u4ec4\0\u4f0b\0\u4f52\0\u4f99\0\u4fe0\0\u5027" + - "\0\u506e\0\u50b5\0\u50fc\0\u5143\0\u518a\0\u51d1\0\u5218\0\u525f" + - "\0\u52a6\0\u52ed\0\u5334\0\u537b\0\u53c2\0\u5409\0\u5450\0\u5497" + - "\0\u54de\0\u5525\0\u556c\0\u55b3\0\u55fa\0\u5641\0\u5688\0\u56cf" + - "\0\u5716\0\u575d\0\u57a4\0\u57eb\0\u5832\0\u5879\0\u58c0\0\u5907" + - "\0\u594e\0\u5995\0\u59dc\0\u5a23\0\u5a6a\0\u5ab1\0\u5af8\0\u5b3f" + - "\0\u5b86\0\u5bcd\0\u5c14\0\u5c5b\0\u5ca2\0\u5ce9\0\u5d30\0\u5d77" + - "\0\u5dbe\0\u5e05\0\u5e4c\0\u5e93\0\u5eda\0\u5f21\0\u5f68\0\u5faf" + - "\0\u537b\0\u5ff6\0\u603d\0\u6084\0\u60cb\0\u6112\0\u6159\0\u61a0" + - "\0\u61e7\0\u622e\0\u6275\0\u62bc\0\u6303\0\u634a\0\u6391\0\u63d8" + - "\0\u641f\0\u6466\0\u64ad\0\u64f4\0\u653b\0\u6582\0\u65c9\0\u6610" + - "\0\u6657\0\u669e\0\u66e5\0\u672c\0\u6773\0\u67ba\0\u6801\0\u6848" + - "\0\u688f\0\u409f\0\u68d6\0\u691d\0\u6964\0\u69ab\0\u69f2\0\u6a39" + - "\0\u6a80\0\u6ac7\0\u6b0e\0\u6b55\0\u6b9c\0\u6be3\0\u6c2a\0\u4bb7" + - "\0\u6c71\0\u6cb8\0\u6cff\0\u6d46\0\u6d8d\0\u6dd4\0\u6e1b\0\u6e62" + - "\0\u6ea9\0\u6ef0\0\u6f37\0\u6f7e\0\u6fc5\0\u700c\0\u7053\0\u709a" + - "\0\u70e1\0\u7128\0\u716f\0\u71b6\0\u71fd\0\u7244\0\u728b\0\u72d2" + - "\0\u7319\0\u7360\0\u73a7\0\u73ee\0\u7435\0\u747c\0\u74c3\0\u750a" + - "\0\u7551\0\u7598\0\u75df\0\u7626\0\u766d\0\u76b4\0\u76fb\0\u7742" + - "\0\u7789\0\u77d0\0\u7817\0\u785e\0\u78a5\0\u78ec\0\u7933\0\u797a" + - "\0\u79c1\0\u7a08"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[466]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\1\11\1\7\1\11"+ + "\1\12\1\13\1\4\1\14\1\15\1\11\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+ + "\1\30\1\31\1\32\1\33\1\34\1\4\1\35\1\36"+ + "\4\7\1\37\1\40\2\4\1\34\1\41\1\4\1\42"+ + "\1\41\2\34\2\36\1\7\1\43\1\35\1\44\1\45"+ + "\1\46\1\41\1\35\1\44\2\4\1\47\1\50\1\51"+ + "\1\52\1\7\1\53\1\7\1\54\1\55\1\7\1\56"+ + "\1\57\11\60\1\61\4\60\1\62\1\63\70\60\14\64"+ + "\1\65\1\64\1\66\12\64\1\67\42\64\1\70\13\64"+ + "\113\0\1\71\2\0\1\71\1\0\1\71\2\0\2\71"+ + "\4\0\13\71\2\0\1\71\1\0\5\71\16\0\1\71"+ + "\2\0\1\71\1\0\2\71\2\0\14\71\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\1\72\2\0\1\73\1\74\1\75\1\73\1\74\1\73"+ + "\1\72\1\0\1\73\1\76\1\74\2\0\1\77\4\73"+ + "\1\100\4\73\1\101\1\73\2\0\1\7\1\0\1\102"+ + "\1\101\1\76\1\100\1\7\2\0\1\72\2\0\2\72"+ + "\5\0\1\73\3\7\1\0\1\7\1\0\2\7\1\72"+ + "\1\0\2\73\1\76\1\73\1\102\7\73\1\72\2\0"+ + "\1\73\2\11\1\73\1\11\1\73\1\72\1\0\1\73"+ + "\1\76\1\11\2\0\1\77\4\73\1\100\4\73\1\101"+ + "\1\73\2\0\1\7\1\0\1\73\1\101\1\76\1\100"+ + "\1\7\2\0\1\72\2\0\2\72\5\0\1\73\3\7"+ + "\1\0\1\7\1\0\2\7\1\72\1\0\2\73\1\76"+ + "\11\73\3\0\6\7\2\0\3\7\2\0\10\7\1\103"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\20\0\1\104\1\105"+ + "\4\0\1\106\1\0\1\107\62\0\6\7\2\0\1\110"+ + "\1\111\1\7\2\0\1\7\1\112\1\7\1\113\1\7"+ + "\1\114\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\110\1\111\1\7\2\0\3\7\1\115\4\7"+ + "\1\116\1\7\1\117\1\120\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\121\12\7\3\0\1\7\2\77\1\7\1\77\1\7"+ + "\2\0\2\7\1\77\2\0\1\122\13\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\123\2\7\1\124\1\125\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\126\1\127\4\7\1\130\5\7\3\0\6\7\2\0"+ + "\1\131\2\7\2\0\5\7\1\132\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\133\1\7\1\134\10\7\3\0\6\7"+ + "\2\0\1\135\2\7\2\0\1\7\1\136\1\137\5\7"+ + "\1\140\1\7\1\141\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\142\3\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\143\6\7\1\144\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\145"+ + "\1\146\4\7\1\147\5\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\150\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\5\7"+ + "\1\151\1\7\1\152\4\7\3\0\6\7\2\0\1\153"+ + "\2\7\2\0\3\7\1\154\7\7\1\155\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\156\13\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\157\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\160\4\7"+ + "\1\161\5\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\162\1\7\1\163\1\164\4\7\1\165\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\166\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\167\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\170\13\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\171\1\7"+ + "\1\172\5\7\1\173\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\174"+ + "\12\7\3\0\6\7\2\0\1\7\1\175\1\7\2\0"+ + "\6\7\1\176\1\7\1\177\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\200\1\201\10\7\37\0\1\36\17\0\2\36"+ + "\32\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\1\7\1\122\2\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\12\0\1\202\36\0\1\203"+ + "\50\0\1\204\41\0\1\205\36\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\1\7"+ + "\1\206\2\7\1\41\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\41\1\7\1\0\2\7"+ + "\2\0\14\7\65\0\1\41\25\0\5\7\1\207\2\0"+ + "\1\210\1\211\1\212\2\0\1\7\1\213\1\214\1\215"+ + "\1\216\1\217\2\7\1\220\1\221\1\7\1\222\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\223\1\7\1\224\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\225\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\1\122\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\226\2\7\2\0\5\7\1\227\5\7\1\230"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\231\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\232\1\7\1\233\5\7"+ + "\1\234\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\235\12\7\3\0"+ + "\5\7\1\236\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\237\1\7\1\240\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\241\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\242\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\243\5\7"+ + "\1\244\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\11\60\1\0\4\60"+ + "\2\0\70\60\16\245\1\0\71\245\17\0\1\246\70\0"+ + "\14\64\1\0\1\64\1\0\12\64\1\0\42\64\1\0"+ + "\13\64\26\0\1\247\4\0\1\250\105\0\1\251\104\0"+ + "\1\252\64\0\6\71\2\0\3\71\3\0\13\71\2\0"+ + "\1\71\1\0\5\71\16\0\1\71\2\0\1\71\1\0"+ + "\2\71\2\0\14\71\1\72\2\0\7\72\1\0\3\72"+ + "\3\0\13\72\4\0\4\72\3\0\1\72\2\0\2\72"+ + "\5\0\1\72\10\0\1\72\1\0\15\72\2\0\6\73"+ + "\1\72\1\0\3\73\2\0\1\7\13\73\2\0\1\7"+ + "\1\0\4\73\1\7\2\0\1\72\2\0\2\72\5\0"+ + "\1\73\3\7\1\0\1\7\1\0\2\7\1\72\1\0"+ + "\14\73\1\72\2\0\1\73\1\74\1\75\1\73\1\74"+ + "\1\73\1\72\1\0\1\73\1\76\1\74\2\0\1\77"+ + "\4\73\1\100\4\73\1\253\1\73\2\0\1\7\1\0"+ + "\1\73\1\253\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\75\1\73\1\75\1\73\1\72\1\0\1\73\1\76"+ + "\1\75\2\0\1\77\4\73\1\100\6\73\2\0\1\7"+ + "\1\0\2\73\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\77\1\73\1\77\1\73\1\72\1\0\1\73\1\76"+ + "\1\77\2\0\1\7\4\73\1\100\6\73\2\0\1\7"+ + "\1\0\2\73\1\76\1\100\1\7\2\0\1\72\2\0"+ + "\2\72\5\0\1\73\3\7\1\0\1\7\1\0\2\7"+ + "\1\72\1\0\2\73\1\76\11\73\1\72\2\0\1\73"+ + "\2\254\1\73\1\254\1\73\1\72\1\0\2\73\1\254"+ + "\2\0\1\7\13\73\2\0\1\7\1\0\4\73\1\255"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\1\7\1\255"+ + "\1\7\1\0\1\7\1\0\2\7\1\72\1\0\14\73"+ + "\1\72\2\0\1\73\4\256\1\73\1\72\1\0\1\73"+ + "\2\256\2\0\1\7\2\73\3\256\1\73\1\256\4\73"+ + "\2\0\1\7\1\0\2\73\2\256\1\7\2\0\1\72"+ + "\2\0\2\72\5\0\1\73\3\7\1\0\1\7\1\0"+ + "\2\7\1\72\1\0\2\73\1\256\11\73\3\0\6\7"+ + "\2\0\1\257\2\7\2\0\13\7\1\260\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\22\0\1\261\110\0\1\262\111\0\1\263"+ + "\65\0\6\7\2\0\3\7\2\0\5\7\1\264\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\265\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\266\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\267\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\7\1\270\1\7\2\0\1\7\1\271"+ + "\1\272\1\273\1\274\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\275\1\276\3\7\1\277\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\300\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\112"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\301"+ + "\12\7\3\0\6\7\2\0\1\264\2\7\2\0\10\7"+ + "\1\302\1\7\1\141\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\303\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\304\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\4\7\1\305\1\7\1\306"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\5\7\1\122\6\7\3\0"+ + "\6\7\2\0\1\307\2\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\310\12\7\3\0\6\7"+ + "\2\0\1\311\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\312"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\122\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\122\2\7\1\313"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\314\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\315\1\122"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\316\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\317\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\320\3\7\1\321\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\322\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\122\3\7\1\122\5\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\323\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\324\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\325\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\326\1\7"+ + "\1\327\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\50\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\5\7\1\313\2\0\3\7\2\0"+ + "\10\7\1\330\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\331"+ + "\10\7\3\0\6\7\2\0\3\7\2\0\4\7\1\332"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\333\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\334"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\335\1\7\1\336\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\5\7\1\337\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\6\7\1\340\5\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\12\7\1\341\1\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\3\7\1\342\10\7"+ + "\3\0\6\7\2\0\1\343\2\7\2\0\13\7\1\344"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\345\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\346\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\342\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\347\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\11\7\1\350\2\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\315\3\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\122\13\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\351\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\352"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\353\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\354"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\13\7\1\355"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\303\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\356\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\357\1\360"+ + "\3\7\1\361\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\362"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\363\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\364\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\365\2\7"+ + "\1\122\1\7\1\366\5\7\2\0\1\7\1\0\4\7"+ + "\1\367\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\370"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\371\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\46\0\1\372\113\0\1\373\36\0\1\34\14\0"+ + "\2\34\1\204\24\0\1\34\11\0\2\34\27\0\1\205"+ + "\1\374\14\205\2\374\1\205\1\0\34\205\2\374\1\375"+ + "\27\205\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\1\7\1\35\2\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\376\6\7\1\377\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0100\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0101\1\7\1\u0102"+ + "\1\u0103\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0104"+ + "\12\7\3\0\6\7\2\0\1\u0105\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0106\10\7\1\u0107\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\10\7\1\u0108\3\7\3\0\5\7\1\u0109\2\0"+ + "\3\7\2\0\12\7\1\u010a\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u010b\12\7\3\0\6\7\2\0\1\u010c\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\1\7\1\u010d\12\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u010e\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u010d\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\5\7\1\u010f\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u0110\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0111"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0112"+ + "\12\7\3\0\6\7\2\0\1\u0113\1\u0114\1\7\2\0"+ + "\4\7\1\122\5\7\1\317\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\1\7\1\u0115"+ + "\12\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u0116"+ + "\2\0\3\7\2\0\1\7\1\112\4\7\1\u0117\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\2\7\1\307\11\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\4\7"+ + "\1\122\5\7\1\u0118\1\7\3\0\6\7\2\0\1\267"+ + "\2\7\2\0\6\7\1\u0119\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\3\7\1\u011a\10\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\122\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u011b\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\u011c\12\7\3\0"+ + "\6\7\2\0\1\303\2\7\2\0\12\7\1\u011d\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u011e\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\122\1\7"+ + "\1\u011f\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\u011d\5\7\3\0\6\7\2\0\1\u0120\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u0121\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\22\0\1\u0122\117\0\1\u0123\106\0\1\u0124\104\0"+ + "\1\u0125\61\0\1\72\2\0\1\73\2\254\1\73\1\254"+ + "\1\73\1\72\1\0\1\73\1\76\1\254\2\0\1\7"+ + "\13\73\2\0\1\7\1\0\2\73\1\76\1\73\1\7"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\3\7\1\0"+ + "\1\7\1\0\2\7\1\72\1\0\2\73\1\76\11\73"+ + "\3\0\1\7\2\254\1\7\1\254\1\7\2\0\2\7"+ + "\1\254\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\1\72"+ + "\2\0\1\73\4\256\1\73\1\72\1\0\1\73\2\256"+ + "\2\0\1\7\2\73\3\256\1\73\1\256\2\73\1\253"+ + "\1\73\2\0\1\7\1\0\1\73\1\253\2\256\1\7"+ + "\2\0\1\72\2\0\2\72\5\0\1\73\3\7\1\0"+ + "\1\7\1\0\2\7\1\72\1\0\2\73\1\256\11\73"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0126\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u0127\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\3\7"+ + "\1\u0128\10\7\23\0\1\u0129\113\0\1\104\111\0\1\u012a"+ + "\61\0\6\7\2\0\3\7\2\0\1\7\1\271\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\264"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\5\7\1\122\6\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\10\7\1\342\3\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\50\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\6\7\1\122\5\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\301\4\7\1\u012b"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\2\7\1\122"+ + "\11\7\3\0\5\7\1\121\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\5\7\1\u012c\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u012d\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u012e\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\337\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\271\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u012f\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0130\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0131\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\1\7\1\303\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\301\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\271\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u0132\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\122\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\271\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\12\7\1\122\1\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\122\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\2\7\1\122\11\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u0133\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\312\12\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u0134\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\u0135\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\122\1\7\1\u0136\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\303\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\344\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\u0137\10\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0138\2\7\1\301\7\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u0139\6\7\1\122\2\7\3\0\6\7"+ + "\2\0\3\7\2\0\2\7\1\u013a\11\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u013b\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\342\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\5\7\1\u013c\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\122\1\0\4\7\1\u013d\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\122\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u0133\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u013e\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u013f\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0140\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\122\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0141\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\303\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u0142\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0143\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0144\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0145\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0146\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\u0147\13\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0148\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\u0149\5\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u014a\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\u014b\11\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\12\7\1\u0142\1\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\10\7"+ + "\1\122\3\7\3\0\6\7\2\0\3\7\2\0\2\7"+ + "\1\303\11\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u014c\1\7\1\u014d\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\u014e"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u014f\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\u0150\12\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0151\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u0152\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0153\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\310\12\7\47\0\1\u0154\106\0"+ + "\1\u0155\44\0\6\7\2\0\3\7\2\0\5\7\1\u0156"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u0157\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u0158"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0159"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\5\7\1\u015a\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u015b\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\5\7\1\u015c\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\u015d\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\u015e\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u015f"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u0160\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u0161\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u0162\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u0163\10\7\3\0\6\7\2\0\1\u010d"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\212\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u0164\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u010d\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0165\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\u0166\13\7\3\0"+ + "\6\7\2\0\3\7\2\0\2\7\1\u0140\11\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0167\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\303\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\3\7\1\u0168\10\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\320\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\7\7\1\332"+ + "\4\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\u0169\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\122\12\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u016a\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\122\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\7\1\234\1\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u016b\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u016c"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\122\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u016d"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\u016e\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\315\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\134"+ + "\10\7\2\0\1\u016f\132\0\1\u0122\102\0\1\u0170\111\0"+ + "\1\u0171\70\0\6\7\2\0\1\7\1\323\1\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u0172\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\126"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\24\0\1\u0173\115\0"+ + "\1\u0174\60\0\6\7\2\0\3\7\2\0\13\7\1\u0175"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\342\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\7\7\1\u0176\4\7\3\0\6\7\2\0\1\u0177"+ + "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0178\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u0179\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\273\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u017a\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\6\7"+ + "\1\122\5\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u017b\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u017c\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u017d\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u017e\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0153\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\5\7\1\161\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\342\2\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u017f\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u0180\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0181\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\11\7\1\303\2\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\13\7\1\u0182\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0183\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\u0184\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0185\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0186\1\7\1\u0187\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0188\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0189\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u018a\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\122\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u018b\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\172\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\172\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\161\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u018c\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u018d\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u018e\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u018f"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u0190\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\50\0\1\34\110\0\1\u0154\41\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0191"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\u0192\13\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\2\7\1\u0193\11\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0194\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\1\7\1\u0195\12\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u010d\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\1\u0196\2\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\10\7\1\u0197\3\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u0198\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0199\12\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u010f\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\u019a\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\11\7\1\u019b\2\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u019c\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\3\7\1\u019d\10\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u019e\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\u019f\13\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u0121\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\122\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\5\7\1\u01a0\2\0\3\7\2\0\3\7"+ + "\1\u01a1\1\7\1\u01a2\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u01a3\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01a4\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u01a5\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\7\1\50\12\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\6\7\1\u01a6\5\7\70\0\1\u01a7\20\0\2\u01a8\6\u0170"+ + "\1\0\1\u01a8\3\u0170\2\0\1\u01a8\13\u0170\1\u01a8\1\0"+ + "\1\u01a8\1\0\4\u0170\2\u01a8\2\0\4\u01a8\5\0\1\u01a8"+ + "\1\0\1\u01a8\1\0\3\u01a8\1\u0170\1\u01a8\1\u0170\1\u01a8"+ + "\14\u0170\2\0\1\u016f\16\0\1\u0122\71\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01a9\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\25\0\1\104\115\0\1\u01aa\57\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u014e\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01ab"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\1\7\1\342\12\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\145\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u01ac"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u01ad\11\7\3\0\6\7\2\0\1\7"+ + "\1\u01ae\1\7\2\0\1\7\1\u01af\5\7\1\u01b0\2\7"+ + "\1\u01b1\1\313\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u01b2\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u01b3\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u01b4\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u01b5\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u01b6\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u01b7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\11\7\1\u01b8"+ + "\2\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\361\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\234"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u01b9\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\342"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u0133\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\u01ba\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\3\7\1\u01bb"+ + "\10\7\3\0\6\7\2\0\1\7\1\u01bc\1\7\2\0"+ + "\10\7\1\u014c\1\7\1\u014d\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u01bd"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u01be\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u01bf"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u01c0\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\3\7\1\u01c1\10\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\u01c2\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\3\7\1\u01c3\10\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u01c4\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01c5\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01c6\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u01c7\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u01c8\13\7\3\0\6\7"+ + "\2\0\3\7\2\0\4\7\1\u01c9\7\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u01ca\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\1\u010f\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\11\7\1\u01cb"+ + "\2\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01cc\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\5\7\1\u01cd\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\u01ce\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\u01cf\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u01d0\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u01d1\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u01d2"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u01d3\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u01d4"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u01d5\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u01d6"+ + "\1\u01c0\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u01d7\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\3\7\1\122\10\7\70\0\1\u0170"+ + "\22\0\6\7\2\0\1\234\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\30\0\1\u0173\62\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u01d8"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\3\7\1\271\5\7"+ + "\1\u01d9\2\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u01da\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\117"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\126\13\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\160\4\7\1\161\5\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0182\12\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\1\7\1\u01db\12\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\u01dc\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u0167\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u01dd\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01de\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\1\7"+ + "\1\315\1\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01df\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\u01be\13\7\3\0"+ + "\6\7\2\0\3\7\2\0\3\7\1\u012c\10\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\336\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u01e0\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u01e1\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u01e2\12\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\332\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\4\7\1\u01e3\7\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\135\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u01e4\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u0133\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\313\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u01e5\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u01e6\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u01e7\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u01e8\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u01e9\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u01ea\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u01eb\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u01ec\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u01ed\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u01ee\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u01ef\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01f0\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\1\7\1\u01f1\12\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\u01f2\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u01f3\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u01f4\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u01f5\13\7\3\0\6\7"+ + "\2\0\1\u01f6\2\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\1\u01f7\2\7\2\0\14\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\3\7\1\u01f8\10\7"+ + "\3\0\6\7\2\0\3\7\2\0\13\7\1\u01f9\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\u01fa\10\7\3\0"+ + "\5\7\1\u0116\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\1\u01fb\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\10\7\1\u01fc"+ + "\3\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u01fd"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u01fe\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u0119"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u01ff\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u01d5\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u0200\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\10\7\1\u0201\3\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\12\7\1\u0202\1\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\7\7\1\u0203\4\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\2\7\1\u0204\11\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u0205\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0206\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\1\u0207\2\7\2\0\12\7\1\u0208\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\2\7\1\u0209\1\u020a\10\7\3\0"+ + "\5\7\1\u020b\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\6\7"+ + "\1\u020c\5\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\5\7\1\u020d\6\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u020e\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\2\7"+ + "\1\u020f\11\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0210\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\1\7"+ + "\1\u0211\12\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\122\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\303"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\273\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\1\7\1\u0212"+ + "\12\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0213\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u01a2\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\164\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\3\7\1\u0214\10\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u0215\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u0216\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u0133\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u0217\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\1\7\1\172\12\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\303\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\6\7\1\u0218\5\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u0219"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u021a\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u010c"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\10\7\1\u021b\3\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\2\7\1\u021c"+ + "\11\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u021d\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u021e"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\5\7\1\u021f"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0220\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u0221\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\4\7\1\u0222\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\4\7\1\u0223\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\4\7"+ + "\1\u0224\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\4\7\1\u0225\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0226\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0227\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\4\7\1\u0133\7\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0228\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\2\7\1\u0229\11\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\1\7\1\u022a\12\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u022b\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\12\7\1\u022c\1\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\5\7\1\u022d\6\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u022e\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\12\7\1\u010d\1\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u022f\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\3\7"+ + "\1\u0230\10\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0231\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\10\7"+ + "\1\u0232\3\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\7\7\1\u0233\4\7"+ + "\3\0\6\7\2\0\3\7\2\0\2\7\1\u010d\11\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\6\7\1\u0234\5\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\1\u0235\2\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\10\7\1\u0236\3\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\7\7\1\u0237\4\7\3\0\6\7\2\0\1\7\1\u0238"+ + "\1\7\2\0\2\7\1\u021c\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\12\7\1\u0239"+ + "\1\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u023a\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u023b\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\10\7\1\u023c\3\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\4\7"+ + "\1\u023d\7\7\3\0\6\7\2\0\3\7\2\0\14\7"+ + "\2\0\1\7\1\0\4\7\1\u023e\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u01d5\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u023f\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\6\7\1\303\5\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\4\7\1\u0240\7\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0241\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\10\7\1\u0242\3\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\6\7\1\u0243\5\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\2\7\1\u0244\11\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\10\7\1\u0230\3\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u021a\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\u010d\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0245\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\3\7\1\u0246\10\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u0247\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\13\7\1\u0248\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\13\7\1\u0249\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u024a"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u024b\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\6\7\1\u024c"+ + "\5\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\13\7\1\172\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\7\7\1\u0133\4\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\14\7\2\0\1\7\1\0\4\7\1\u024d\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\6\7\1\u024e\5\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\3\7\1\u021c\10\7\3\0"+ + "\6\7\2\0\3\7\2\0\5\7\1\u024f\6\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\14\7\3\0\6\7\2\0\3\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\1\u010d\13\7\3\0\6\7"+ + "\2\0\3\7\2\0\3\7\1\u0250\10\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\1\7"+ + "\1\u0251\12\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\3\7"+ + "\1\u0252\10\7\3\0\6\7\2\0\1\u0253\2\7\2\0"+ + "\14\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\12\7\1\u0254\1\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u0255"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\7\1\u0256\1\7\2\0\14\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\4\7\1\u010f\7\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\121\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\5\7\1\u01dc"+ + "\6\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u0257"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\11\7\1\u0258\2\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\7\7\1\u0259\4\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\1\7\1\u025a\12\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\u025b\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\u025c\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\5\7\1\220\6\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u025d\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u025e\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\4\7\1\u025f\7\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u0260\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\12\7\1\u0261\1\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\12\7\1\u0262\1\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\1\7\1\u0263\12\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\13\7\1\u0264\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\14\7\3\0"+ + "\6\7\2\0\3\7\2\0\14\7\2\0\1\7\1\0"+ + "\4\7\1\u0265\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\5\7"+ + "\1\u0266\6\7\2\0\1\7\1\0\5\7\14\0\4\7"+ + "\1\0\1\7\1\0\2\7\2\0\14\7\3\0\6\7"+ + "\2\0\3\7\2\0\12\7\1\u0267\1\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\14\7\3\0\6\7\2\0\3\7\2\0\13\7"+ + "\1\u0268\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0"+ + "\4\7\1\0\1\7\1\0\2\7\2\0\6\7\1\u010d"+ + "\5\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\7\7\1\u0269\4\7\3\0\6\7\2\0"+ + "\3\7\2\0\2\7\1\u026a\11\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\14\7\2\0"+ + "\1\7\1\0\5\7\14\0\4\7\1\0\1\7\1\0"+ + "\2\7\2\0\1\7\1\222\12\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u026b\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\4\7\1\u026c"+ + "\7\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\3\7\1\u026d\10\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\10\7\1\u015b"+ + "\3\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\3\7\2\0\5\7\1\u026e\6\7\2\0\1\7\1\0"+ + "\5\7\14\0\4\7\1\0\1\7\1\0\2\7\2\0"+ + "\14\7\3\0\6\7\2\0\3\7\2\0\3\7\1\u026f"+ + "\10\7\2\0\1\7\1\0\5\7\14\0\4\7\1\0"+ + "\1\7\1\0\2\7\2\0\14\7\3\0\6\7\2\0"+ + "\1\u0270\2\7\2\0\14\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\6\7\1\u025c\5\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0271\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\2\7\1\u025d\11\7\3\0\6\7\2\0\3\7"+ + "\2\0\4\7\1\u0272\7\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\14\7\2\0\1\7"+ + "\1\0\5\7\14\0\4\7\1\0\1\7\1\0\2\7"+ + "\2\0\10\7\1\220\3\7\3\0\6\7\2\0\3\7"+ + "\2\0\1\7\1\u0159\12\7\2\0\1\7\1\0\5\7"+ + "\14\0\4\7\1\0\1\7\1\0\2\7\2\0\14\7"+ + "\3\0\6\7\2\0\3\7\2\0\5\7\1\u0273\6\7"+ + "\2\0\1\7\1\0\5\7\14\0\4\7\1\0\1\7"+ + "\1\0\2\7\2\0\14\7"; + + private static int [] zzUnpackTrans() { + int [] result = new int[43056]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\1\2\0\2\11\10\1\2\11\14\1\1\11\4\1"+ + "\1\11\20\1\1\11\3\1\1\11\15\1\1\11\3\0"+ + "\72\1\4\0\37\1\2\11\4\0\6\1\3\0\106\1"+ + "\2\0\1\11\45\1\4\0\3\1\2\0\51\1\2\0"+ + "\31\1\1\0\1\1\1\0\1\1\2\0\62\1\2\0"+ + "\1\1\1\0\311\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[627]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\1\6\1\7\1\10\1\11\1\7\1\11" + - "\1\12\1\13\1\4\1\14\1\15\1\16\1\17\1\20" + - "\1\21\1\22\1\23\1\24\1\25\1\26\1\27\1\30" + - "\1\31\1\32\1\33\1\34\1\4\1\35\1\36\4\7" + - "\1\37\1\40\2\4\1\34\1\41\1\4\1\42\1\41" + - "\2\34\2\36\1\43\1\35\1\44\1\45\1\46\1\41" + - "\1\35\1\44\3\4\1\47\1\50\1\51\1\52\1\53" + - "\1\54\3\7\1\55\1\56\1\57\15\60\1\61\1\62" + - "\70\60\14\63\1\64\1\65\12\63\1\66\42\63\1\67" + - "\13\63\112\0\1\70\2\0\1\70\1\0\1\70\2\0" + - "\2\70\3\0\13\70\2\0\1\70\1\0\5\70\15\0" + - "\1\70\2\0\1\70\1\0\2\70\3\0\14\70\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\1\71\2\0\1\72\1\73\1\74\1\72\1\73" + - "\1\72\1\71\1\0\1\72\1\75\2\0\1\76\4\72" + - "\1\77\4\72\1\100\1\72\2\0\1\7\1\0\1\101" + - "\1\100\1\75\1\77\1\7\2\0\1\71\2\0\2\71" + - "\5\0\3\7\1\0\1\7\1\0\2\7\2\71\1\0" + - "\2\72\1\75\4\72\1\101\4\72\1\71\2\0\1\72" + - "\2\11\1\72\1\11\1\72\1\71\1\0\1\72\1\75" + - "\2\0\1\76\4\72\1\77\4\72\1\100\1\72\2\0" + - "\1\7\1\0\1\72\1\100\1\75\1\77\1\7\2\0" + - "\1\71\2\0\2\71\5\0\3\7\1\0\1\7\1\0" + - "\2\7\2\71\1\0\2\72\1\75\11\72\3\0\6\7" + - "\2\0\2\7\2\0\10\7\1\102\3\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\17\0\1\103\1\104\4\0\1\105\1\0" + - "\1\106\62\0\6\7\2\0\1\107\1\110\2\0\1\7" + - "\1\111\1\7\1\112\1\7\1\113\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\1\107\1\110\2\0" + - "\3\7\1\114\4\7\1\115\1\7\1\116\1\117\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\1\7\2\76\1\7\1\76" + - "\1\7\2\0\2\7\2\0\1\120\13\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\2\7" + - "\1\121\2\7\1\122\1\123\5\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\124\1\125\4\7\1\126\5\7\3\0\6\7\2\0" + - "\1\127\1\7\2\0\5\7\1\130\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\1\7\1\131\1\7\1\132\10\7\3\0\6\7" + - "\2\0\1\133\1\7\2\0\1\7\1\134\1\135\5\7" + - "\1\136\1\7\1\137\1\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\11\7" + - "\1\140\2\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\141\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\142\1\143\4\7" + - "\1\144\5\7\3\0\6\7\2\0\2\7\2\0\10\7" + - "\1\145\3\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\4\7\1\146\1\147" + - "\6\7\3\0\6\7\2\0\1\150\1\7\2\0\3\7" + - "\1\151\7\7\1\152\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\1\153\13\7" + - "\3\0\6\7\2\0\2\7\2\0\13\7\1\154\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\1\7\1\155\4\7\1\156\5\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\157\1\7\1\160" + - "\1\161\4\7\1\162\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\1\7\1\163" + - "\12\7\3\0\6\7\2\0\2\7\2\0\13\7\1\164" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\165\13\7\3\0\6\7\2\0" + - "\2\7\2\0\3\7\1\166\1\7\1\167\5\7\1\170" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\7\1\171\12\7\3\0\6\7" + - "\2\0\1\7\1\172\2\0\6\7\1\173\1\7\1\174" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\2\7\1\175\1\176\10\7" + - "\36\0\1\36\17\0\2\36\32\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\1\120" + - "\2\7\1\0\1\7\1\0\2\7\3\0\14\7\12\0" + - "\1\177\35\0\1\200\50\0\1\201\40\0\1\202\36\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\1\203\2\7\1\41\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\41\1\7" + - "\1\0\2\7\3\0\14\7\63\0\1\41\26\0\6\7" + - "\2\0\2\7\2\0\2\7\1\204\1\7\1\205\6\7" + - "\1\206\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\207\12\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\210\10\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\1\120\1\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\211\1\7\2\0\5\7\1\212\5\7\1\213" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\7\1\214\12\7\3\0\6\7" + - "\2\0\2\7\2\0\3\7\1\215\1\7\1\216\6\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\7\1\217\12\7\3\0\5\7" + - "\1\220\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\221" + - "\1\7\1\222\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\223\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\224\5\7\1\225\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\5\7\1\226\6\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\15\60\2\0\70\60\16\0" + - "\1\227\70\0\14\63\2\0\12\63\1\0\42\63\1\0" + - "\13\63\25\0\1\230\4\0\1\231\104\0\1\232\103\0" + - "\1\233\64\0\6\70\2\0\2\70\3\0\13\70\2\0" + - "\1\70\1\0\5\70\15\0\1\70\2\0\1\70\1\0" + - "\2\70\3\0\14\70\1\71\2\0\7\71\1\0\2\71" + - "\3\0\13\71\4\0\4\71\3\0\1\71\2\0\2\71" + - "\15\0\2\71\1\0\15\71\2\0\6\72\1\71\1\0" + - "\2\72\2\0\1\7\13\72\2\0\1\7\1\0\4\72" + - "\1\7\2\0\1\71\2\0\2\71\5\0\3\7\1\0" + - "\1\7\1\0\2\7\2\71\1\0\14\72\1\71\2\0" + - "\1\72\1\73\1\74\1\72\1\73\1\72\1\71\1\0" + - "\1\72\1\75\2\0\1\76\4\72\1\77\4\72\1\234" + - "\1\72\2\0\1\7\1\0\1\72\1\234\1\75\1\77" + - "\1\7\2\0\1\71\2\0\2\71\5\0\3\7\1\0" + - "\1\7\1\0\2\7\2\71\1\0\2\72\1\75\11\72" + - "\1\71\2\0\1\72\2\74\1\72\1\74\1\72\1\71" + - "\1\0\1\72\1\75\2\0\1\76\4\72\1\77\6\72" + - "\2\0\1\7\1\0\2\72\1\75\1\77\1\7\2\0" + - "\1\71\2\0\2\71\5\0\3\7\1\0\1\7\1\0" + - "\2\7\2\71\1\0\2\72\1\75\11\72\1\71\2\0" + - "\1\72\2\76\1\72\1\76\1\72\1\71\1\0\1\72" + - "\1\75\2\0\1\7\4\72\1\77\6\72\2\0\1\7" + - "\1\0\2\72\1\75\1\77\1\7\2\0\1\71\2\0" + - "\2\71\5\0\3\7\1\0\1\7\1\0\2\7\2\71" + - "\1\0\2\72\1\75\11\72\1\71\2\0\1\72\2\235" + - "\1\72\1\235\1\72\1\71\1\0\2\72\2\0\1\7" + - "\13\72\2\0\1\7\1\0\4\72\1\236\2\0\1\71" + - "\2\0\2\71\5\0\1\7\1\236\1\7\1\0\1\7" + - "\1\0\2\7\2\71\1\0\14\72\1\71\2\0\1\72" + - "\4\237\1\72\1\71\1\0\1\72\1\237\2\0\1\7" + - "\2\72\3\237\1\72\1\237\4\72\2\0\1\7\1\0" + - "\2\72\2\237\1\7\2\0\1\71\2\0\2\71\5\0" + - "\3\7\1\0\1\7\1\0\2\7\2\71\1\0\2\72" + - "\1\237\11\72\3\0\6\7\2\0\1\240\1\7\2\0" + - "\13\7\1\241\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\21\0\1\242" + - "\107\0\1\243\110\0\1\244\65\0\6\7\2\0\2\7" + - "\2\0\5\7\1\245\6\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\13\7\1\246\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\247\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\10\7\1\250\3\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\1\7\1\251" + - "\2\0\1\7\1\252\1\253\1\254\1\255\7\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\2\7\1\256\1\257\1\7\1\260\6\7" + - "\3\0\6\7\2\0\2\7\2\0\12\7\1\261\1\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\1\7\1\111\12\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\1\7\1\262\12\7\3\0\6\7\2\0\1\245" + - "\1\7\2\0\10\7\1\263\1\7\1\137\1\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\12\7\1\264\1\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\4\7\1\265\1\7\1\266" + - "\5\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\4\7\1\120\7\7\3\0" + - "\6\7\2\0\1\267\1\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\7\1\270\12\7\3\0\6\7" + - "\2\0\1\271\1\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\10\7\1\272" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\3\7\1\120\10\7\3\0" + - "\6\7\2\0\2\7\2\0\10\7\1\120\2\7\1\273" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\5\7\1\274\6\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\1\7\1\275\1\120" + - "\11\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\3\7\1\276\10\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\1\277\1\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\1\7\1\300\3\7\1\301\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\2\7" + - "\1\302\11\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\2\7" + - "\1\120\3\7\1\120\5\7\3\0\6\7\2\0\2\7" + - "\2\0\6\7\1\303\5\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\5\7\1\304\6\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\3\7\1\305\1\7\1\306\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\3\7" + - "\1\50\10\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\5\7" + - "\1\273\2\0\2\7\2\0\10\7\1\307\3\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\3\7\1\310\10\7\3\0\6\7\2\0" + - "\2\7\2\0\4\7\1\311\7\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\1\7\1\312" + - "\12\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\12\7\1\313\1\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\314" + - "\1\7\1\315\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\5\7\1\316\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\6\7\1\317\5\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\13\7\1\320\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\3\7\1\321\10\7\3\0\6\7\2\0\1\322\1\7" + - "\2\0\5\7\1\323\5\7\1\324\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\10\7\1\325" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\1\7\1\326" + - "\12\7\3\0\6\7\2\0\2\7\2\0\6\7\1\321" + - "\5\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\3\7\1\327" + - "\10\7\3\0\6\7\2\0\2\7\2\0\11\7\1\330" + - "\2\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\11\7\1\275\2\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\120\13\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\331\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\6\7\1\332\5\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\333\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\334\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\12\7\1\335\1\7\3\0\6\7" + - "\2\0\2\7\2\0\6\7\1\172\5\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\1\7" + - "\1\336\12\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\3\7\1\337\1\340\3\7\1\341" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\342\12\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\343\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\1\7\1\344\2\7\1\120\1\7\1\345\5\7\2\0" + - "\1\7\1\0\4\7\1\346\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\5\7\1\347\6\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\2\7\1\350\11\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\45\0\1\351\112\0\1\352" + - "\36\0\1\34\13\0\2\34\1\201\24\0\1\34\11\0" + - "\2\34\27\0\1\202\1\353\13\202\2\353\1\202\1\0" + - "\34\202\2\353\1\354\27\202\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\1\35" + - "\2\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\1\355\1\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\5\7\1\356\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\10\7\1\357\3\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\5\7\1\360\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\1\7\1\361\12\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\1\7\1\362\12\7\3\0\6\7\2\0\1\363" + - "\1\364\2\0\4\7\1\120\5\7\1\277\1\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\1\7\1\365\12\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\5\7\1\366\2\0\2\7\2\0\1\7\1\111\4\7" + - "\1\367\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\2\7\1\267\11\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\13\7\1\370\3\0\6\7\2\0\1\250\1\7" + - "\2\0\6\7\1\371\5\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\3\7" + - "\1\372\10\7\3\0\6\7\2\0\2\7\2\0\10\7" + - "\1\373\3\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\1\7" + - "\1\374\12\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\375\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\4\7\1\376\7\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\120\1\7\1\377\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\1\u0100\1\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\2\7\1\u0101\11\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\6\7\1\375\5\7\21\0\1\u0102\116\0\1\u0103\105\0" + - "\1\u0104\103\0\1\u0105\61\0\1\71\2\0\1\72\2\235" + - "\1\72\1\235\1\72\1\71\1\0\1\72\1\75\2\0" + - "\1\7\13\72\2\0\1\7\1\0\2\72\1\75\1\72" + - "\1\7\2\0\1\71\2\0\2\71\5\0\3\7\1\0" + - "\1\7\1\0\2\7\2\71\1\0\2\72\1\75\11\72" + - "\3\0\1\7\2\235\1\7\1\235\1\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\1\71\2\0" + - "\1\72\4\237\1\72\1\71\1\0\1\72\1\237\2\0" + - "\1\7\2\72\3\237\1\72\1\237\2\72\1\234\1\72" + - "\2\0\1\7\1\0\1\72\1\234\2\237\1\7\2\0" + - "\1\71\2\0\2\71\5\0\3\7\1\0\1\7\1\0" + - "\2\7\2\71\1\0\2\72\1\237\11\72\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\u0106\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\10\7" + - "\1\u0107\3\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\3\7\1\u0108\10\7" + - "\22\0\1\u0109\112\0\1\103\110\0\1\u010a\61\0\6\7" + - "\2\0\2\7\2\0\1\7\1\252\12\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\1\245\1\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\4\7\1\120" + - "\7\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\11\7\1\321\2\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\50\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\6\7\1\120" + - "\5\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\262\4\7\1\u010b\1\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\2\7\1\120\11\7\3\0" + - "\5\7\1\u010c\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\5\7\1\u010d\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\1\7\1\u010e" + - "\12\7\3\0\6\7\2\0\2\7\2\0\5\7\1\u010f" + - "\6\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\1\7\1\316\12\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\252" + - "\10\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\2\7\1\u0110" + - "\11\7\3\0\6\7\2\0\2\7\2\0\13\7\1\u0111" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\7\1\u0112\12\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\1\7" + - "\1\172\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\4\7\1\262\7\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\1\252\1\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\u0113\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\4\7\1\120\7\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\10\7" + - "\1\252\3\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\13\7" + - "\1\120\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\120\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\2\7\1\120\11\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\u0114\10\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\272\12\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\u0115\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\12\7\1\u0116\1\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\120\1\7\1\u0117" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\1\7\1\u0118\12\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\u0119" + - "\10\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\1\7\1\u011a\2\7\1\262\7\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\2\7\1\172\5\7\1\120\3\7\3\0" + - "\6\7\2\0\2\7\2\0\2\7\1\u011b\11\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\3\7\1\u011c\10\7\3\0\6\7\2\0" + - "\2\7\2\0\12\7\1\321\1\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\5\7\1\u011d\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\120\1\0\4\7\1\u011e\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\12\7\1\120\1\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\1\u0114\1\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\u011f\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\4\7\1\u0120\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\u0121\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\5\7\1\120" + - "\6\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\1\7\1\u0122" + - "\12\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u0123\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\1\7\1\u0124\12\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\2\7\1\u0125\11\7\3\0\6\7\2\0\2\7" + - "\2\0\12\7\1\u0126\1\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\5\7\1\u0127\6\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\12\7\1\u0128\1\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\4\7\1\u0129\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\u012a\13\7\3\0\6\7" + - "\2\0\2\7\2\0\10\7\1\u012b\3\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\6\7\1\u012c\5\7\3\0\6\7" + - "\2\0\2\7\2\0\6\7\1\u012d\5\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\2\7\1\u012e\11\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\13\7" + - "\1\u0125\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\11\7\1\120\2\7\3\0\6\7\2\0" + - "\2\7\2\0\2\7\1\172\11\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\1\u012f\1\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\6\7\1\u0130\5\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\1\7\1\u0131\12\7\3\0\6\7\2\0\2\7" + - "\2\0\10\7\1\u0132\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\10\7\1\u0133\3\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\12\7\1\u0134\1\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\1\7" + - "\1\270\12\7\46\0\1\u0135\105\0\1\u0136\44\0\6\7" + - "\2\0\2\7\2\0\13\7\1\u0137\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\1\u0138\1\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\120\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\6\7\1\357\5\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\1\u0139\13\7\3\0\6\7\2\0" + - "\2\7\2\0\2\7\1\u0121\11\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\5\7\1\u013a" + - "\6\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\10\7\1\172\3\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\3\7\1\u013b\10\7\3\0\6\7\2\0\2\7\2\0" + - "\1\7\1\300\12\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\7\7\1\311\4\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\13\7\1\u013c\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\u013d\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\3\7" + - "\1\120\10\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\7\1\u013e\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\13\7\1\u013f" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\6\7\1\u0140\5\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\1\7\1\120\12\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\6\7\1\u0141\5\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\1\7\1\u0142\12\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\7\1\275\12\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\3\7\1\132\10\7\2\0\1\u0143\130\0\1\u0102" + - "\101\0\1\u0144\110\0\1\u0145\70\0\6\7\2\0\1\7" + - "\1\303\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\u0146\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\2\7\1\124\11\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\23\0" + - "\1\u0147\114\0\1\u0148\60\0\6\7\2\0\2\7\2\0" + - "\13\7\1\u0149\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\172\1\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\4\7\1\321" + - "\7\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\5\7\1\u014a" + - "\6\7\3\0\6\7\2\0\1\u014b\1\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\4\7\1\u014c\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\u014d\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\10\7\1\254\3\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\u014e\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\6\7\1\120\5\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\4\7\1\u014f\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\u0150\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\1\7\1\172\12\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\1\u0151\1\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\6\7\1\u0152\5\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\12\7\1\u0134" + - "\1\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\5\7\1\156" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\1\321\1\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\1\u0153\1\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\7\1\u0154\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u0155\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\11\7\1\172\2\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\5\7\1\u0156\6\7\3\0\6\7\2\0\1\7" + - "\1\u0157\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\13\7\1\u0158\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\5\7" + - "\1\u0159\6\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\1\7\1\u015a\12\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\13\7" + - "\1\u015b\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\3\7\1\u015c\1\7\1\u015d\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\4\7\1\u015e\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\4\7" + - "\1\u015f\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u0160\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\4\7\1\u0161\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\156\10\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\3\7\1\u0162\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\4\7\1\u0163\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\3\7" + - "\1\u0164\10\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\6\7\1\u0165\5\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\5\7" + - "\1\u0166\6\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\47\0\1\34" + - "\107\0\1\u0135\41\0\6\7\2\0\2\7\2\0\10\7" + - "\1\u0167\3\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\u0168\1\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u0101\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\1\7" + - "\1\120\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\5\7\1\u0169\2\0\2\7\2\0\3\7\1\u016a\1\7" + - "\1\u016b\6\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\3\7" + - "\1\u016c\10\7\3\0\6\7\2\0\2\7\2\0\14\7" + - "\2\0\1\7\1\0\4\7\1\u016d\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\10\7\1\120\3\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\6\7\1\u016e" + - "\5\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\172\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\1\7\1\50\12\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\6\7\1\u016f" + - "\5\7\66\0\1\u0170\21\0\2\u0171\6\u0144\1\0\1\u0171" + - "\2\u0144\2\0\1\u0171\13\u0144\1\u0171\1\0\1\u0171\1\0" + - "\4\u0144\2\u0171\2\0\4\u0171\6\0\1\u0171\1\0\3\u0171" + - "\1\u0144\2\u0171\1\u0144\1\u0171\14\u0144\2\0\1\u0143\15\0" + - "\1\u0102\71\0\6\7\2\0\2\7\2\0\5\7\1\u0172" + - "\6\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\24\0\1\103\114\0" + - "\1\u0173\57\0\6\7\2\0\2\7\2\0\4\7\1\u012f" + - "\7\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\u0174\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\1\7\1\321" + - "\12\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\5\7\1\142" + - "\6\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u0175\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\2\7\1\u0176\11\7" + - "\3\0\6\7\2\0\1\7\1\u0177\2\0\1\7\1\u0178" + - "\5\7\1\u0179\2\7\1\u017a\1\273\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\2\7\1\u017b\11\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\4\7\1\u017c\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\4\7" + - "\1\u017d\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\u017e" + - "\10\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\u017f\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\13\7\1\u0180" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\11\7\1\u0181\2\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\3\7\1\u010c\10\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\10\7\1\172\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\10\7\1\341\3\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\3\7\1\u013e\10\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\2\7\1\u0182\11\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\10\7\1\321\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\10\7\1\u0114\3\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\5\7\1\u0183\6\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\3\7\1\u0184\10\7\3\0\6\7\2\0\2\7" + - "\2\0\10\7\1\u0185\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\4\7\1\u0186\7\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\1\7" + - "\1\u0187\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\10\7\1\u0188\3\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\3\7\1\u0189\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\3\7\1\u018a\10\7\3\0\6\7\2\0\2\7\2\0" + - "\13\7\1\u018b\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\3\7" + - "\1\u018c\10\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\u018d\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\u018e\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\u018f\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\4\7\1\u0190\7\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\6\7" + - "\1\u0191\5\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\5\7\1\u0192\6\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\2\7" + - "\1\u0193\1\u0189\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\7\1\u0194\12\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\3\7\1\120\10\7\66\0" + - "\1\u0144\23\0\6\7\2\0\1\u013e\1\7\2\0\14\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\27\0\1\u0147\62\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\4\7" + - "\1\u0195\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\252" + - "\5\7\1\u0196\2\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\4\7\1\u0197\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\116\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\1\124" + - "\13\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\1\7\1\155\4\7\1\156\5\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\7\1\u0158\12\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\u0198\12\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\u0199\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\1\7\1\u013a\12\7\3\0\6\7\2\0" + - "\2\7\2\0\3\7\1\u019a\10\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\10\7\1\u019b" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\1\7\1\275\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\10\7\1\u019c\3\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\u0187\13\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\u010d\10\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\315\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\u019d\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\252\12\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\7\1\u019e\12\7\3\0\6\7\2\0\2\7\2\0" + - "\13\7\1\311\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\4\7\1\u019f\7\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\1\133\1\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\u01a0\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\6\7\1\u0114" + - "\5\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\273\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\4\7\1\u01a1\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\10\7\1\u01a2\3\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\6\7\1\u01a3\5\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\1\u01a4" + - "\1\7\2\0\14\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\u01a5\13\7\3\0\6\7\2\0\1\u01a6\1\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\1\u01a7\1\7\2\0\14\7\2\0\1\7\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\3\7\1\u01a8\10\7\3\0\6\7\2\0\2\7" + - "\2\0\13\7\1\u01a9\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\3\7\1\u01aa\10\7\3\0\5\7\1\366\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\1\u01ab\1\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\11\7\1\u01ac\2\7\3\0\6\7\2\0" + - "\2\7\2\0\6\7\1\u01ad\5\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\3\7\1\u01ae" + - "\10\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\6\7\1\371\5\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\10\7\1\u0192" + - "\3\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\14\7\3\0\6\7\2\0" + - "\2\7\2\0\5\7\1\u01af\6\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\3\7\1\u01b0\10\7\3\0\6\7\2\0" + - "\2\7\2\0\6\7\1\u01b1\5\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\13\7\1\120" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\7\1\172\12\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\1\7\1\254\12\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\1\7\1\u01b2\12\7" + - "\3\0\6\7\2\0\2\7\2\0\14\7\2\0\1\7" + - "\1\0\4\7\1\u01b3\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\u016b\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\161\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\3\7\1\u01b4\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\1\u01b5\1\7\2\0\14\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\5\7" + - "\1\u01b6\6\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\12\7\1\u0114\1\7\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\12\7" + - "\1\u01b7\1\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\172\1\0\5\7" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\2\7\2\0\5\7\1\u01b8\6\7" + - "\2\0\1\7\1\0\5\7\14\0\3\7\1\0\1\7" + - "\1\0\2\7\3\0\14\7\3\0\6\7\2\0\2\7" + - "\2\0\14\7\2\0\1\7\1\0\4\7\1\u01b9\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\7\7\1\u0114\4\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\u01ba\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\2\7\1\u01bb\11\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\1\7\1\u01bc\12\7\3\0" + - "\6\7\2\0\2\7\2\0\10\7\1\u01bd\3\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\12\7\1\u01be\1\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\u01bf\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\10\7\1\u01c0\3\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\10\7\1\u01c1\3\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\7\7\1\u01c2\4\7\3\0\6\7\2\0" + - "\2\7\2\0\14\7\2\0\1\7\1\0\4\7\1\u01c3" + - "\14\0\3\7\1\0\1\7\1\0\2\7\3\0\14\7" + - "\3\0\6\7\2\0\1\u0192\1\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\6\7\1\u01c4\5\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\6\7\1\172\5\7\3\0\6\7\2\0\2\7\2\0" + - "\3\7\1\u01c5\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\3\7\1\u01c6\10\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\6\7\1\u01c7\5\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\13\7\1\167\2\0\1\7" + - "\1\0\5\7\14\0\3\7\1\0\1\7\1\0\2\7" + - "\3\0\14\7\3\0\6\7\2\0\2\7\2\0\7\7" + - "\1\u0114\4\7\2\0\1\7\1\0\5\7\14\0\3\7" + - "\1\0\1\7\1\0\2\7\3\0\14\7\3\0\6\7" + - "\2\0\2\7\2\0\14\7\2\0\1\7\1\0\4\7" + - "\1\u01c8\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\14\7\3\0\6\7\2\0\2\7\2\0\14\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\u01c9\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\14\7\2\0\1\7\1\0\5\7\14\0\3\7\1\0" + - "\1\7\1\0\2\7\3\0\3\7\1\u01ca\10\7\3\0" + - "\6\7\2\0\2\7\2\0\5\7\1\u010c\6\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\u0199\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\2\7\1\u01cb\11\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\u01cc\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\7\1\u01cd\12\7\3\0\6\7\2\0\2\7\2\0" + - "\1\7\1\u01ce\12\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\6\7\1\u01cf\5\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\2\7\1\u01d0\11\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\14\7\2\0\1\7\1\0" + - "\5\7\14\0\3\7\1\0\1\7\1\0\2\7\3\0" + - "\1\7\1\120\12\7\3\0\6\7\2\0\2\7\2\0" + - "\3\7\1\u01d1\10\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7\3\0" + - "\6\7\2\0\2\7\2\0\4\7\1\u01d2\7\7\2\0" + - "\1\7\1\0\5\7\14\0\3\7\1\0\1\7\1\0" + - "\2\7\3\0\14\7\3\0\6\7\2\0\2\7\2\0" + - "\5\7\1\357\6\7\2\0\1\7\1\0\5\7\14\0" + - "\3\7\1\0\1\7\1\0\2\7\3\0\14\7"; - - private static int[] zzUnpackTrans() { - int[] result = new int[31311]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ClojureTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + /*case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break;*/ + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ClojureTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ClojureTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 164) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\1\2\0\2\11\10\1\2\11\14\1\1\11\4\1" + - "\1\11\17\1\1\11\3\1\1\11\15\1\1\11\3\0" + - "\70\1\4\0\24\1\1\11\4\0\6\1\3\0\104\1" + - "\2\0\1\11\26\1\4\0\3\1\2\0\52\1\2\0" + - "\14\1\1\0\1\1\1\0\1\1\2\0\47\1\2\0" + - "\1\1\1\0\137\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[466]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } + throw new Error(message); + } - /** the input device */ - private java.io.Reader zzReader; - /** the current state of the DFA */ - private int zzState; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + zzMarkedPos -= number; + } - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - /** the textposition at the last accepting state */ - private int zzMarkedPos; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** the current text position in the buffer */ - private int zzCurrentPos; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + while (true) { + zzMarkedPosL = zzMarkedPos; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + zzAction = -1; - /* user code: */ + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public ClojureTokenMaker() { - } + zzState = zzLexicalState; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addHyperlinkToken(int, int, int) - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, false); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - super.addToken(array, start, end, tokenType, startOffset, hyperlink); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { ";", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - /* - * case Token.COMMENT_MULTILINE: state = MLC; start = text.offset; break; case Token.COMMENT_DOCUMENTATION: - * state = DOCCOMMENT; start = text.offset; break; - */ - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public ClojureTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public ClojureTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 160) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 14: { - addToken(Token.PREPROCESSOR); - } - case 24: - break; - case 6: { - addNullToken(); - return firstToken; - } - case 25: - break; - case 18: { - addToken(Token.LITERAL_CHAR); - } - case 26: - break; - case 9: { - addToken(Token.WHITESPACE); - } - case 27: - break; - case 16: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 28: - break; - case 17: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 29: - break; - case 19: { - addToken(Token.RESERVED_WORD); - } - case 30: - break; - case 8: { - addToken(Token.SEPARATOR); - } - case 31: - break; - case 1: { - addToken(Token.IDENTIFIER); - } - case 32: - break; - case 13: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 33: - break; - case 20: { - addToken(Token.FUNCTION); - } - case 34: - break; - case 21: { - addToken(Token.DATA_TYPE); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 35: - break; - case 2: { - addToken(Token.ERROR_IDENTIFIER); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 36: - break; - case 22: { - addToken(Token.LITERAL_BOOLEAN); - } - case 37: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 38: - break; - case 23: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 39: - break; - case 15: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 40: - break; - case 7: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 41: - break; - case 3: { - start = zzMarkedPos - 1; - yybegin(EOL_COMMENT); - } - case 42: - break; - case 5: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 43: - break; - case 4: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(Token.PREPROCESSOR); + } + case 26: break; + case 6: + { addNullToken(); return firstToken; + } + case 27: break; + case 19: + { addToken(Token.LITERAL_CHAR); + } + case 28: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 29: break; + case 17: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 30: break; + case 18: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 31: break; + case 20: + { addToken(Token.RESERVED_WORD); + } + case 32: break; + case 22: + { addToken(Token.VARIABLE); + } + case 33: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 34: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 35: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 36: break; + case 21: + { addToken(Token.FUNCTION); + } + case 37: break; + case 23: + { addToken(Token.DATA_TYPE); + } + case 38: break; + case 11: + { /* Skip escaped chars. */ + } + case 39: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 40: break; + case 24: + { addToken(Token.LITERAL_BOOLEAN); + } + case 41: break; + case 12: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 42: break; + case 25: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 43: break; + case 16: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 44: break; + case 7: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 45: break; + case 3: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 46: break; + case 5: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 47: break; + case 4: + { addToken(Token.OPERATOR); + } + case 48: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 49: break; + case 10: + { + } + case 50: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 44: - break; - case 12: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + case 628: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 45: - break; - case 10: { + case 629: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 46: - break; + case 630: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 467: - break; - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 468: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 469: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.flex new file mode 100644 index 000000000..29d9922ed --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.flex @@ -0,0 +1,283 @@ +/* + * 03/19/2019 + * + * CsvTokenMaker.java - Token maker for CSV files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a CSV file.

              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                + *
              • The generated CsvTokenMaker.java file will contain 2 + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • + *
              + * + * @author Robert Futrell + * @version 0.5 + * + */ +%% + +%public +%class CsvTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Internal type denoting line ending in an unterminated string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_STRING = -(1<<11); + + + /** + * A simple counter, {@code 0} for even, {@code 1} for odd. + */ + private int evenOdd; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CsvTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds a token for either an even column or an odd column. + */ + private void addEvenOrOddColumnToken() { + addEvenOrOddColumnToken(zzStartRead, zzMarkedPos-1); + } + + + /** + * Adds a token for either an even column or an odd column. + */ + private void addEvenOrOddColumnToken(int start, int end) { + addToken(start, end, evenOdd == 0 ? Token.IDENTIFIER : Token.DATA_TYPE); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + return type == INTERNAL_STRING ? TokenTypes.LITERAL_STRING_DOUBLE_QUOTE : type; + } + + + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.IDENTIFIER || type == Token.DATA_TYPE; + } + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + evenOdd = 0; + if (initialTokenType<-1024) { + state = STRING; + evenOdd = initialTokenType & 1; // Should always be 0 or 1 anyway, but just to be safe + start = text.offset; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + + +%state STRING + +%% + + { + \" { start = zzMarkedPos - 1; yybegin(STRING); } + [,] { + addToken(Token.OPERATOR); + evenOdd = (evenOdd + 1) & 1; + } + [^,\"\n]+ { addEvenOrOddColumnToken(); } + "\n" | + <> { addNullToken(); return firstToken; } +} + + { + \"\" {} + [^\"\n]+ {} + \" { yybegin(YYINITIAL); addEvenOrOddColumnToken(start, zzStartRead); } + "\n" | + <> { + addEvenOrOddColumnToken(start, zzEndRead); + addEndToken(INTERNAL_STRING | evenOdd); return firstToken; + } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.java new file mode 100644 index 000000000..84967b316 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CsvTokenMaker.java @@ -0,0 +1,723 @@ +/* The following code was generated by JFlex 1.4.1 on 3/22/19 11:02 PM */ + +/* + * 03/19/2019 + * + * CsvTokenMaker.java - Token maker for CSV files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * This class splits up text into tokens representing a CSV file.

              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                + *
              • The generated CsvTokenMaker.java file will contain 2 + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • + *
              + * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class CsvTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\12\0\1\3\27\0\1\1\11\0\1\2\uffd3\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\4\0\10\0\14\0\14\0\14\0\20\0\24"+ + "\0\14\0\14"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\1\7\1\10\1\7\1\11"+ + "\1\3\7\0\1\7\1\0\1\7\2\0\1\12\2\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[24]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\1\1\3\11\2\1\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the textposition at the last state to be included in yytext */ + private int zzPushbackPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Internal type denoting line ending in an unterminated string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_STRING = -(1<<11); + + + /** + * A simple counter, {@code 0} for even, {@code 1} for odd. + */ + private int evenOdd; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public CsvTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds a token for either an even column or an odd column. + */ + private void addEvenOrOddColumnToken() { + addEvenOrOddColumnToken(zzStartRead, zzMarkedPos-1); + } + + + /** + * Adds a token for either an even column or an odd column. + */ + private void addEvenOrOddColumnToken(int start, int end) { + addToken(start, end, evenOdd == 0 ? Token.IDENTIFIER : Token.DATA_TYPE); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + return type == INTERNAL_STRING ? TokenTypes.LITERAL_STRING_DOUBLE_QUOTE : type; + } + + + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.IDENTIFIER || type == Token.DATA_TYPE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + evenOdd = 0; + if (initialTokenType<-1024) { + state = STRING; + evenOdd = initialTokenType & 1; // Should always be 0 or 1 anyway, but just to be safe + start = text.offset; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Overridden to accept letters, digits, underscores, and hyphens. + */ + @Override + public boolean isIdentifierChar(int languageIndex, char ch) { + return Character.isLetterOrDigit(ch) || ch=='-' || ch=='.' || ch=='_'; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public CsvTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public CsvTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 14) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 6: + { yybegin(YYINITIAL); addEvenOrOddColumnToken(start, zzStartRead); + } + case 8: break; + case 4: + { addNullToken(); return firstToken; + } + case 9: break; + case 7: + { addEvenOrOddColumnToken(start, zzEndRead); + addEndToken(INTERNAL_STRING | evenOdd); return firstToken; + } + case 10: break; + case 3: + { addToken(Token.OPERATOR); + evenOdd = (evenOdd + 1) & 1; + } + case 11: break; + case 1: + { addEvenOrOddColumnToken(); + } + case 12: break; + case 2: + { start = zzMarkedPos - 1; yybegin(STRING); + } + case 13: break; + case 5: + { + } + case 14: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addEvenOrOddColumnToken(start, zzEndRead); + addEndToken(INTERNAL_STRING | evenOdd); return firstToken; + } + case 11: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 12: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex old mode 100644 new mode 100755 similarity index 57% rename from tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.flex rename to tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex index 7713eec88..7fc855b73 --- a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.flex @@ -1,24 +1,10 @@ /* - * 11/13/2004 + * 09/08/2014 * - * JavaTokenMaker.java - Scanner for the Java programming language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * DTokenMaker.java - Scanner for the D programming language. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,7 +15,7 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Scanner for the Java programming language.

              + * Scanner for the D programming language.

              * * This implementation was created using * JFlex 1.4.1; however, the generated file @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

                - *
              • The generated JavaTokenMaker.java file will contain two + *
              • The generated DTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,13 +49,13 @@ import org.fife.ui.rsyntaxtextarea.*; *
              * * @author Robert Futrell - * @version 0.5 + * @version 1.0 * */ %% %public -%class JavaTokenMaker +%class DTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -78,11 +64,40 @@ import org.fife.ui.rsyntaxtextarea.*; %{ + /** + * Token type specific to DTokenMaker; this signals that the user is in + * a nestable multi-line comment. The nested depth is embedded in the + * actual end token type. + */ + private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); + + /** + * When in a (possibly) nested MLC, this is the current nested depth. + */ + private int nestedMlcDepth; + + /** * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ - public JavaTokenMaker() { + public DTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + private void addNestedMlcEndToken() { + addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); } @@ -131,6 +146,7 @@ import org.fife.ui.rsyntaxtextarea.*; * occurs. * @param hyperlink Whether this token is a hyperlink. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); @@ -138,14 +154,21 @@ import org.fife.ui.rsyntaxtextarea.*; } + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_NESTABLE_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -166,22 +189,43 @@ import org.fife.ui.rsyntaxtextarea.*; resetTokenList(); this.offsetShift = -text.offset + startOffset; + nestedMlcDepth = 0; // Start off in the proper state. - int state = Token.NULL; + int state = YYINITIAL; switch (initialTokenType) { + case Token.LITERAL_BACKQUOTE: + state = WYSIWYG_STRING_2; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = WYSIWYG_STRING_1; + break; case Token.COMMENT_MULTILINE: state = MLC; - start = text.offset; break; case Token.COMMENT_DOCUMENTATION: state = DOCCOMMENT; - start = text.offset; + break; + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; break; default: - state = Token.NULL; + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + } + nestedMlcDepth = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } } + start = text.offset; s = text; try { yyreset(zzReader); @@ -189,7 +233,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -202,7 +246,7 @@ import org.fife.ui.rsyntaxtextarea.*; * false. * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -217,7 +261,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -239,9 +283,10 @@ import org.fife.ui.rsyntaxtextarea.*; %} -Letter = [A-Za-z] +Letter = ([A-Za-z]) LetterOrUnderscore = ({Letter}|"_") -NonzeroDigit = [1-9] +NonzeroDigit = ([1-9]) +BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) @@ -249,35 +294,56 @@ AnyCharacterButApostropheOrBackSlash = ([^\\']) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) -NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) LineTerminator = (\n) WhiteSpace = ([ \t\f]) -CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) +StringPostfix = ([cwd]) +CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']{StringPostfix}?) UnclosedCharLiteral = ([\'][^\'\n]*) -ErrorCharLiteral = ({UnclosedCharLiteral}[\']) -StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +ErrorCharLiteral = ({UnclosedCharLiteral}[\']{StringPostfix}?) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]{StringPostfix}?) UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) -ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) +HexStringLiteral = ([x]{StringLiteral}) +UnclosedHexStringLiteral = ([x]{UnclosedStringLiteral}) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]{StringPostfix}?) +WysiwygStringLiteralStart = ("r"[\"]) +WysiwygStringLiteralStart2 = ("`") MLCBegin = "/*" -MLCEnd = "*/" -DocCommentBegin = "/**" +MLCEnd = "*/" +DocCommentBegin = "/**" +NestableMLCBegin = "/+" LineCommentBegin = "//" +LineDocCommentBegin = "///" + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) +HexLiteral = ({HexHelper}{NonFloatSuffix}?) -IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") -IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) -IntegerLiteral = ({IntegerHelper1}[lL]?) -HexLiteral = ({IntegerHelper2}[lL]?) FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") @@ -288,11 +354,6 @@ NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"! AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) -CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") -ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") -BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) -InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") - Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) @@ -309,173 +370,163 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state DOCCOMMENT +%state NESTABLE_MLC %state EOL_COMMENT +%state EOL_DOCCOMMENT +%state WYSIWYG_STRING_1 +%state WYSIWYG_STRING_2 %% { /* Keywords */ - "abstract"| - "assert" | - "break" | - "case" | - "catch" | - "class" | - "const" | - "continue" | - "default" | - "do" | - "else" | - "enum" | - "extends" | - "final" | - "finally" | - "for" | - "goto" | - "if" | - "implements" | - "import" | - "instanceof" | - "interface" | - "native" | - "new" | - "null" | - "package" | - "private" | - "protected" | - "public" | - "return" | - "static" | - "strictfp" | - "super" | - "switch" | - "synchronized" | - "this" | - "throw" | - "throws" | - "transient" | - "try" | - "void" | - "volatile" | - "while" { addToken(Token.RESERVED_WORD); } + "abstract" | + "alias" | + "align" | + "asm" | + "assert" | + "auto" | + + "body" | + "break" | + + "case" | + "cast" | + "catch" | + "class" | + "const" | + "continue" | + + "debug" | + "default" | + "delegate" | + "delete" | + "deprecated" | + "do" | + + "else" | + "enum" | + "export" | + "extern" | + + "final" | + "finally" | + "for" | + "foreach" | + "foreach_reverse" | + "function" | + + "goto" | + + "if" | + "immutable" | + "import" | + "in" | + "inout" | + "interface" | + "invariant" | + "is" | + + "lazy" | + + "macro" | + "mixin" | + "module" | + + "new" | + "nothrow" | + "null" | + + "out" | + "override" | + + "package" | + "pragma" | + "private" | + "protected" | + "public" | + "pure" | + + "ref" | + + "scope" | + "shared" | + "static" | + "struct" | + "super" | + "switch" | + "synchronized" | + + "template" | + "this" | + "throw" | + "try" | + "typedef" | + "typeid" | + "typeof" | + + "union" | + "unittest" | + + "version" | + "void" | + "volatile" | + + "while" | + "with" | + + "__FILE__" | + "__MODULE__" | + "__LINE__" | + "__FUNCTION__" | + "__PRETTY_FUNCTION__" | + + "__gshared" | + "__traits" | + "__vector" | + "__parameters" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ - "boolean" | - "byte" | - "char" | - "double" | - "float" | - "int" | - "long" | - "short" { addToken(Token.DATA_TYPE); } + "string" | + "wstring" | + "dstring" | + "size_t" | + "ptrdiff_t" | + "bool" | + "byte" | + "cdouble" | + "cent" | + "cfloat" | + "char" | + "creal" | + "dchar" | + "double" | + "float" | + "idouble" | + "ifloat" | + "ireal" | + "int" | + "long" | + "real" | + "short" | + "ubyte" | + "ucent" | + "uint" | + "ulong" | + "ushort" | + "wchar" { addToken(Token.DATA_TYPE); } /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } - /* java.lang stuff */ - "Appendable" | - "CharSequence" | - "Cloneable" | - "Comparable" | - "Iterable" | - "Readable" | - "Runnable" | - "Boolean" | - "Byte" | - "Character" | - "Character.Subset" | - "Character.UnicodeBlock" | - "Class" | - "ClassLoader" | - "Compiler" | - "Double" | - "Enum" | - "Float" | - "InheritableThreadLocal" | - "Integer" | - "Long" | - "Math" | - "Number" | - "Object" | - "Package" | - "Process" | - "ProcessBuilder" | - "Runtime" | - "RuntimePermission" | - "SecurityManager" | - "Short" | - "StackTraceElement" | - "StrictMath" | - "String" | - "StringBuffer" | - "StringBuilder" | - "System" | - "Thread" | - "ThreadGroup" | - "ThreadLocal" | - "Throwable" | - "Void" | - "Thread.State" | - "ArithmeticException" | - "ArrayIndexOutOfBoundsException" | - "ArrayStoreException" | - "ClassCastException" | - "ClassNotFoundException" | - "CloneNotSupportedException" | - "EnumConstantNotPresentException" | - "Exception" | - "IllegalAccessException" | - "IllegalArgumentException" | - "IllegalMonitorStateException" | - "IllegalStateException" | - "IllegalThreadStateException" | - "IndexOutOfBoundsException" | - "InstantiationException" | - "InterruptedException" | - "NegativeArraySizeException" | - "NoSuchFieldException" | - "NoSuchMethodException" | - "NullPointerException" | - "NumberFormatException" | - "RuntimeException" | - "SecurityException" | - "StringIndexOutOfBoundsException" | - "TypeNotPresentException" | - "UnsupportedOperationException" | - "AbstractMethodError" | - "AssertionError" | - "ClassCircularityError" | - "ClassFormatError" | - "Error" | - "ExceptionInInitializerError" | - "IllegalAccessError" | - "IncompatibleClassChangeError" | - "InstantiationError" | - "InternalError" | - "LinkageError" | - "NoClassDefFoundError" | - "NoSuchFieldError" | - "NoSuchMethodError" | - "OutOfMemoryError" | - "StackOverflowError" | - "ThreadDeath" | - "UnknownError" | - "UnsatisfiedLinkError" | - "UnsupportedClassVersionError" | - "VerifyError" | - "VirtualMachineError" { addToken(Token.FUNCTION); } - - + /* Standard library (TODO) */ + {LineTerminator} { addNullToken(); return firstToken; } {Identifier} { addToken(Token.IDENTIFIER); } -/* - * How should we handle generics? -"<"[^\[\]\{\}\(\)\+\-\*\/\%\&\|\!\~]+">" {addToken(Token.PREPROCESSOR); } -*/ - {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ @@ -485,15 +536,21 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + {HexStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + {UnclosedHexStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + {WysiwygStringLiteralStart} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); } + {WysiwygStringLiteralStart2} { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } - {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {NestableMLCBegin} { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); } {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + {LineDocCommentBegin} { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); } /* Annotations. */ - {Annotation} { addToken(Token.VARIABLE); /* FIXME: Add token type to Token? */ } + {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } @@ -504,6 +561,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } @@ -513,51 +571,93 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* Ended with a line not in a string or comment. */ <> { addNullToken(); return firstToken; } - /* Catch any other (unhandled) characters and flag them as bad. */ + /* Catch any other (unhandled) characters and flag them as identifiers. */ . { addToken(Token.ERROR_IDENTIFIER); } } - { [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } } - { - [^hwf\@\{\n\<\*]+ {} + [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } [hwf] {} - "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } - "@" {} - "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } - "{" {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; } - "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } - \< {} {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } \* {} + \n | <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } } + { + + [^hwf\n\+\/]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + {NestableMLCBegin} { nestedMlcDepth++; } + "/" {} + + "+/" { + System.out.println("... " + nestedMlcDepth); + if (--nestedMlcDepth==0) { + addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); + } + } + \+ {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; } +} { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; } + +} + + { + [^\"]+ { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } + \" { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } +} + + { + [^\`]+ { addToken(Token.LITERAL_BACKQUOTE); } + \` { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); } + <> { + if (firstToken==null) { + addToken(Token.LITERAL_BACKQUOTE); + } + return firstToken; + } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java new file mode 100755 index 000000000..16f9bc0cb --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DTokenMaker.java @@ -0,0 +1,1949 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:13 PM */ + +/* + * 09/08/2014 + * + * DTokenMaker.java - Scanner for the D programming language. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the D programming language.

              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                + *
              • The generated DTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • + *
              + * + * @author Robert Futrell + * @version 1.0 + * + */ + +public class DTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int WYSIWYG_STRING_1 = 6; + public static final int EOL_COMMENT = 4; + public static final int NESTABLE_MLC = 3; + public static final int DOCCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + public static final int WYSIWYG_STRING_2 = 7; + public static final int EOL_DOCCOMMENT = 5; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\22\1\11\1\0\1\22\1\20\22\0\1\22\1\60\1\16"+ + "\1\21\1\1\1\60\1\62\1\10\2\65\1\31\1\32\1\53\1\43"+ + "\1\44\1\30\1\4\1\5\2\17\4\7\2\3\1\63\1\53\1\54"+ + "\1\55\1\57\1\61\1\64\1\6\1\34\1\105\1\40\1\42\1\100"+ + "\2\1\1\101\2\1\1\33\1\102\1\104\1\103\1\107\1\1\1\110"+ + "\1\1\1\106\1\37\2\1\1\36\1\111\1\1\1\65\1\12\1\65"+ + "\1\56\1\2\1\27\1\47\1\35\1\24\1\41\1\46\1\15\1\71"+ + "\1\66\1\70\1\1\1\75\1\50\1\72\1\14\1\73\1\67\1\1"+ + "\1\26\1\51\1\45\1\13\1\76\1\23\1\25\1\74\1\77\1\52"+ + "\1\56\1\52\1\61\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\10\0\1\1\2\2\2\3\1\4\1\5\3\2\1\6"+ + "\1\1\1\7\4\2\1\10\3\11\2\2\1\11\6\2"+ + "\1\12\1\2\4\11\1\13\6\2\1\14\1\15\4\14"+ + "\1\16\5\14\1\17\3\14\1\20\3\14\1\21\1\22"+ + "\1\23\1\24\1\25\1\1\1\2\2\26\1\27\1\3"+ + "\1\26\1\27\2\26\1\30\2\26\1\4\1\31\1\0"+ + "\1\4\16\2\2\6\1\22\13\2\1\6\1\32\1\2"+ + "\1\33\1\34\1\35\4\2\1\36\24\2\1\0\1\11"+ + "\1\13\4\2\3\36\10\2\3\0\1\37\4\0\1\40"+ + "\1\0\1\41\1\42\4\0\1\1\10\2\1\3\1\27"+ + "\1\0\4\30\1\3\1\4\1\43\1\31\2\4\1\31"+ + "\1\4\11\2\1\36\1\6\1\44\1\6\1\22\12\2"+ + "\2\6\2\2\1\45\1\46\37\2\1\1\6\2\1\47"+ + "\12\2\14\0\1\1\11\2\1\30\2\26\1\43\1\4"+ + "\2\2\1\47\4\2\1\44\1\6\2\2\2\6\1\2"+ + "\1\50\6\2\1\51\13\2\1\1\13\2\1\0\1\52"+ + "\2\0\1\53\2\0\1\54\1\0\1\1\10\2\1\4"+ + "\1\2\1\36\1\2\1\6\1\2\1\6\10\2\1\1"+ + "\12\2\6\0\1\1\6\2\1\4\2\2\1\6\1\2"+ + "\1\6\1\55\2\2\1\1\12\2\1\36\1\6\1\2"+ + "\1\1\21\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[459]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\112\0\224\0\336\0\u0128\0\u0172\0\u01bc\0\u0206"+ + "\0\u0250\0\u029a\0\u02e4\0\u032e\0\u0378\0\u03c2\0\u040c\0\u0456"+ + "\0\u04a0\0\u04ea\0\u0534\0\u040c\0\u057e\0\u05c8\0\u0612\0\u065c"+ + "\0\u06a6\0\u040c\0\u06f0\0\u073a\0\u0784\0\u07ce\0\u0818\0\u0862"+ + "\0\u08ac\0\u08f6\0\u0940\0\u098a\0\u09d4\0\u0a1e\0\u040c\0\u040c"+ + "\0\u0a68\0\u0ab2\0\u040c\0\u0afc\0\u0b46\0\u0b90\0\u0bda\0\u0c24"+ + "\0\u0c6e\0\u0cb8\0\u0d02\0\u0d4c\0\u040c\0\u0d96\0\u0de0\0\u0e2a"+ + "\0\u0e74\0\u040c\0\u0ebe\0\u0f08\0\u0f52\0\u0f9c\0\u0fe6\0\u040c"+ + "\0\u1030\0\u107a\0\u10c4\0\u040c\0\u110e\0\u1158\0\u11a2\0\u040c"+ + "\0\u11ec\0\u040c\0\u1236\0\u040c\0\u1280\0\u12ca\0\u1314\0\u135e"+ + "\0\u1314\0\u1314\0\u13a8\0\u13f2\0\u143c\0\u1486\0\u14d0\0\u151a"+ + "\0\u1564\0\u15ae\0\u15f8\0\u1642\0\u168c\0\u16d6\0\u1720\0\u176a"+ + "\0\u17b4\0\u17fe\0\u1848\0\u1892\0\u18dc\0\u1926\0\u1970\0\u19ba"+ + "\0\u1a04\0\u1a4e\0\u1a98\0\u1ae2\0\u1b2c\0\u1b76\0\u1bc0\0\u1c0a"+ + "\0\u1c54\0\u1c9e\0\u1ce8\0\u1d32\0\u1d7c\0\u1dc6\0\u1e10\0\u1e5a"+ + "\0\u1ea4\0\u1eee\0\u040c\0\u1f38\0\u1f82\0\u1fcc\0\u040c\0\u2016"+ + "\0\u2060\0\u20aa\0\u20f4\0\u213e\0\u2188\0\u21d2\0\u221c\0\u2266"+ + "\0\u22b0\0\u22fa\0\u2344\0\u238e\0\u23d8\0\u2422\0\u246c\0\u24b6"+ + "\0\u2500\0\u254a\0\u2594\0\u25de\0\u2628\0\u2672\0\u26bc\0\u2706"+ + "\0\u073a\0\u2750\0\u279a\0\u27e4\0\u282e\0\u2878\0\u28c2\0\u290c"+ + "\0\u1ce8\0\u029a\0\u2956\0\u29a0\0\u29ea\0\u2a34\0\u2a7e\0\u2ac8"+ + "\0\u2b12\0\u2b5c\0\u2ba6\0\u2bf0\0\u2c3a\0\u040c\0\u2c84\0\u2cce"+ + "\0\u2d18\0\u2d62\0\u040c\0\u2dac\0\u040c\0\u040c\0\u2df6\0\u2e40"+ + "\0\u2e8a\0\u2ed4\0\u2f1e\0\u2f68\0\u2fb2\0\u2ffc\0\u3046\0\u3090"+ + "\0\u30da\0\u3124\0\u316e\0\u31b8\0\u3202\0\u324c\0\u3296\0\u32e0"+ + "\0\u332a\0\u3374\0\u33be\0\u3408\0\u3452\0\u040c\0\u349c\0\u34e6"+ + "\0\u3530\0\u357a\0\u35c4\0\u360e\0\u3658\0\u36a2\0\u36ec\0\u3736"+ + "\0\u3780\0\u37ca\0\u3814\0\u385e\0\u38a8\0\u38f2\0\u393c\0\u040c"+ + "\0\u3986\0\u39d0\0\u3a1a\0\u3a64\0\u213e\0\u3aae\0\u3af8\0\u3b42"+ + "\0\u3b8c\0\u3bd6\0\u3c20\0\u3c6a\0\u3cb4\0\u3cfe\0\u040c\0\u3d48"+ + "\0\u3d92\0\u3ddc\0\u3e26\0\u3e70\0\u3eba\0\u3f04\0\u3f4e\0\u3f98"+ + "\0\u3fe2\0\u402c\0\u4076\0\u40c0\0\u410a\0\u4154\0\u419e\0\u41e8"+ + "\0\u4232\0\u427c\0\u42c6\0\u4310\0\u435a\0\u43a4\0\u43ee\0\u4438"+ + "\0\u4482\0\u44cc\0\u4516\0\u4560\0\u45aa\0\u45f4\0\u463e\0\u4688"+ + "\0\u46d2\0\u471c\0\u4766\0\u47b0\0\u47fa\0\u4844\0\u488e\0\u48d8"+ + "\0\u4922\0\u496c\0\u49b6\0\u4a00\0\u4a4a\0\u4a94\0\u4ade\0\u4b28"+ + "\0\u4b72\0\u4bbc\0\u4c06\0\u4c50\0\u4c9a\0\u4ce4\0\u4d2e\0\u4d78"+ + "\0\u4dc2\0\u4e0c\0\u4e56\0\u4ea0\0\u4eea\0\u4f34\0\u4f7e\0\u4fc8"+ + "\0\u5012\0\u505c\0\u50a6\0\u50f0\0\u513a\0\u5184\0\u51ce\0\u1314"+ + "\0\u5218\0\u33be\0\u040c\0\u5262\0\u52ac\0\u52f6\0\u029a\0\u5340"+ + "\0\u538a\0\u53d4\0\u541e\0\u040c\0\u5468\0\u54b2\0\u54fc\0\u5546"+ + "\0\u5590\0\u55da\0\u040c\0\u5624\0\u566e\0\u56b8\0\u5702\0\u574c"+ + "\0\u5796\0\u029a\0\u57e0\0\u582a\0\u5874\0\u58be\0\u5908\0\u5952"+ + "\0\u599c\0\u59e6\0\u5a30\0\u5a7a\0\u5ac4\0\u5b0e\0\u5b58\0\u5ba2"+ + "\0\u5bec\0\u5c36\0\u5c80\0\u5cca\0\u5d14\0\u5d5e\0\u5da8\0\u5df2"+ + "\0\u5e3c\0\u5e86\0\u5ed0\0\u5f1a\0\u5f64\0\u5fae\0\u5ff8\0\u6042"+ + "\0\u608c\0\u60d6\0\u6120\0\u616a\0\u61b4\0\u61fe\0\u6248\0\u6292"+ + "\0\u62dc\0\u6326\0\u6370\0\u63ba\0\u6404\0\u644e\0\u6498\0\u64e2"+ + "\0\u652c\0\u6576\0\u65c0\0\u660a\0\u6654\0\u669e\0\u66e8\0\u6732"+ + "\0\u677c\0\u67c6\0\u6810\0\u685a\0\u68a4\0\u68ee\0\u6938\0\u6982"+ + "\0\u69cc\0\u6a16\0\u6a60\0\u6aaa\0\u6af4\0\u6b3e\0\u5ed0\0\u6b88"+ + "\0\u5fae\0\u6bd2\0\u608c\0\u6c1c\0\u6c66\0\u6cb0\0\u6cfa\0\u6d44"+ + "\0\u6d8e\0\u6dd8\0\u6e22\0\u6e6c\0\u6eb6\0\u6f00\0\u6f4a\0\u6f94"+ + "\0\u029a\0\u6fde\0\u7028\0\u7072\0\u70bc\0\u7106\0\u7150\0\u719a"+ + "\0\u71e4\0\u722e\0\u7278\0\u72c2\0\u730c\0\u7356\0\u73a0\0\u73ea"+ + "\0\u7434\0\u747e\0\u74c8\0\u7512\0\u755c\0\u75a6\0\u75f0\0\u763a"+ + "\0\u7684\0\u76ce\0\u7718\0\u7762\0\u77ac\0\u77f6\0\u7840\0\u788a"+ + "\0\u78d4\0\u791e\0\u7968"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[459]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\11\1\12\1\13\1\14\1\15\1\14\1\12\1\14"+ + "\1\16\1\17\1\11\1\20\1\21\1\22\1\23\1\14"+ + "\1\24\1\11\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\2\12\1\36\3\12\1\37\1\12"+ + "\1\40\1\41\1\42\1\43\1\44\1\45\1\46\1\47"+ + "\1\50\1\51\2\34\1\52\1\34\1\53\1\54\1\53"+ + "\1\55\1\47\1\12\1\56\1\57\1\60\1\61\1\62"+ + "\2\12\1\63\13\12\11\64\1\65\3\64\1\66\5\64"+ + "\1\67\5\64\1\70\34\64\1\71\34\64\1\72\3\64"+ + "\1\73\5\64\1\74\5\64\1\75\34\64\1\76\23\64"+ + "\11\77\1\100\3\77\1\66\5\77\1\67\4\77\1\101"+ + "\1\77\1\102\33\77\1\71\23\77\11\103\1\104\3\103"+ + "\1\105\5\103\1\106\42\103\1\107\34\103\1\110\3\103"+ + "\1\73\5\103\1\74\42\103\1\76\23\103\16\111\1\112"+ + "\73\111\27\113\1\114\62\113\10\11\2\0\4\11\1\0"+ + "\1\11\1\0\1\11\1\0\4\11\4\0\10\11\2\0"+ + "\5\11\12\0\1\11\1\0\25\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\1\12\1\116\5\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\2\117\1\120\3\14\1\117"+ + "\1\14\2\0\3\117\1\121\1\0\1\14\1\0\1\117"+ + "\1\0\4\117\4\0\1\122\4\117\2\121\1\123\1\0"+ + "\1\124\1\117\1\123\1\117\1\122\1\117\12\0\1\117"+ + "\1\0\12\117\1\121\13\117\1\125\1\126\2\127\1\117"+ + "\1\127\2\0\3\117\1\121\1\0\1\127\1\0\1\117"+ + "\1\0\2\117\1\130\1\117\4\0\1\122\2\131\1\130"+ + "\1\117\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ + "\1\122\1\117\12\0\1\117\1\0\12\117\1\121\11\117"+ + "\10\132\1\133\1\134\1\135\77\132\112\0\1\11\7\12"+ + "\2\0\1\115\1\12\1\136\1\12\1\0\1\12\1\0"+ + "\1\11\1\0\1\12\1\137\2\12\4\0\2\12\1\140"+ + "\5\12\2\0\3\12\1\141\1\142\12\0\1\11\1\0"+ + "\2\12\1\143\21\12\1\11\7\12\2\0\1\115\1\144"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\145\3\12\12\0\1\11\1\0"+ + "\5\12\1\146\16\12\1\11\7\12\2\0\1\115\1\147"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\2\12\1\150\1\151\1\12\12\0\1\11"+ + "\1\0\2\12\1\152\2\12\1\153\16\12\11\23\1\154"+ + "\1\155\3\23\1\156\73\23\22\0\1\25\67\0\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\157\2\12\4\0\10\12\2\0\4\12"+ + "\1\160\12\0\1\11\1\0\1\161\1\12\1\162\21\12"+ + "\1\11\7\12\2\0\1\115\2\12\1\163\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\164\4\0\6\12\1\165"+ + "\1\12\2\0\1\12\1\143\1\166\1\167\1\12\12\0"+ + "\1\11\1\0\1\170\4\12\1\171\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\172\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\173\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\174\3\12\12\0\1\11\1\0\24\12\30\0\1\175"+ + "\1\176\1\177\22\0\1\53\111\0\1\53\66\0\1\53"+ + "\22\0\1\53\34\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\200\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\201"+ + "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\1\12\1\157\2\12\4\0"+ + "\10\12\2\0\1\12\1\203\2\12\1\160\12\0\1\11"+ + "\1\0\5\12\1\204\16\12\43\0\1\53\11\0\1\53"+ + "\37\0\3\124\1\0\1\124\7\0\1\124\72\0\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\205\4\0\10\12\2\0\1\12\1\206"+ + "\3\12\12\0\1\11\1\0\1\207\5\12\1\210\15\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\211\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\2\12\1\212\1\12\4\0"+ + "\10\12\2\0\3\12\1\213\1\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\1\214\2\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\215"+ + "\5\12\2\0\3\12\1\216\1\217\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\220\2\12\12\0\1\11\1\0\5\12\1\221\16\12"+ + "\1\11\7\12\2\0\1\115\1\222\2\12\1\0\1\12"+ + "\1\0\1\11\1\0\1\223\1\224\2\12\4\0\10\12"+ + "\2\0\1\225\4\12\12\0\1\11\1\0\1\226\1\12"+ + "\1\227\3\12\1\230\15\12\54\0\1\231\1\53\111\0"+ + "\1\53\1\0\1\232\107\0\1\53\4\0\1\53\27\0"+ + "\1\11\2\233\3\11\1\233\1\11\2\0\1\11\3\233"+ + "\1\0\1\11\1\0\1\11\1\0\4\233\4\0\10\233"+ + "\2\0\5\233\12\0\1\11\1\0\24\233\1\11\7\12"+ + "\2\0\1\115\1\234\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\235\4\0\10\12\2\0\1\236\1\12"+ + "\1\237\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\1\12\1\240\1\241\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\164\4\0\6\12\1\165\1\12"+ + "\2\0\4\12\1\242\12\0\1\11\1\0\4\12\1\243"+ + "\17\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\5\12\1\214\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\244\2\12\12\0"+ + "\1\11\1\0\2\12\1\245\2\12\1\246\16\12\1\11"+ + "\7\12\2\0\1\115\1\247\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\10\12\1\250\13\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\251\3\12\12\0\1\11"+ + "\1\0\5\12\1\252\16\12\11\64\1\0\3\64\1\0"+ + "\5\64\1\0\5\64\1\0\34\64\1\0\23\64\45\0"+ + "\1\253\22\0\1\254\44\0\1\255\116\0\1\256\126\0"+ + "\1\257\111\0\1\260\22\0\1\261\44\0\1\262\116\0"+ + "\1\263\126\0\1\264\44\0\11\77\1\0\3\77\1\0"+ + "\5\77\1\0\4\77\1\0\1\77\1\0\33\77\1\0"+ + "\23\77\32\0\1\265\107\0\1\266\61\0\11\103\1\0"+ + "\3\103\1\0\5\103\1\0\42\103\1\0\23\103\45\0"+ + "\1\267\22\0\1\270\44\0\1\271\133\0\1\272\44\0"+ + "\16\111\1\0\73\111\27\113\1\0\62\113\10\11\2\0"+ + "\1\11\1\273\2\11\1\0\1\11\1\0\1\11\1\0"+ + "\4\11\4\0\10\11\2\0\5\11\12\0\1\11\1\0"+ + "\25\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\1\274\7\12\2\0\1\275"+ + "\4\12\12\0\1\11\1\0\1\12\1\276\1\12\1\277"+ + "\4\12\1\300\1\12\1\301\1\12\1\302\4\12\1\303"+ + "\2\12\10\117\2\0\4\117\1\0\1\117\1\0\1\117"+ + "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ + "\1\0\26\117\1\120\3\304\1\117\1\304\2\0\4\117"+ + "\1\0\1\304\1\0\1\117\1\0\4\117\4\0\10\117"+ + "\2\0\5\117\12\0\1\117\1\0\27\117\3\305\1\117"+ + "\1\305\2\0\4\117\1\0\1\305\1\0\1\117\1\0"+ + "\4\117\3\0\1\306\10\117\1\306\1\0\5\117\12\0"+ + "\1\117\1\0\27\117\3\124\1\117\1\124\2\0\3\117"+ + "\1\121\1\0\1\124\1\0\1\117\1\0\4\117\4\0"+ + "\5\117\2\121\1\123\2\0\1\117\1\123\3\117\12\0"+ + "\1\117\1\0\12\117\1\121\13\117\1\125\1\117\2\307"+ + "\1\117\1\307\2\0\4\117\1\0\1\307\1\0\1\117"+ + "\1\0\4\117\4\0\10\117\2\0\5\117\12\0\1\117"+ + "\1\0\27\117\3\126\1\117\1\126\2\0\3\117\1\121"+ + "\1\0\1\126\1\0\1\117\1\0\4\117\4\0\5\117"+ + "\2\121\1\123\1\0\1\124\1\117\1\123\3\117\12\0"+ + "\1\117\1\0\12\117\1\121\13\117\1\125\1\126\2\127"+ + "\1\117\1\127\2\0\1\117\1\310\1\117\1\121\1\0"+ + "\1\127\1\0\1\117\1\0\4\117\4\0\1\311\3\117"+ + "\1\310\2\121\1\123\1\0\1\124\1\117\1\123\1\117"+ + "\1\311\1\117\12\0\1\117\1\0\12\117\1\121\14\117"+ + "\5\312\2\0\3\117\1\312\1\0\1\312\1\0\1\117"+ + "\1\0\1\117\1\312\2\117\4\0\1\117\2\312\2\117"+ + "\3\312\2\0\1\117\2\312\2\117\12\0\1\117\1\0"+ + "\12\117\1\312\4\117\1\312\10\117\2\313\2\117\2\0"+ + "\4\117\1\0\1\117\1\0\1\117\1\0\4\117\4\0"+ + "\10\117\2\0\5\117\12\0\1\117\1\0\24\117\10\314"+ + "\1\315\1\0\100\314\23\0\2\316\14\0\1\316\60\0"+ + "\1\315\101\0\4\314\2\317\1\314\1\320\1\321\1\0"+ + "\1\132\1\322\3\132\1\317\6\314\1\132\6\314\1\132"+ + "\7\314\1\132\44\314\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\323\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\143"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\6\12"+ + "\1\202\15\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\5\12\1\221\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\1\324\23\12\1\11\7\12\2\0\1\115\1\12"+ + "\1\325\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\326"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\242"+ + "\3\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\327"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\1\12\1\330\1\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\331\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\5\12\1\332\16\12\1\11\7\12\2\0\1\115"+ + "\1\12\1\333\1\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\334\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\12\154\1\335\3\154"+ + "\1\336\77\154\2\23\1\154\2\23\1\0\1\23\1\337"+ + "\4\23\6\154\1\23\6\154\1\23\7\154\1\23\44\154"+ + "\23\0\2\340\14\0\1\340\50\0\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\170"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\341"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\342\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\343\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\3\12\1\151\1\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\344\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\5\12\1\345\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\346\3\12\1\347\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\350\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\351\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\1\12\1\352\1\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\11\172\1\353\1\354\3\172\1\156\73\172\1\11"+ + "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\355\1\12"+ + "\1\356\2\12\12\0\1\11\1\0\24\12\30\0\1\357"+ + "\112\0\1\360\60\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\361\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\6\12\1\362\1\12\2\0"+ + "\5\12\12\0\1\11\1\0\5\12\1\356\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\363\4\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\2\12"+ + "\1\364\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\2\12\1\365\5\12\2\0\3\12\1\366\1\12\12\0"+ + "\1\11\1\0\1\12\1\367\22\12\1\11\7\12\2\0"+ + "\1\115\1\370\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\1\371\2\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\6\12\1\242\15\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\4\12\1\372\17\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\373"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\374\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\1\12\1\375\22\12\1\11"+ + "\7\12\2\0\1\115\1\376\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\377\4\12\12\0\1\11\1\0\1\12\1\u0100"+ + "\22\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ + "\1\u0101\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u0102\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\4\12"+ + "\1\u0103\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\2\12"+ + "\1\u0104\21\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\4\12\1\u0105\12\0\1\11\1\0\4\12\1\242\17\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\11\12\1\362\12\12\1\11\7\12\2\0"+ + "\1\115\1\12\1\u0106\1\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\1\12\1\u0107\22\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\2\12\1\u0108\21\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\5\12\1\u0109"+ + "\16\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\u010a\4\0\10\12\2\0"+ + "\2\12\1\u010b\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c\2\12"+ + "\12\0\1\11\1\0\5\12\1\u010d\16\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\11\12\1\u010e\12\12\1\11\7\12\2\0\1\115\1\12"+ + "\1\u010f\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\55\0\1\53\1\0\1\34\32\0\1\11\7\233\2\0"+ + "\1\u0110\3\233\1\0\1\233\1\0\1\11\1\0\4\233"+ + "\4\0\10\233\2\0\5\233\12\0\1\11\1\0\24\233"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\u0101\4\0\2\12\1\u0111\5\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u0112\2\12\12\0"+ + "\1\11\1\0\2\12\1\u0113\2\12\1\u0114\16\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0115\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0116\2\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\u0117\4\12"+ + "\12\0\1\11\1\0\5\12\1\u0118\2\12\1\u0119\13\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\1\12\1\u0100\2\12\1\u011a\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u011b\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\2\12\1\u011c"+ + "\1\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\6\12\1\u011d\1\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\242\4\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u011e\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u011f\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u0120\1\12\12\0\1\11\1\0\2\12"+ + "\1\u0121\21\12\67\0\1\u0122\72\0\1\u0123\64\0\1\u0124"+ + "\133\0\1\u0125\133\0\1\u0126\72\0\1\u0127\64\0\1\u0128"+ + "\133\0\1\u0129\133\0\1\u012a\72\0\1\u012b\64\0\1\u012c"+ + "\133\0\1\u012d\44\0\3\11\5\u012e\2\0\3\11\1\u012e"+ + "\1\0\1\u012e\1\0\1\11\1\0\1\11\1\u012e\2\11"+ + "\4\0\1\11\2\u012e\2\11\3\u012e\2\0\1\11\2\u012e"+ + "\2\11\12\0\1\11\1\0\12\11\1\u012e\4\11\1\u012e"+ + "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\13\12\1\u012f\10\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0130\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u0131\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\4\12\1\u0132\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0133\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\4\12\1\u0134\3\12\2\0\5\12"+ + "\12\0\1\11\1\0\13\12\1\u0135\10\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\15\12\1\u0136\6\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\22\12\1\u0137\1\12"+ + "\2\117\1\120\3\304\1\117\1\304\2\0\4\117\1\0"+ + "\1\304\1\0\1\117\1\0\4\117\4\0\1\122\7\117"+ + "\2\0\3\117\1\122\1\117\12\0\1\117\1\0\27\117"+ + "\3\305\1\117\1\305\2\0\3\117\1\121\1\0\1\305"+ + "\1\0\1\117\1\0\4\117\4\0\5\117\2\121\1\117"+ + "\2\0\5\117\12\0\1\117\1\0\12\117\1\121\11\117"+ + "\3\0\3\305\1\0\1\305\7\0\1\305\72\0\2\117"+ + "\1\125\1\117\2\307\1\117\1\307\2\0\1\117\1\310"+ + "\2\117\1\0\1\307\1\0\1\117\1\0\4\117\4\0"+ + "\1\311\3\117\1\310\3\117\2\0\3\117\1\311\1\117"+ + "\12\0\1\117\1\0\34\117\2\0\4\117\1\0\1\117"+ + "\1\0\1\117\1\0\4\117\4\0\1\u0138\7\117\2\0"+ + "\3\117\1\u0138\1\117\12\0\1\117\1\0\34\117\2\0"+ + "\1\117\1\u0138\2\117\1\0\1\117\1\0\1\117\1\0"+ + "\4\117\4\0\4\117\1\u0138\3\117\2\0\5\117\12\0"+ + "\1\117\1\0\26\117\1\u0139\5\312\2\0\1\117\1\310"+ + "\1\117\1\312\1\0\1\312\1\0\1\117\1\0\1\117"+ + "\1\312\2\117\4\0\1\311\2\312\1\117\1\310\3\312"+ + "\2\0\1\117\2\312\1\311\1\117\12\0\1\117\1\0"+ + "\12\117\1\312\4\117\1\312\6\117\1\u013a\1\117\2\313"+ + "\2\117\2\0\4\117\1\0\1\117\1\0\1\117\1\0"+ + "\4\117\4\0\10\117\2\0\5\117\12\0\1\117\1\0"+ + "\24\117\10\314\1\133\1\0\100\314\23\0\2\u013b\14\0"+ + "\1\u013b\50\0\4\314\2\320\1\314\1\320\1\315\1\0"+ + "\5\314\1\320\76\314\2\132\1\314\1\132\1\315\1\0"+ + "\5\314\1\132\72\314\10\0\1\315\12\0\2\316\14\0"+ + "\1\316\50\0\3\314\5\u013c\1\133\1\0\3\314\1\u013c"+ + "\1\314\1\u013c\4\314\1\u013c\7\314\2\u013c\2\314\3\u013c"+ + "\3\314\2\u013c\30\314\1\u013c\4\314\1\u013c\4\314\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u013d\4\12\12\0"+ + "\1\11\1\0\5\12\1\u013e\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ + "\1\u010d\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u013f\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\3\12\1\242\1\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\1\u0140\23\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u0141\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\4\12\1\371\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\325"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\2\12\1\u0142\2\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0143\3\12\12\0\1\11\1\0\24\12\11\154"+ + "\1\0\100\154\23\0\2\u0144\14\0\1\u0144\50\0\3\154"+ + "\5\u0145\2\154\1\335\2\154\1\u0145\1\336\1\u0145\4\154"+ + "\1\u0145\7\154\2\u0145\2\154\3\u0145\3\154\2\u0145\30\154"+ + "\1\u0145\4\154\1\u0145\4\154\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\3\12\1\u0146"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\u0101"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\242"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\356\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\1\12\1\343\2\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\242\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\4\12\1\374\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u013f\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u0147\3\12\1\247"+ + "\12\0\1\11\1\0\24\12\12\353\1\u0148\3\353\1\0"+ + "\77\353\2\172\1\353\2\172\1\0\1\172\1\u0149\4\172"+ + "\6\353\1\172\6\353\1\172\7\353\1\172\44\353\1\11"+ + "\7\12\2\0\1\115\1\u014a\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u013f\1\12\12\0\1\11\1\0\24\12"+ + "\30\0\1\u014b\61\0\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u014c\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\6\12\1\242\15\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u013f\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\u014d\2\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\1\u014e\2\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u014f\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\u0150\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\2\12\1\u0151\5\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\u0152\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\1\12\1\u0153\22\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\5\12\1\145\16\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\4\12\1\242"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u0154\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\4\12\1\242\17\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\12\1\u0155\3\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\5\12\1\u0156\16\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\242"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\5\12"+ + "\1\242\16\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u0157\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\374\2\12\12\0"+ + "\1\11\1\0\3\12\1\u013e\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u0156\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\3\12\1\u013f\20\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0158\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\346\4\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\1\12\1\u0101\22\12\1\11\7\12\2\0"+ + "\1\115\1\u0159\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\221\21\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u015a\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u015b\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\325\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u015c\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\1\12\1\u015d"+ + "\2\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\10\11\2\0\1\11\1\u015e\2\11\1\0\1\11"+ + "\1\0\1\11\1\0\4\11\4\0\10\11\2\0\5\11"+ + "\12\0\1\11\1\0\25\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\3\12\1\u015a\1\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\3\12\1\u015f\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\10\12"+ + "\1\u0160\13\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\u0161\4\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\6\12\1\u0162\1\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\7\12\1\u0163\14\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\12\1\u0164"+ + "\3\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\1\247\2\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u0165\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\1\u0166\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\3\12\1\u0102\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u013e\21\12\1\11\7\12\2\0\1\115\1\342"+ + "\2\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0167\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\4\12\1\u0168\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u0169\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\6\12\1\242\1\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\63\0\1\u016a\74\0\1\u0122\107\0\1\u016b\134\0"+ + "\1\u016c\105\0\1\u016d\74\0\1\u0126\107\0\1\u016e\134\0"+ + "\1\u016f\105\0\1\u0170\74\0\1\u012a\107\0\1\u0171\134\0"+ + "\1\u0172\22\0\3\11\5\u0173\2\0\3\11\1\u0173\1\0"+ + "\1\u0173\1\0\1\11\1\0\1\11\1\u0173\2\11\4\0"+ + "\1\11\2\u0173\2\11\3\u0173\2\0\1\11\2\u0173\2\11"+ + "\12\0\1\11\1\0\12\11\1\u0173\4\11\1\u0173\5\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\16\12\1\u0174\5\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\2\12\1\u0175\2\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\u0176\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\1\u0177"+ + "\23\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\1\12\1\u0178\2\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\16\12\1\u0179\5\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\1\u0174"+ + "\7\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\5\12\1\u017a\2\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\7\12\1\u017b\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\2\117\1\u0139\5\312\2\0\3\117\1\312\1\0\1\312"+ + "\1\0\1\117\1\0\1\117\1\312\2\117\4\0\1\117"+ + "\2\312\2\117\3\312\2\0\1\117\2\312\2\117\12\0"+ + "\1\117\1\0\12\117\1\312\4\117\1\312\4\117\3\314"+ + "\5\u017c\1\133\1\0\3\314\1\u017c\1\314\1\u017c\4\314"+ + "\1\u017c\7\314\2\u017c\2\314\3\u017c\3\314\2\u017c\30\314"+ + "\1\u017c\4\314\1\u017c\4\314\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\u017d\4\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\242\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\373\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\u0168"+ + "\4\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\3\12\1\u017e\1\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\2\12\1\u017f\2\12\12\0\1\11\1\0\24\12\3\154"+ + "\5\u0180\2\154\1\335\2\154\1\u0180\1\336\1\u0180\4\154"+ + "\1\u0180\7\154\2\u0180\2\154\3\u0180\3\154\2\u0180\30\154"+ + "\1\u0180\4\154\1\u0180\4\154\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\2\12\1\221"+ + "\21\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u0181\21\12\11\353\1\0"+ + "\103\353\5\u0182\2\353\1\u0148\2\353\1\u0182\1\0\1\u0182"+ + "\4\353\1\u0182\7\353\2\u0182\2\353\3\u0182\3\353\2\u0182"+ + "\30\353\1\u0182\4\353\1\u0182\4\353\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0183\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\7\12\1\242\14\12\1\11\7\12"+ + "\2\0\1\115\1\u0184\2\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\3\12\1\242\20\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\u0101\4\12\12\0"+ + "\1\11\1\0\3\12\1\u0160\20\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u0185\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\363\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\3\12\1\u0160\1\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\6\12\1\u0186\1\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u0121\2\12\1\u0187\16\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u013e\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\247\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u0188\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\3\12\1\242\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ + "\1\247\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\2\12\1\u0189\21\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\1\12\1\u0121\3\12"+ + "\12\0\1\11\1\0\24\12\1\11\1\12\1\325\5\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\1\u018a\23\12\3\11\5\u018b\2\0"+ + "\3\11\1\u018b\1\0\1\u018b\1\0\1\11\1\0\1\11"+ + "\1\u018b\2\11\4\0\1\11\2\u018b\2\11\3\u018b\2\0"+ + "\1\11\2\u018b\2\11\12\0\1\11\1\0\12\11\1\u018b"+ + "\4\11\1\u018b\5\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\4\12\1\u018c\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\2\12\1\u018d\2\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u018e\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u018f\21\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u0190\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u0191\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0192\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u0193\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\3\12\1\u0194\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\u0195\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\161\4\12"+ + "\12\0\1\11\1\0\24\12\30\0\1\u0196\62\0\1\u016b"+ + "\1\u0197\5\u016b\1\u0197\2\0\3\u016b\1\0\1\u016b\1\0"+ + "\1\u0197\1\0\4\u016b\1\0\1\u016b\2\u0197\10\u016b\2\u0197"+ + "\5\u016b\1\0\1\u0197\1\0\1\u0197\2\0\6\u0197\24\u016b"+ + "\51\0\1\u0122\11\0\1\u016a\56\0\1\u0198\62\0\1\u016e"+ + "\1\u0199\5\u016e\1\u0199\2\0\3\u016e\1\0\1\u016e\1\0"+ + "\1\u0199\1\0\4\u016e\1\0\1\u016e\2\u0199\10\u016e\2\u0199"+ + "\5\u016e\1\0\1\u0199\1\0\1\u0199\2\0\6\u0199\24\u016e"+ + "\51\0\1\u0126\11\0\1\u016d\56\0\1\u019a\62\0\1\u0171"+ + "\1\u019b\5\u0171\1\u019b\2\0\3\u0171\1\0\1\u0171\1\0"+ + "\1\u019b\1\0\4\u0171\1\0\1\u0171\2\u019b\10\u0171\2\u019b"+ + "\5\u0171\1\0\1\u019b\1\0\1\u019b\2\0\6\u019b\24\u0171"+ + "\51\0\1\u012a\11\0\1\u0170\26\0\3\11\5\u019c\2\0"+ + "\3\11\1\u019c\1\0\1\u019c\1\0\1\11\1\0\1\11"+ + "\1\u019c\2\11\4\0\1\11\2\u019c\2\11\3\u019c\2\0"+ + "\1\11\2\u019c\2\11\12\0\1\11\1\0\12\11\1\u019c"+ + "\4\11\1\u019c\5\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\7\12\1\u019d"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\2\12\1\u019e\21\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u019f\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u010c"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u01a0\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\17\12\1\u01a1\4\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\4\12\1\u0135\3\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\20\12\1\u01a2\3\12"+ + "\3\314\5\u01a3\1\133\1\0\3\314\1\u01a3\1\314\1\u01a3"+ + "\4\314\1\u01a3\7\314\2\u01a3\2\314\3\u01a3\3\314\2\u01a3"+ + "\30\314\1\u01a3\4\314\1\u01a3\4\314\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\12\1\u01a4\3\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\3\12\1\362\1\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u01a5\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\154\5\u01a6\2\154\1\335"+ + "\2\154\1\u01a6\1\336\1\u01a6\4\154\1\u01a6\7\154\2\u01a6"+ + "\2\154\3\u01a6\3\154\2\u01a6\30\154\1\u01a6\4\154\1\u01a6"+ + "\4\154\1\11\7\12\2\0\1\115\1\12\1\u01a7\1\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\3\353\5\u01a8"+ + "\2\353\1\u0148\2\353\1\u01a8\1\0\1\u01a8\4\353\1\u01a8"+ + "\7\353\2\u01a8\2\353\3\u01a8\3\353\2\u01a8\30\353\1\u01a8"+ + "\4\353\1\u01a8\4\353\1\11\7\12\2\0\1\115\1\12"+ + "\1\u01a9\1\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\3\12\1\247"+ + "\1\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\1\12"+ + "\1\u01aa\2\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\1\12\1\u0187\3\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\2\12\1\242\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\2\12\1\u0159\2\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\1\12\1\242\2\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\u01ab\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\3\11\5\u01ac\2\0\3\11\1\u01ac\1\0\1\u01ac"+ + "\1\0\1\11\1\0\1\11\1\u01ac\2\11\4\0\1\11"+ + "\2\u01ac\2\11\3\u01ac\2\0\1\11\2\u01ac\2\11\12\0"+ + "\1\11\1\0\12\11\1\u01ac\4\11\1\u01ac\5\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\242\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\u0101\4\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\1\12\1\u01ad\2\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\2\12\1\u01ae\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\3\12\1\u0101\20\12\1\11\7\12\2\0"+ + "\1\115\2\12\1\u01af\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\2\12\1\u01b0\21\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\2\12\1\u01b1\2\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\2\12\1\u01b2\21\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\5\12\1\u013e\16\12\30\0\1\u016b\111\0"+ + "\1\u016e\111\0\1\u0171\61\0\3\11\5\12\2\0\3\11"+ + "\1\12\1\0\1\12\1\0\1\11\1\0\1\11\1\12"+ + "\2\11\4\0\1\11\2\12\2\11\3\12\2\0\1\11"+ + "\2\12\2\11\12\0\1\11\1\0\12\11\1\12\4\11"+ + "\1\12\5\11\1\12\1\u01b3\5\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\1\374\4\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\4\12\1\u01b4\17\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\5\12\1\u0158\16\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\20\12\1\u01b5"+ + "\3\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\20\12\1\u01b6\3\12\3\314\5\132"+ + "\1\133\1\0\3\314\1\132\1\314\1\132\4\314\1\132"+ + "\7\314\2\132\2\314\3\132\3\314\2\132\30\314\1\132"+ + "\4\314\1\132\4\314\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\4\12\1\247\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\1\u01b7\23\12\3\154\5\23\2\154\1\335\2\154"+ + "\1\23\1\336\1\23\4\154\1\23\7\154\2\23\2\154"+ + "\3\23\3\154\2\23\30\154\1\23\4\154\1\23\4\154"+ + "\1\11\7\12\2\0\1\115\1\u0101\2\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\353\5\u01b8\2\353\1\u0148"+ + "\2\353\1\u01b8\1\0\1\u01b8\4\353\1\u01b8\7\353\2\u01b8"+ + "\2\353\3\u01b8\3\353\2\u01b8\30\353\1\u01b8\4\353\1\u01b8"+ + "\4\353\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\2\12"+ + "\1\u01ad\2\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\5\12\1\u01b9\16\12\3\11\5\u01ba\2\0\3\11\1\u01ba"+ + "\1\0\1\u01ba\1\0\1\11\1\0\1\11\1\u01ba\2\11"+ + "\4\0\1\11\2\u01ba\2\11\3\u01ba\2\0\1\11\2\u01ba"+ + "\2\11\12\0\1\11\1\0\12\11\1\u01ba\4\11\1\u01ba"+ + "\5\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\1\u015b\4\12"+ + "\12\0\1\11\1\0\24\12\1\11\7\12\2\0\1\115"+ + "\2\12\1\u015c\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\2\12\1\u01bb"+ + "\2\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\2\12\1\u01bc\2\12\12\0\1\11"+ + "\1\0\24\12\1\11\7\12\2\0\1\115\3\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\2\12\1\342"+ + "\5\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\6\12\1\u0101\1\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\1\11\1\12\1\242\5\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\1\12"+ + "\1\u01bd\3\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\13\12\1\u01be\10\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\23\12\1\u01bf\1\11"+ + "\1\12\1\u01c0\5\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12\3\353\5\172\2\353\1\u0148"+ + "\2\353\1\172\1\0\1\172\4\353\1\172\7\353\2\172"+ + "\2\353\3\172\3\353\2\172\30\353\1\172\4\353\1\172"+ + "\4\353\1\11\7\12\2\0\1\115\1\12\1\u01c1\1\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\3\11\5\233"+ + "\2\0\3\11\1\233\1\0\1\233\1\0\1\11\1\0"+ + "\1\11\1\233\2\11\4\0\1\11\2\233\2\11\3\233"+ + "\2\0\1\11\2\233\2\11\12\0\1\11\1\0\12\11"+ + "\1\233\4\11\1\233\5\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\1\12\1\u0101\2\12"+ + "\4\0\10\12\2\0\5\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\1\12\1\247\1\12\1\0"+ + "\1\12\1\0\1\11\1\0\4\12\4\0\10\12\2\0"+ + "\5\12\12\0\1\11\1\0\24\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\4\12"+ + "\4\0\10\12\2\0\1\u01c2\4\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\15\12\1\u01c3\6\12\1\11\1\12"+ + "\1\u01c4\5\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\24\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\3\12\1\u01c5\4\0"+ + "\10\12\2\0\5\12\12\0\1\11\1\0\24\12\1\11"+ + "\7\12\2\0\1\115\3\12\1\0\1\12\1\0\1\11"+ + "\1\0\4\12\4\0\10\12\2\0\5\12\12\0\1\11"+ + "\1\0\2\12\1\u01c6\21\12\1\11\7\12\2\0\1\115"+ + "\3\12\1\0\1\12\1\0\1\11\1\0\4\12\4\0"+ + "\10\12\2\0\1\12\1\u01c7\3\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\16\12\1\u019d\5\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\12\12\1\u01c8\11\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u01c9\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\4\12\4\0\10\12\2\0\5\12\12\0"+ + "\1\11\1\0\11\12\1\u015b\12\12\1\11\7\12\2\0"+ + "\1\115\3\12\1\0\1\12\1\0\1\11\1\0\3\12"+ + "\1\374\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\24\12\1\11\7\12\2\0\1\115\3\12\1\0\1\12"+ + "\1\0\1\11\1\0\4\12\4\0\4\12\1\u0134\3\12"+ + "\2\0\5\12\12\0\1\11\1\0\24\12\1\11\7\12"+ + "\2\0\1\115\3\12\1\0\1\12\1\0\1\11\1\0"+ + "\4\12\4\0\10\12\2\0\5\12\12\0\1\11\1\0"+ + "\10\12\1\u01ca\13\12\1\11\7\12\2\0\1\115\3\12"+ + "\1\0\1\12\1\0\1\11\1\0\4\12\4\0\10\12"+ + "\2\0\1\12\1\u01cb\3\12\12\0\1\11\1\0\24\12"+ + "\1\11\7\12\2\0\1\115\3\12\1\0\1\12\1\0"+ + "\1\11\1\0\3\12\1\213\4\0\10\12\2\0\5\12"+ + "\12\0\1\11\1\0\24\12"; + + private static int [] zzUnpackTrans() { + int [] result = new int[31154]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\10\0\6\1\1\11\4\1\1\11\5\1\1\11\14\1"+ + "\2\11\2\1\1\11\11\1\1\11\4\1\1\11\5\1"+ + "\1\11\3\1\1\11\3\1\1\11\1\1\1\11\1\1"+ + "\1\11\17\1\1\0\36\1\1\11\3\1\1\11\31\1"+ + "\1\0\21\1\3\0\1\11\4\0\1\11\1\0\2\11"+ + "\4\0\13\1\1\0\7\1\1\11\21\1\1\11\16\1"+ + "\1\11\62\1\14\0\15\1\1\11\10\1\1\11\6\1"+ + "\1\11\36\1\1\0\1\1\2\0\1\1\2\0\1\1"+ + "\1\0\43\1\6\0\60\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[459]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Token type specific to DTokenMaker; this signals that the user is in + * a nestable multi-line comment. The nested depth is embedded in the + * actual end token type. + */ + private static final int INTERNAL_IN_NESTABLE_MLC = -(1<<11); + + /** + * When in a (possibly) nested MLC, this is the current nested depth. + */ + private int nestedMlcDepth; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + private void addNestedMlcEndToken() { + addEndToken(INTERNAL_IN_NESTABLE_MLC - nestedMlcDepth); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_NESTABLE_MLC: + return TokenTypes.COMMENT_MULTILINE; + } + return type; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + nestedMlcDepth = 0; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_BACKQUOTE: + state = WYSIWYG_STRING_2; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = WYSIWYG_STRING_1; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + break; + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_NESTABLE_MLC: + state = NESTABLE_MLC; + break; + } + nestedMlcDepth = -initialTokenType&0xff; + } + else { + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 188) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 14: + { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 46: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 47: break; + case 41: + { addToken(Token.LITERAL_BOOLEAN); + } + case 48: break; + case 25: + { addToken(Token.ERROR_CHAR); + } + case 49: break; + case 22: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 50: break; + case 4: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 51: break; + case 18: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 52: break; + case 11: + { addToken(Token.ANNOTATION); + } + case 53: break; + case 6: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 54: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 55: break; + case 20: + { addToken(Token.LITERAL_BACKQUOTE); + } + case 56: break; + case 33: + { nestedMlcDepth++; + } + case 57: break; + case 37: + { start = zzMarkedPos-3; yybegin(EOL_DOCCOMMENT); + } + case 58: break; + case 43: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 59: break; + case 35: + { addToken(Token.LITERAL_CHAR); + } + case 60: break; + case 24: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 61: break; + case 28: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 62: break; + case 17: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 63: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 64: break; + case 32: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 65: break; + case 39: + { addToken(Token.DATA_TYPE); + } + case 66: break; + case 34: + { System.out.println("... " + nestedMlcDepth); + if (--nestedMlcDepth==0) { + addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(YYINITIAL); + } + } + case 67: break; + case 31: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 68: break; + case 21: + { addToken(Token.LITERAL_BACKQUOTE); yybegin(YYINITIAL); + } + case 69: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 70: break; + case 19: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 71: break; + case 38: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + case 72: break; + case 15: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; + } + case 73: break; + case 30: + { addToken(Token.RESERVED_WORD); + } + case 74: break; + case 42: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 75: break; + case 29: + { start = zzMarkedPos-2; nestedMlcDepth = 1; yybegin(NESTABLE_MLC); + } + case 76: break; + case 45: + { addToken(Token.RESERVED_WORD_2); + } + case 77: break; + case 16: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 78: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 79: break; + case 5: + { addNullToken(); return firstToken; + } + case 80: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 81: break; + case 8: + { addToken(Token.LITERAL_BACKQUOTE); yybegin(WYSIWYG_STRING_2); + } + case 82: break; + case 9: + { addToken(Token.OPERATOR); + } + case 83: break; + case 23: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 84: break; + case 26: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(WYSIWYG_STRING_1); + } + case 85: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 86: break; + case 40: + { addToken(Token.COMMENT_MULTILINE); + } + case 87: break; + case 27: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 88: break; + case 36: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 89: break; + case 12: + { + } + case 90: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case WYSIWYG_STRING_1: { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; + } + case 460: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 461: break; + case NESTABLE_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addNestedMlcEndToken(); return firstToken; + } + case 462: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 463: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 464: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 465: break; + case WYSIWYG_STRING_2: { + if (firstToken==null) { + addToken(Token.LITERAL_BACKQUOTE); + } + return firstToken; + } + case 466: break; + case EOL_DOCCOMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addNullToken(); return firstToken; + } + case 467: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex new file mode 100755 index 000000000..47ceffcb7 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.flex @@ -0,0 +1,660 @@ +/* + * 09/01/2014 + * + * DartTokenMaker.java - Token parser for Dart. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dart files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                + *
              • The generated DartTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • + *
              + * + * @author Robert Futrell + * @version 1.0 + */ +%% + +%public +%class DartTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DartTokenMaker() { + super(); + } + + + static { + jsVersion = "1.0"; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = DART_MULTILINE_STRING_DOUBLE; + break; + case Token.LITERAL_CHAR: + state = DART_MULTILINE_STRING_SINGLE; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + default: + state = YYINITIAL; // ??? + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) + +DART_Annotation = ("@"{Letter}{LetterOrDigit}*) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_EOL_COMMENT +%state DART_MULTILINE_STRING_DOUBLE +%state DART_MULTILINE_STRING_SINGLE + + +%% + + { + + // Keywords + "abstract" | + "assert" | + "class" | + "const" | + "extends" | + "factory" | + "get" | + "implements" | + "import" | + "interface" | + "library" | + "negate" | + "new" | + "null" | + "operator" | + "set" | + "source" | + "static" | + "super" | + "this" | + "typedef" | + "var" | + "final" | + "if" | + "else" | + "for" | + "in" | + "is" | + "while" | + "do" | + "switch" | + "case" | + "default" | + "in" | + "try" | + "catch" | + "finally" | + "break" | + "continue" | + "throw" | + "assert" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Data types + "bool" | + "int" | + "double" | + "num" | + "void" { addToken(Token.DATA_TYPE); } + + // stdlib types + "AssertionError" | + "Clock" | + "Collection" | + "Comparable" | + "Date" | + "Dispatcher" | + "Duration" | + "Expect" | + "FallThroughError" | + "Function" | + "HashMap" | + "HashSet" | + "Hashable" | + "Isolate" | + "Iterable" | + "Iterator" | + "LinkedHashMap" | + "List" | + "Map" | + "Match" | + "Math" | + "Object" | + "Pattern" | + "Promise" | + "Proxy" | + "Queue" | + "ReceivePort" | + "RegExp" | + "SendPort" | + "Set" | + "StopWatch" | + "String" | + "StringBuffer" | + "Strings" | + "TimeZone" | + "TypeError" | + + // stdlib exceptions + "BadNumberFormatException" | + "ClosureArgumentMismatchException" | + "EmptyQueueException" | + "Exception" | + "ExpectException" | + "IllegalAccessException" | + "IllegalArgumentException" | + "IllegalJSRegExpException" | + "IndexOutOfRangeException" | + "IntegerDivisionByZeroException" | + "NoMoreElementsException" | + "NoSuchMethodException" | + "NotImplementedException" | + "NullPointerException" | + "ObjectNotClosureException" | + "OutOfMemoryException" | + "StackOverflowException" | + "UnsupportedOperationException" | + "WrongArgumentCountException" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* Multi-line string literals. */ + \"\"\" { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); } + \'\'\' { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + + {DART_Annotation} { addToken(Token.ANNOTATION); } + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Deprecated stuff */ + "#library" | + "#import" | + "#source" | + "#resource" { addToken(Token.RESERVED_WORD); } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + + { + [^\'\\\n]* {} + \\.? { /* Skip escaped chars, handles case: "\'''". */ } + \'\'\' { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); } + \' {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java new file mode 100755 index 000000000..253f2cb4a --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DartTokenMaker.java @@ -0,0 +1,2176 @@ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 7:25 PM */ + +/* + * 09/01/2014 + * + * DartTokenMaker.java - Token parser for Dart. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dart files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

              + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                + *
              • The generated DartTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
              • + *
              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
              • + *
              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
              • + *
              + * + * @author Robert Futrell + * @version 1.0 + */ + +public class DartTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int JS_STRING = 1; + public static final int JS_CHAR = 2; + public static final int DART_MULTILINE_STRING_DOUBLE = 5; + public static final int JS_EOL_COMMENT = 4; + public static final int YYINITIAL = 0; + public static final int JS_MLC = 3; + public static final int DART_MULTILINE_STRING_SINGLE = 6; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\1\11\22\0\1\1\1\35\1\115"+ + "\1\12\1\15\1\35\1\37\1\44\2\43\1\17\1\30\1\27\1\24"+ + "\1\25\1\16\1\5\7\7\2\4\1\40\1\27\1\31\1\32\1\34"+ + "\1\36\1\42\1\75\1\6\1\76\1\77\1\23\1\22\1\3\1\101"+ + "\1\74\1\113\1\3\1\21\1\102\1\73\1\104\1\106\1\107\1\110"+ + "\1\103\1\100\1\114\1\3\1\111\1\20\1\3\1\112\1\43\1\13"+ + "\1\43\1\33\1\14\1\0\1\56\1\57\1\61\1\65\1\54\1\51"+ + "\1\67\1\45\1\52\1\105\1\72\1\53\1\70\1\63\1\62\1\47"+ + "\1\3\1\60\1\50\1\46\1\10\1\71\1\55\1\64\1\66\1\3"+ + "\1\26\1\41\1\26\1\36\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\2\1\1\2\1\3\1\4\1\5\2\6\1\5"+ + "\2\2\2\7\3\5\1\7\1\5\1\10\1\5\5\7"+ + "\2\2\1\11\37\5\1\12\1\1\1\13\1\14\1\15"+ + "\1\1\1\16\1\17\1\20\1\1\1\21\5\1\1\22"+ + "\3\1\1\23\1\24\1\1\1\25\1\26\1\1\1\2"+ + "\1\27\1\6\1\30\1\27\1\30\1\27\1\31\1\27"+ + "\1\5\4\2\1\32\1\33\5\5\1\0\1\7\1\34"+ + "\1\0\13\5\2\35\21\5\1\35\34\5\1\0\1\36"+ + "\1\37\1\40\1\41\10\0\1\24\1\0\1\26\1\0"+ + "\1\2\1\30\1\0\2\31\1\5\4\2\1\0\7\5"+ + "\1\42\13\5\1\43\17\5\1\43\31\5\1\44\15\5"+ + "\1\45\12\0\1\46\1\47\1\2\1\5\3\2\1\50"+ + "\7\5\1\51\64\5\1\0\1\1\2\0\1\52\2\0"+ + "\1\53\1\2\1\5\3\2\7\5\1\35\50\5\4\0"+ + "\1\2\1\5\3\2\3\5\1\44\6\5\1\54\23\5"+ + "\1\44\3\5\1\44\5\5\1\35\1\2\224\5"; + + private static int [] zzUnpackAction() { + int [] result = new int[616]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\116\0\234\0\352\0\u0138\0\u0186\0\u01d4\0\u0222"+ + "\0\u0270\0\u02be\0\u030c\0\u035a\0\u03a8\0\u03f6\0\u02be\0\u0444"+ + "\0\u0492\0\u04e0\0\u052e\0\u057c\0\u05ca\0\u0618\0\u0666\0\u02be"+ + "\0\u02be\0\u06b4\0\u0702\0\u0750\0\u02be\0\u079e\0\u07ec\0\u083a"+ + "\0\u0888\0\u08d6\0\u0924\0\u0972\0\u09c0\0\u0a0e\0\u0a5c\0\u0aaa"+ + "\0\u0af8\0\u0b46\0\u0b94\0\u0be2\0\u0c30\0\u0c7e\0\u0ccc\0\u0d1a"+ + "\0\u0d68\0\u0db6\0\u0e04\0\u0e52\0\u0ea0\0\u0eee\0\u0f3c\0\u0f8a"+ + "\0\u0fd8\0\u1026\0\u1074\0\u10c2\0\u1110\0\u115e\0\u11ac\0\u11fa"+ + "\0\u1248\0\u1296\0\u02be\0\u12e4\0\u02be\0\u1332\0\u02be\0\u12e4"+ + "\0\u02be\0\u1380\0\u02be\0\u13ce\0\u141c\0\u146a\0\u14b8\0\u1506"+ + "\0\u02be\0\u1554\0\u15a2\0\u15f0\0\u02be\0\u163e\0\u168c\0\u02be"+ + "\0\u16da\0\u1728\0\u1776\0\u17c4\0\u17c4\0\u17c4\0\u1812\0\u1860"+ + "\0\u18ae\0\u18fc\0\u194a\0\u1998\0\u19e6\0\u1a34\0\u1a82\0\u1ad0"+ + "\0\u02be\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56\0\u1ca4\0\u04e0"+ + "\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14"+ + "\0\u1f62\0\u1fb0\0\u1ffe\0\u204c\0\u209a\0\u20e8\0\u030c\0\u2136"+ + "\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u230a\0\u2358\0\u23a6"+ + "\0\u23f4\0\u2442\0\u2490\0\u24de\0\u252c\0\u257a\0\u25c8\0\u2616"+ + "\0\u2664\0\u26b2\0\u2700\0\u274e\0\u279c\0\u27ea\0\u2838\0\u2886"+ + "\0\u28d4\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a\0\u2aa8\0\u2af6"+ + "\0\u2b44\0\u2b92\0\u2be0\0\u2c2e\0\u2c7c\0\u2cca\0\u2d18\0\u2d66"+ + "\0\u2db4\0\u2e02\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a\0\u2f88\0\u02be"+ + "\0\u2fd6\0\u3024\0\u02be\0\u3072\0\u30c0\0\u310e\0\u315c\0\u31aa"+ + "\0\u31f8\0\u3246\0\u3294\0\u02be\0\u32e2\0\u02be\0\u3330\0\u337e"+ + "\0\u33cc\0\u341a\0\u17c4\0\u3468\0\u34b6\0\u3504\0\u3552\0\u35a0"+ + "\0\u35ee\0\u363c\0\u368a\0\u36d8\0\u3726\0\u3774\0\u37c2\0\u3810"+ + "\0\u385e\0\u02be\0\u38ac\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32"+ + "\0\u3a80\0\u3ace\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u3c54\0\u3ca2"+ + "\0\u3cf0\0\u3d3e\0\u3d8c\0\u3dda\0\u3e28\0\u3e76\0\u3ec4\0\u3f12"+ + "\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098\0\u030c\0\u40e6\0\u4134"+ + "\0\u4182\0\u41d0\0\u421e\0\u426c\0\u42ba\0\u4308\0\u4356\0\u43a4"+ + "\0\u43f2\0\u4440\0\u448e\0\u44dc\0\u452a\0\u4578\0\u45c6\0\u4614"+ + "\0\u4662\0\u46b0\0\u46fe\0\u474c\0\u479a\0\u47e8\0\u4836\0\u030c"+ + "\0\u4884\0\u48d2\0\u4920\0\u496e\0\u49bc\0\u4a0a\0\u4a58\0\u4aa6"+ + "\0\u4af4\0\u4b42\0\u4b90\0\u4bde\0\u4c2c\0\u02be\0\u4c7a\0\u4cc8"+ + "\0\u4d16\0\u4d64\0\u4db2\0\u4e00\0\u4e4e\0\u4e9c\0\u4eea\0\u4f38"+ + "\0\u02be\0\u02be\0\u4f86\0\u4fd4\0\u5022\0\u5070\0\u50be\0\u02be"+ + "\0\u510c\0\u515a\0\u51a8\0\u51f6\0\u5244\0\u5292\0\u52e0\0\u030c"+ + "\0\u532e\0\u537c\0\u53ca\0\u5418\0\u5466\0\u54b4\0\u5502\0\u5550"+ + "\0\u559e\0\u55ec\0\u563a\0\u5688\0\u56d6\0\u5724\0\u5772\0\u57c0"+ + "\0\u580e\0\u585c\0\u58aa\0\u58f8\0\u5946\0\u5994\0\u59e2\0\u5a30"+ + "\0\u5a7e\0\u5acc\0\u5b1a\0\u5b68\0\u5bb6\0\u5c04\0\u5c52\0\u5ca0"+ + "\0\u5cee\0\u5d3c\0\u5d8a\0\u5dd8\0\u5e26\0\u5e74\0\u5ec2\0\u5f10"+ + "\0\u5f5e\0\u5fac\0\u5ffa\0\u6048\0\u6096\0\u60e4\0\u6132\0\u6180"+ + "\0\u61ce\0\u621c\0\u626a\0\u62b8\0\u3024\0\u02be\0\u6306\0\u6354"+ + "\0\u63a2\0\u63f0\0\u643e\0\u648c\0\u64da\0\u6528\0\u6576\0\u65c4"+ + "\0\u6612\0\u6660\0\u66ae\0\u66fc\0\u674a\0\u6798\0\u67e6\0\u6834"+ + "\0\u6882\0\u68d0\0\u691e\0\u696c\0\u69ba\0\u6a08\0\u6a56\0\u6aa4"+ + "\0\u6af2\0\u6b40\0\u6b8e\0\u6bdc\0\u6c2a\0\u6c78\0\u6cc6\0\u6d14"+ + "\0\u6d62\0\u6db0\0\u6dfe\0\u6e4c\0\u6e9a\0\u6ee8\0\u6f36\0\u6f84"+ + "\0\u6fd2\0\u7020\0\u706e\0\u70bc\0\u710a\0\u7158\0\u71a6\0\u71f4"+ + "\0\u7242\0\u7290\0\u72de\0\u732c\0\u737a\0\u73c8\0\u7416\0\u7464"+ + "\0\u74b2\0\u7500\0\u63a2\0\u754e\0\u648c\0\u759c\0\u75ea\0\u7638"+ + "\0\u7686\0\u76d4\0\u7722\0\u7770\0\u77be\0\u780c\0\u785a\0\u78a8"+ + "\0\u78f6\0\u7944\0\u7992\0\u79e0\0\u030c\0\u7a2e\0\u7a7c\0\u7aca"+ + "\0\u7b18\0\u7b66\0\u7bb4\0\u7c02\0\u7c50\0\u7c9e\0\u7cec\0\u7d3a"+ + "\0\u7d88\0\u7dd6\0\u7e24\0\u7e72\0\u7ec0\0\u7f0e\0\u7f5c\0\u7faa"+ + "\0\u7ff8\0\u8046\0\u8094\0\u80e2\0\u8130\0\u817e\0\u81cc\0\u821a"+ + "\0\u8268\0\u82b6\0\u0222\0\u8304\0\u8352\0\u83a0\0\u83ee\0\u843c"+ + "\0\u848a\0\u84d8\0\u8526\0\u8574\0\u85c2\0\u8610\0\u865e\0\u86ac"+ + "\0\u86fa\0\u8748\0\u8796\0\u87e4\0\u8832\0\u8880\0\u88ce\0\u891c"+ + "\0\u896a\0\u89b8\0\u8a06\0\u8a54\0\u8aa2\0\u8af0\0\u8b3e\0\u8b8c"+ + "\0\u8bda\0\u8c28\0\u8c76\0\u8cc4\0\u8d12\0\u8d60\0\u8dae\0\u8dfc"+ + "\0\u8e4a\0\u8e98\0\u8ee6\0\u8f34\0\u8f82\0\u8fd0\0\u901e\0\u906c"+ + "\0\u90ba\0\u9108\0\u9156\0\u91a4\0\u91f2\0\u9240\0\u928e\0\u92dc"+ + "\0\u932a\0\u9378\0\u93c6\0\u9414\0\u9462\0\u94b0\0\u94fe\0\u954c"+ + "\0\u959a\0\u95e8\0\u9636\0\u9684\0\u96d2\0\u9720\0\u976e\0\u97bc"+ + "\0\u980a\0\u780c\0\u9858\0\u98a6\0\u98f4\0\u9942\0\u9990\0\u99de"+ + "\0\u9a2c\0\u9a7a\0\u9ac8\0\u9b16\0\u9b64\0\u9bb2\0\u9c00\0\u9c4e"+ + "\0\u9c9c\0\u9cea\0\u9d38\0\u9d86\0\u9dd4\0\u9e22\0\u9e70\0\u9ebe"+ + "\0\u9f0c\0\u9f5a\0\u9fa8\0\u9ff6\0\ua044\0\ua092\0\ua0e0\0\ua12e"+ + "\0\ua17c\0\ua1ca\0\ua218\0\ua266\0\ua2b4\0\ua302\0\ua350\0\ua39e"+ + "\0\ua3ec\0\ua43a\0\ua488\0\ua4d6\0\ua524\0\ua572\0\ua5c0\0\ua60e"+ + "\0\ua65c\0\ua6aa\0\ua6f8\0\ua746\0\ua794\0\ua7e2\0\ua830\0\ua87e"+ + "\0\ua8cc\0\ua91a\0\ua968\0\ua9b6\0\uaa04\0\uaa52\0\uaaa0\0\uaaee"+ + "\0\uab3c\0\uab8a\0\uabd8\0\uac26\0\uac74\0\uacc2\0\uad10\0\uad5e"+ + "\0\uadac\0\uadfa\0\uae48\0\uae96\0\uaee4\0\uaf32\0\uaf80\0\uafce"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[616]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\14"+ + "\1\13\1\17\1\20\1\10\2\13\1\21\1\22\1\13"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\2\22\1\34\1\22\1\35\1\36\1\35\1\37"+ + "\1\40\1\30\1\41\1\13\1\42\1\13\1\43\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\13\1\57\1\13\1\60\1\13\1\61"+ + "\1\13\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ + "\1\71\1\72\1\73\1\13\1\74\1\75\1\76\1\77"+ + "\2\13\1\100\1\101\2\102\1\103\10\102\1\104\101\102"+ + "\1\105\2\106\1\107\10\106\1\110\30\106\1\111\51\106"+ + "\2\112\1\113\14\112\1\114\25\112\1\115\3\112\1\116"+ + "\3\112\1\117\40\112\2\120\1\121\42\120\1\122\3\120"+ + "\1\123\3\120\1\124\40\120\2\102\1\125\10\102\1\126"+ + "\101\102\1\127\2\106\1\130\10\106\1\131\30\106\1\132"+ + "\51\106\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\50\10\2\0\1\11\232\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\134\2\0\1\134"+ + "\2\14\1\134\1\14\1\134\1\0\4\134\2\0\1\134"+ + "\1\135\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ + "\4\134\1\136\1\134\1\135\1\137\10\134\1\136\11\134"+ + "\1\136\15\134\1\0\1\134\2\0\1\134\1\141\1\142"+ + "\1\134\1\142\1\134\1\0\4\134\2\0\1\143\1\135"+ + "\1\136\1\137\1\0\1\140\14\0\1\134\2\0\4\134"+ + "\1\136\1\134\1\135\1\137\7\134\1\143\1\136\11\134"+ + "\1\136\15\134\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ + "\1\144\36\13\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\3\10\1\145\1\10"+ + "\1\146\1\147\4\10\1\150\34\10\17\0\1\151\1\152"+ + "\12\0\1\35\115\0\1\35\63\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\5\13\1\153\42\13\1\0\1\10\2\0\5\13"+ + "\1\154\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\155\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\17\13\1\156\3\13\1\157\24\13\25\0"+ + "\1\35\5\0\1\35\67\0\2\140\1\0\1\140\136\0"+ + "\1\35\1\0\1\35\114\0\1\160\1\35\115\0\1\35"+ + "\1\0\1\161\113\0\1\35\4\0\1\35\110\0\1\35"+ + "\6\0\1\35\54\0\1\10\2\0\1\162\2\10\1\162"+ + "\1\10\1\162\1\0\4\10\2\0\4\162\16\0\1\10"+ + "\2\0\50\162\45\0\1\163\51\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\164\12\13\1\165\5\13\1\166\26\13\1\0"+ + "\1\10\2\0\5\13\1\167\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\170\5\13"+ + "\1\171\1\172\4\13\1\173\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\174\3\13\1\175\3\13\1\176"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\2\177"+ + "\11\13\1\200\4\13\1\201\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\202\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\203\10\13\1\204\30\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\205\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\3\13\1\206\6\13\1\207\35\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\210\1\13"+ + "\1\211\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\212\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\213\2\13\1\214\3\13\1\215\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\216\45\13\1\0\1\10"+ + "\2\0\5\13\1\217\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\220\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\221\5\13\1\222"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\171"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\176"+ + "\3\13\1\223\32\13\1\0\1\10\2\0\5\13\1\224"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\225\3\13\1\226\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\13\1\227\1\13\1\230\2\13"+ + "\1\231\7\13\1\232\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\3\13\1\233\44\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\234\6\13\1\235\32\13\1\0\1\10"+ + "\2\0\5\13\1\236\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\237\3\13\1\240"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\241"+ + "\13\13\1\242\26\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\243\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\244\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\245\5\13\1\246\40\13\1\0\1\10\2\0"+ + "\5\13\1\247\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\12\13\1\250\35\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\251\1\13\1\252\34\13"+ + "\1\0\1\10\2\0\5\13\1\253\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\254\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\255\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\256\31\13\116\0"+ + "\1\257\2\102\1\0\10\102\1\0\101\102\1\0\2\260"+ + "\1\0\5\260\1\261\53\260\1\262\31\260\2\106\1\0"+ + "\10\106\1\0\30\106\1\0\51\106\2\112\1\0\14\112"+ + "\1\0\25\112\1\0\3\112\1\0\3\112\1\0\40\112"+ + "\16\0\1\263\145\0\1\264\115\0\1\265\3\0\1\266"+ + "\120\0\1\267\40\0\2\120\1\0\42\120\1\0\3\120"+ + "\1\0\3\120\1\0\40\120\46\0\1\270\115\0\1\271"+ + "\3\0\1\272\120\0\1\273\40\0\2\274\1\0\113\274"+ + "\115\0\1\275\2\276\1\0\113\276\44\0\1\277\51\0"+ + "\1\10\2\0\5\10\1\300\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\50\10\1\0\1\134\2\0\6\134"+ + "\1\0\4\134\2\0\4\134\16\0\1\134\2\0\50\134"+ + "\1\0\1\134\2\0\1\134\2\301\1\134\1\301\1\134"+ + "\1\0\4\134\2\0\4\134\1\302\3\0\1\302\11\0"+ + "\1\134\2\0\50\134\1\0\1\134\2\0\1\134\2\140"+ + "\1\134\1\140\1\134\1\0\4\134\2\0\2\134\1\136"+ + "\1\137\16\0\1\134\2\0\4\134\1\136\2\134\1\137"+ + "\10\134\1\136\11\134\1\136\15\134\1\0\1\134\2\0"+ + "\1\134\2\141\1\134\1\141\1\134\1\0\4\134\2\0"+ + "\2\134\1\136\1\137\1\0\1\140\14\0\1\134\2\0"+ + "\4\134\1\136\2\134\1\137\10\134\1\136\11\134\1\136"+ + "\15\134\1\0\1\134\2\0\1\134\1\141\1\142\1\134"+ + "\1\142\1\134\1\0\4\134\2\0\1\134\1\303\1\136"+ + "\1\137\1\0\1\140\14\0\1\134\2\0\4\134\1\136"+ + "\1\134\1\303\1\137\10\134\1\136\11\134\1\136\15\134"+ + "\1\0\1\134\2\0\1\134\4\304\1\134\1\0\4\134"+ + "\2\0\2\134\2\304\16\0\1\134\2\0\4\134\1\304"+ + "\2\134\1\304\1\134\2\304\1\134\1\304\3\134\1\304"+ + "\7\134\3\304\15\134\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\20\13\1\305\27\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\15\10\1\306"+ + "\32\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\23\10\1\307\24\10\1\0"+ + "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ + "\1\10\2\0\5\10\1\310\42\10\1\0\1\10\2\0"+ + "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ + "\7\10\1\311\40\10\20\0\1\312\76\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\313\12\13\1\314\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\315\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\6\13\1\316\41\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\2\13\1\317\11\13\1\320"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\321"+ + "\45\13\33\0\1\35\1\0\1\22\61\0\1\10\2\0"+ + "\6\162\1\0\4\10\2\0\4\162\16\0\1\10\2\0"+ + "\50\162\45\0\1\322\51\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\323\5\13\1\324\34\13\1\0\1\10\2\0"+ + "\5\13\1\325\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\21\13\1\177\26\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\326\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\327\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\330\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\13\1\177\46\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\331\42\13\1\0\1\10"+ + "\2\0\5\13\1\332\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\16\13\1\333\31\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\334\5\13\1\335\33\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\177\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\336\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\2\13\1\337\45\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\12\13\1\340\35\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\341\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\342\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\343\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\344\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\345\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\346\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\347\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\350\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\351\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\352\1\13\1\341"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\353"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\354"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\355"+ + "\14\13\1\356\24\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\10\13\1\177\11\13\1\357\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\360\43\13\1\0\1\10\2\0"+ + "\5\13\1\361\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\5\13\1\362\42\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\363\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\26\13\1\177\21\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\364\33\13\1\365\1\366\11\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\367\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\370\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\6\13\1\371\41\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\372\2\13\1\373"+ + "\13\13\1\374\27\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\375\44\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\376\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\377\14\13\1\u0100\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u0101\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0102\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u0103\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\23\13\1\u0104\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0105\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0106\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u0107\1\u0108\45\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\u0109\1\13\1\u010a\1\13"+ + "\1\u010b\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u0108\14\13\1\u010c\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u010d\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\40\13\1\u010e\7\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u010f\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u0110\32\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u0111\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\u0112\5\13\1\u0113\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\15\13\1\u0114\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\3\13\1\u0115\44\13\116\0\1\u0116"+ + "\4\0\4\u0117\12\0\2\u0117\25\0\1\u0117\2\0\1\u0117"+ + "\1\0\2\u0117\1\0\1\u0117\3\0\1\u0117\7\0\3\u0117"+ + "\22\0\4\u0118\12\0\2\u0118\25\0\1\u0118\2\0\1\u0118"+ + "\1\0\2\u0118\1\0\1\u0118\3\0\1\u0118\7\0\3\u0118"+ + "\64\0\1\u0119\116\0\1\u011a\121\0\1\u011b\117\0\1\u011c"+ + "\106\0\1\u011d\116\0\1\u011e\121\0\1\u011f\117\0\1\u0120"+ + "\155\0\1\u0121\44\0\1\u0122\51\0\1\10\2\0\1\10"+ + "\4\u0123\1\10\1\0\4\10\2\0\2\10\2\u0123\16\0"+ + "\1\10\2\0\4\10\1\u0123\2\10\1\u0123\1\10\2\u0123"+ + "\1\10\1\u0123\3\10\1\u0123\7\10\3\u0123\15\10\1\0"+ + "\1\134\2\0\1\134\2\301\1\134\1\301\1\134\1\0"+ + "\4\134\2\0\2\134\1\136\1\134\16\0\1\134\2\0"+ + "\4\134\1\136\13\134\1\136\11\134\1\136\15\134\5\0"+ + "\2\301\1\0\1\301\106\0\1\134\2\0\1\134\4\304"+ + "\1\134\1\0\4\134\2\0\1\134\1\303\2\304\16\0"+ + "\1\134\2\0\4\134\1\304\1\134\1\303\1\304\1\134"+ + "\2\304\1\134\1\304\3\134\1\304\7\134\3\304\15\134"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\26\13\1\u0124\21\13"+ + "\1\0\1\10\2\0\5\10\1\u0125\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\50\10\1\0\1\10\2\0"+ + "\6\10\1\0\4\10\2\0\4\10\16\0\1\10\2\0"+ + "\2\10\1\u0126\45\10\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\12\10\1\u0127"+ + "\35\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\3\10\1\145\44\10\17\0"+ + "\1\u0128\77\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0108"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\25\13\1\u0129"+ + "\22\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u012a"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u012b"+ + "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012c"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u012d"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u012e"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\177"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u012f"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0130"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0131"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\176"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0132"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\352"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0133"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0134"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\325"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u0135"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u0136"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u0137"+ + "\6\13\1\u0138\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u0139\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\177\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u013a\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\341\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u0138\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u013b\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\11\13\1\u013c\36\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\356\41\13\1\0\1\10\2\0\5\13\1\u013d"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\323\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\14\13"+ + "\1\u013e\33\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u013f\1\13\1\171\44\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u0140\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\177\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0141\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0142\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\12\13\1\u0143\35\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\20\13\1\356\27\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\u0144\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\27\13\1\u0145\20\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u0146\32\13\1\0\1\10\2\0\5\13"+ + "\1\u0147\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u0148\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\u0149\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014a\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014b\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u014c\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014d\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u014e\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\u014f\10\13\1\u0150\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\6\13\1\u0151\41\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0152\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u012a\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0153\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0108\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0154\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0155\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u0156\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\u0108\13\13\1\u0157\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\14\13\1\u0158\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u0159\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u015a\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\20\13\1\u015b\27\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u015c\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u015d\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u015e\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\17\13\1\u015f\3\13\1\u0160\24\13\1\0"+ + "\1\10\2\0\5\13\1\u0103\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u0161\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ + "\1\u0162\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\16\13\1\u0163\31\13\1\0\1\10\2\0"+ + "\5\13\1\u0164\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\5\0\4\u0165\12\0\2\u0165"+ + "\25\0\1\u0165\2\0\1\u0165\1\0\2\u0165\1\0\1\u0165"+ + "\3\0\1\u0165\7\0\3\u0165\22\0\4\u0166\12\0\2\u0166"+ + "\25\0\1\u0166\2\0\1\u0166\1\0\2\u0166\1\0\1\u0166"+ + "\3\0\1\u0166\7\0\3\u0166\65\0\1\u0167\106\0\1\u0168"+ + "\131\0\1\u011a\66\0\1\u0169\137\0\1\u016a\106\0\1\u016b"+ + "\131\0\1\u011e\66\0\1\u016c\70\0\1\10\2\0\1\10"+ + "\4\u016d\1\10\1\0\4\10\2\0\2\10\2\u016d\16\0"+ + "\1\10\2\0\4\10\1\u016d\2\10\1\u016d\1\10\2\u016d"+ + "\1\10\1\u016d\3\10\1\u016d\7\10\3\u016d\15\10\1\0"+ + "\1\10\2\0\5\13\1\u016e\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\10\1\0\4\10\2\0\4\10\16\0\1\10"+ + "\2\0\13\10\1\u016f\34\10\1\0\1\10\2\0\6\10"+ + "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\15\10"+ + "\1\u0170\32\10\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\13\10\1\u0171\34\10"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0172\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0173\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\33\13\1\u0174\14\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\u0175\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\2\13\1\u012a\45\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\21\13\1\u0176\26\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\10\13\1\177\37\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\20\13\1\u0177\27\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\5\13\1\u0178\42\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\341\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\6\13\1\u0179\41\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u017a\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017b\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u017c\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\171\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\11\13\1\u017a\36\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u017d\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017e\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\25\13\1\177\22\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u017f\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\177\47\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u0180\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u0181\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\341\46\13\1\0"+ + "\1\10\2\0\5\13\1\u0182\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\50\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\6\13\1\u0183\41\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\41\13\1\u0184\6\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\23\13\1\u0185\24\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u0186\34\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\14\13\1\u0187\33\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\u0188\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\11\13\1\240\36\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u0189\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u018a\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\16\13\1\u018b\31\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\17\13\1\u018c\30\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u018d\34\13\1\0\1\10"+ + "\2\0\5\13\1\u018e\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\25\13\1\u0108\22\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\315\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u018f\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u0190\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\45\13\1\u0191\2\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\3\13\1\u0192"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0193\23\13\1\u0194\1\u0195\11\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u0108\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\25\13\1\u0196\22\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\16\13\1\u0197\31\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\44\13\1\u0198\3\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\41\13\1\u0199\6\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\4\13\1\u019a\43\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\14\13\1\u019b\33\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u019c\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\21\13\1\u0108\26\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\u019d\42\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\5\13\1\u019e\42\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\17\13\1\u019f\30\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u01a0\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\2\13\1\u01a1\45\13\41\0\1\u0168"+ + "\7\0\1\u011a\63\0\1\u01a2\102\0\6\u0169\1\0\1\u01a3"+ + "\1\0\1\u01a3\2\u0169\1\u01a3\4\u0169\2\u01a3\1\0\2\u01a3"+ + "\1\0\1\u01a3\2\0\4\u01a3\1\0\3\u01a3\50\u0169\41\0"+ + "\1\u016b\7\0\1\u011e\63\0\1\u01a4\102\0\6\u016c\1\0"+ + "\1\u01a5\1\0\1\u01a5\2\u016c\1\u01a5\4\u016c\2\u01a5\1\0"+ + "\2\u01a5\1\0\1\u01a5\2\0\4\u01a5\1\0\3\u01a5\50\u016c"+ + "\1\0\1\10\2\0\1\10\4\u01a6\1\10\1\0\4\10"+ + "\2\0\2\10\2\u01a6\16\0\1\10\2\0\4\10\1\u01a6"+ + "\2\10\1\u01a6\1\10\2\u01a6\1\10\1\u01a6\3\10\1\u01a6"+ + "\7\10\3\u01a6\15\10\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\23\13\1\u01a7\24\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\14\10\1\u01a8"+ + "\33\10\1\0\1\10\2\0\6\10\1\0\4\10\2\0"+ + "\4\10\16\0\1\10\2\0\13\10\1\u01a9\34\10\1\0"+ + "\1\10\2\0\6\10\1\0\4\10\2\0\4\10\16\0"+ + "\1\10\2\0\11\10\1\u01aa\36\10\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\20\13\1\u01ab\27\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u01ac\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u01ad\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u01ae\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\42\13\1\u01af\5\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01b0\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\177\33\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\u01b1\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u01b1\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\4\13\1\u01b2\43\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\23\13\1\u01b3\24\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\20\13\1\323\27\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u01b4\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u01b5\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u01b6\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\13\1\u01b7\46\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\6\13\1\171\41\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\356\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u01b8\32\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\2\13\1\u01b9\45\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01ba\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\1\u01bb\47\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01bc\10\13\1\u01bd\35\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u01be\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u01bf\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\5\13\1\u01c0\42\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u01c1\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01c2\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c3\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c4\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01c5\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u01c6\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01c7\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\12\13\1\u01bd\35\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u019f\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\313\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\37\13\1\u01c8\10\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u01c9\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\11\13\1\u01ca\36\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u01cb\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\35\13\1\u01cc\12\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\13\1\u01cd\46\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u01ce\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\3\13\1\u0103\44\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\24\13\1\u01cf\23\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u0108\45\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\30\13\1\u01d0\17\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\2\13\1\u01d1\45\13\17\0\1\u0169\115\0"+ + "\1\u016c\77\0\1\10\2\0\1\10\4\13\1\10\1\0"+ + "\4\10\2\0\2\10\2\13\16\0\1\10\2\0\4\10"+ + "\1\13\2\10\1\13\1\10\2\13\1\10\1\13\3\10"+ + "\1\13\7\10\3\13\15\10\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\12\13\1\u01d2\35\13\1\0\1\10\2\0\6\10"+ + "\1\0\4\10\2\0\4\10\16\0\1\10\2\0\7\10"+ + "\1\u01d3\40\10\1\0\1\10\2\0\6\10\1\0\4\10"+ + "\2\0\4\10\16\0\1\10\2\0\1\10\1\u01d3\46\10"+ + "\1\0\1\10\2\0\6\10\1\0\4\10\2\0\4\10"+ + "\16\0\1\10\2\0\13\10\1\u01d4\34\10\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\34\13\1\u01d5\13\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\15\13\1\u01ce\32\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\13\13\1\u01d6\34\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\3\13"+ + "\1\u01d7\16\0\1\10\2\0\50\13\1\0\1\10\2\0"+ + "\5\13\1\u01d8\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\50\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\4\13\1\177\43\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\21\13\1\177\26\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\11\13\1\u0133\36\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u01d9\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\14\13\1\171\33\13\1\0\1\10\2\0\5\13"+ + "\1\341\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\176\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u01da\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\6\13\1\u01db\41\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\3\13\1\u01dc\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\35\13"+ + "\1\u01dd\12\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u01de\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0103\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u01df\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ + "\1\u01e0\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u01b1\46\13\1\0\1\10\2\0\5\13\1\u01e1\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u01e2"+ + "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01e3"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u0193"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u01e4"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0103"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u01bc"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\24\13\1\u01e5"+ + "\23\13\1\0\1\10\2\0\3\13\1\u01e6\2\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\3\13\1\u0108\44\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01e7\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\313\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u01e8\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\26\13\1\u01e9\21\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\16\13\1\u0108\31\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u015b\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\13\13\1\u01ea\34\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\u01eb\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u01ec\40\13\1\0\1\10\2\0\6\10\1\0"+ + "\4\10\2\0\4\10\16\0\1\10\2\0\21\10\1\u01d3"+ + "\26\10\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u01ed"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u01ee"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u01ef"+ + "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f0"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f1"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u01f2"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f3"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\6\13\1\u01f4"+ + "\41\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u01f5"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0108"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\30\13\1\u01f6"+ + "\15\13\1\u01f7\1\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\32\13\1\u01f8\15\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\13\1\u01f9\46\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\15\13\1\u01fa\32\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\30\13\1\u01fb\17\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\1\u01fc\47\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u01fd\40\13\1\0\1\10\2\0\5\13\1\u01fe\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\14\13\1\u0157"+ + "\33\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\23\13\1\u01ff"+ + "\24\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0200"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0201"+ + "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0202"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\13\13\1\u0203"+ + "\34\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u0204"+ + "\44\13\1\0\1\10\2\0\5\13\1\u0205\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\14\13\1\320\33\13"+ + "\1\0\1\10\2\0\5\13\1\u0206\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\323\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0207\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\23\13\1\u0208\24\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\u0209\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u020a\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\u020b\1\u020c\33\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\36\13\1\u020d\11\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\5\13\1\u020e\42\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\37\13\1\u020f\10\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0155\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0210\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u01de\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0211\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\4\13\1\u0212\43\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0213\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0214\46\13"+ + "\1\0\1\10\2\0\5\13\1\u0215\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0216\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\2\13\1\u0217\1\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u0218\47\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\22\13\1\u0219\25\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021a\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021b\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\7\13\1\u021c\40\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\23\13\1\u021d\24\13\1\0\1\10"+ + "\2\0\6\13\1\0\1\10\1\133\2\13\2\0\4\13"+ + "\16\0\1\10\2\0\1\u021e\47\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u021f\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\14\13\1\u0220\33\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\43\13\1\u0221\4\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\24\13\1\u0222\23\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u0223\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\22\13\1\u0224\25\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u0225\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\4\13\1\u01fc\43\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\13\13\1\u0226\34\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\31\13\1\u0227\16\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\23\13\1\u0228\24\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\7\13\1\u0229\40\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\15\13\1\u022a\32\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\35\13\1\u0194\12\13\1\0\1\10\2\0"+ + "\6\13\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\1\u0155\47\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\13\13\1\u021a\34\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\16\13\1\u022b\31\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\7\13\1\u022c\40\13\1\0\1\10\2\0\6\13"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\15\13\1\u022d\32\13\1\0\1\10\2\0\5\13"+ + "\1\u022e\1\0\1\10\1\133\2\13\2\0\4\13\16\0"+ + "\1\10\2\0\50\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u022f\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\7\13\1\u0230\40\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\5\13\1\u0231\42\13\1\0\1\10\2\0\6\13\1\0"+ + "\1\10\1\133\2\13\2\0\4\13\16\0\1\10\2\0"+ + "\43\13\1\u0232\4\13\1\0\1\10\2\0\5\13\1\u0233"+ + "\1\0\1\10\1\133\2\13\2\0\4\13\16\0\1\10"+ + "\2\0\50\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0234\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\21\13"+ + "\1\u021a\26\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\6\13"+ + "\1\u0235\41\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u0236\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ + "\1\u0237\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\13\13"+ + "\1\u0238\34\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u0239\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ + "\1\u023a\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\20\13"+ + "\1\u021a\27\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u023b\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u023c\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\22\13"+ + "\1\u023d\25\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u023e\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\11\13"+ + "\1\u023f\36\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u0240\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u0241\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\15\13"+ + "\1\u0242\32\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\16\13"+ + "\1\u0243\31\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\37\13"+ + "\1\u0244\10\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\23\13"+ + "\1\u0245\24\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u022d\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\1\13"+ + "\1\u023c\46\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\7\13"+ + "\1\u0246\40\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\3\13"+ + "\1\u021a\44\13\1\0\1\10\2\0\6\13\1\0\1\10"+ + "\1\133\2\13\2\0\3\13\1\u0247\16\0\1\10\2\0"+ + "\50\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\5\13\1\u0248"+ + "\42\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0249"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\7\13\1\u024a"+ + "\40\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\10\13\1\u021a"+ + "\37\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\3\13\1\u024b"+ + "\44\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\1\13\1\u024c"+ + "\46\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\2\13\1\u024d"+ + "\45\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\11\13\1\u024e"+ + "\36\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u024e"+ + "\31\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\17\13\1\u024f"+ + "\30\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\15\13\1\u0250"+ + "\32\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\22\13\1\u0206"+ + "\25\13\1\0\1\10\2\0\6\13\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\16\13\1\u0251"+ + "\31\13\1\0\1\10\2\0\5\13\1\u0252\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\31\13\1\u0253\16\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\7\13\1\u0254\40\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u021a\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\2\13\1\u021a\45\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\16\13\1\u0255\31\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\1\13\1\u0256\46\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0206\34\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\15\13\1\u0257\32\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\13\13\1\u0258\34\13"+ + "\1\0\1\10\2\0\3\13\1\u0259\2\13\1\0\1\10"+ + "\1\133\2\13\2\0\4\13\16\0\1\10\2\0\50\13"+ + "\1\0\1\10\2\0\6\13\1\0\1\10\1\133\2\13"+ + "\2\0\4\13\16\0\1\10\2\0\35\13\1\u025a\12\13"+ + "\1\0\1\10\2\0\5\13\1\u0246\1\0\1\10\1\133"+ + "\2\13\2\0\4\13\16\0\1\10\2\0\50\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u025b\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\21\13\1\u025c\26\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u025d\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u025e\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\45\13\1\u025f\2\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\3\13\1\u0260\44\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\5\13\1\u0261\42\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\7\13\1\u0262\40\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\23\13\1\u0263\24\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\u0264\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\13\13\1\u0265\34\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\11\13\1\u0266\36\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\16\13\1\u021a\31\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\15\13\1\u021a\32\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\13\1\u0267\46\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\14\13\1\u0268\33\13\1\0"+ + "\1\10\2\0\6\13\1\0\1\10\1\133\2\13\2\0"+ + "\4\13\16\0\1\10\2\0\1\u021a\47\13\1\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[45084]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\4\1\1\11\4\1\1\11\10\1\2\11\3\1"+ + "\1\11\45\1\1\11\1\1\1\11\1\1\1\11\1\1"+ + "\1\11\1\1\1\11\5\1\1\11\3\1\1\11\2\1"+ + "\1\11\20\1\1\11\6\1\1\0\2\1\1\0\73\1"+ + "\1\0\1\11\2\1\1\11\10\0\1\11\1\0\1\11"+ + "\1\0\2\1\1\0\7\1\1\0\7\1\1\11\103\1"+ + "\1\11\12\0\2\11\5\1\1\11\74\1\1\0\1\11"+ + "\2\0\1\1\2\0\66\1\4\0\303\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[616]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DartTokenMaker() { + super(); + } + + + static { + jsVersion = "1.0"; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes "standard" token type} for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = DART_MULTILINE_STRING_DOUBLE; + break; + case Token.LITERAL_CHAR: + state = DART_MULTILINE_STRING_SINGLE; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + default: + state = YYINITIAL; // ??? + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DartTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DartTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 11: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 45: break; + case 5: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 41: + { addToken(Token.LITERAL_BOOLEAN); + } + case 47: break; + case 39: + { addToken(start,zzStartRead+2, Token.LITERAL_CHAR); yybegin(YYINITIAL); + } + case 48: break; + case 30: + { /* Skip all escaped chars. */ + } + case 49: break; + case 32: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 50: break; + case 38: + { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 51: break; + case 23: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 52: break; + case 17: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 53: break; + case 36: + { addToken(Token.FUNCTION); + } + case 54: break; + case 28: + { addToken(Token.ANNOTATION); + } + case 55: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 56: break; + case 27: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 57: break; + case 13: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); + } + case 58: break; + case 37: + { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_DOUBLE); + } + case 59: break; + case 16: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); + } + case 60: break; + case 14: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 61: break; + case 26: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 62: break; + case 20: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 63: break; + case 34: + { start = zzMarkedPos-3; yybegin(DART_MULTILINE_STRING_SINGLE); + } + case 64: break; + case 25: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 65: break; + case 12: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 66: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 67: break; + case 35: + { addToken(Token.DATA_TYPE); + } + case 68: break; + case 33: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 69: break; + case 15: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 70: break; + case 6: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 71: break; + case 10: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 72: break; + case 31: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 73: break; + case 22: + { /* Skip escaped chars, handles case: "\'''". */ + } + case 74: break; + case 9: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 75: break; + case 29: + { addToken(Token.RESERVED_WORD); + } + case 76: break; + case 42: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 77: break; + case 44: + { addToken(Token.RESERVED_WORD_2); + } + case 78: break; + case 18: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 79: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 80: break; + case 4: + { addNullToken(); return firstToken; + } + case 81: break; + case 7: + { addToken(Token.OPERATOR); + } + case 82: break; + case 21: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 83: break; + case 24: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 84: break; + case 43: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 85: break; + case 40: + { addToken(Token.COMMENT_MULTILINE); + } + case 86: break; + case 1: + { + } + case 87: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 88: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 617: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 618: break; + case DART_MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 619: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 620: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 621: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 622: break; + case DART_MULTILINE_STRING_SINGLE: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 623: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex old mode 100644 new mode 100755 index 3ed66fb68..4d4203c51 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.flex @@ -2,23 +2,9 @@ * 7/28/2009 * * DelphiTokenMaker.java - Scanner for the Delphi programming language. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                - *
              • The generated DelphiTokenMaker.java file will contain two + *
              • The generated DelphiTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -161,6 +147,7 @@ import org.fife.ui.rsyntaxtextarea.*; * occurs. * @param hyperlink Whether this token is a hyperlink. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); @@ -169,13 +156,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -227,7 +211,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -238,9 +222,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -255,7 +238,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java old mode 100644 new mode 100755 index b326239e9..f20545564 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DelphiTokenMaker.java @@ -4,23 +4,9 @@ * 7/28/2009 * * DelphiTokenMaker.java - Scanner for the Delphi programming language. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1670 +15,1616 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for the Delphi programming language. - *

                - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                - * + * Scanner for the Delphi programming language.

                + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                + * * If you wish to regenerate this file yourself, keep in mind the following: *

                  - *
                • The generated DelphiTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                • - *
                • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                • - *
                • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                • + *
                • The generated DelphiTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                • + *
                • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                • + *
                • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                • *
                - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class DelphiTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int COMPILER_DIRECTIVE = 3; - public static final int EOL_COMMENT = 5; - public static final int YYINITIAL = 0; - public static final int COMPILER_DIRECTIVE2 = 4; - public static final int MLC = 1; - public static final int MLC2 = 2; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\13\1\12\1\0\1\13\1\7\22\0\1\13\1\42\1\7" + - "\1\10\1\11\1\42\1\42\1\14\1\17\1\21\1\20\1\27\1\42" + - "\1\27\1\30\1\22\1\4\7\6\2\3\1\45\1\42\1\44\1\46" + - "\1\44\1\42\1\43\3\5\1\25\1\26\1\25\5\1\1\24\13\1" + - "\1\23\2\1\1\41\1\0\1\41\1\44\1\2\1\0\1\36\1\55" + - "\1\60\1\62\1\34\1\35\1\56\1\47\1\51\1\66\1\67\1\37" + - "\1\54\1\57\1\61\1\50\1\70\1\32\1\40\1\31\1\33\1\63" + - "\1\52\1\64\1\53\1\65\1\15\1\7\1\16\1\42\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\6\0\1\1\1\2\2\3\1\2\1\4\1\5\1\6" + - "\1\7\1\10\1\11\1\12\1\11\1\12\11\2\1\12" + - "\14\2\1\13\1\14\1\15\4\13\1\16\2\13\1\17" + - "\1\20\1\13\1\21\2\13\1\22\3\13\1\23\1\3" + - "\1\24\1\23\1\24\1\23\1\25\1\23\1\26\1\27" + - "\1\30\1\31\3\2\1\32\15\2\1\32\20\2\1\32" + - "\31\2\1\32\3\2\4\0\1\33\1\34\4\0\1\24" + - "\1\0\2\25\1\35\22\2\1\36\2\2\1\32\73\2" + - "\1\32\1\2\10\0\1\37\1\2\1\40\1\36\56\2" + - "\1\40\2\2\1\36\16\2\2\0\1\41\2\0\1\42" + - "\13\2\1\32\40\2\1\32\10\2\4\0\10\2\1\36" + - "\65\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[437]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int COMPILER_DIRECTIVE = 3; + public static final int EOL_COMMENT = 5; + public static final int YYINITIAL = 0; + public static final int COMPILER_DIRECTIVE2 = 4; + public static final int MLC = 1; + public static final int MLC2 = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\13\1\12\1\0\1\13\1\7\22\0\1\13\1\42\1\7"+ + "\1\10\1\11\1\42\1\42\1\14\1\17\1\21\1\20\1\27\1\42"+ + "\1\27\1\30\1\22\1\4\7\6\2\3\1\45\1\42\1\44\1\46"+ + "\1\44\1\42\1\43\3\5\1\25\1\26\1\25\5\1\1\24\13\1"+ + "\1\23\2\1\1\41\1\0\1\41\1\44\1\2\1\0\1\36\1\55"+ + "\1\60\1\62\1\34\1\35\1\56\1\47\1\51\1\66\1\67\1\37"+ + "\1\54\1\57\1\61\1\50\1\70\1\32\1\40\1\31\1\33\1\63"+ + "\1\52\1\64\1\53\1\65\1\15\1\7\1\16\1\42\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\6\0\1\1\1\2\2\3\1\2\1\4\1\5\1\6"+ + "\1\7\1\10\1\11\1\12\1\11\1\12\11\2\1\12"+ + "\14\2\1\13\1\14\1\15\4\13\1\16\2\13\1\17"+ + "\1\20\1\13\1\21\2\13\1\22\3\13\1\23\1\3"+ + "\1\24\1\23\1\24\1\23\1\25\1\23\1\26\1\27"+ + "\1\30\1\31\3\2\1\32\15\2\1\32\20\2\1\32"+ + "\31\2\1\32\3\2\4\0\1\33\1\34\4\0\1\24"+ + "\1\0\2\25\1\35\22\2\1\36\2\2\1\32\73\2"+ + "\1\32\1\2\10\0\1\37\1\2\1\40\1\36\56\2"+ + "\1\40\2\2\1\36\16\2\2\0\1\41\2\0\1\42"+ + "\13\2\1\32\40\2\1\32\10\2\4\0\10\2\1\36"+ + "\65\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\71\0\162\0\253\0\344\0\u011d\0\u0156\0\u018f"+ + "\0\u01c8\0\u0201\0\u023a\0\u0273\0\u023a\0\u02ac\0\u02e5\0\u031e"+ + "\0\u0357\0\u023a\0\u023a\0\u0390\0\u03c9\0\u0402\0\u043b\0\u0474"+ + "\0\u04ad\0\u04e6\0\u051f\0\u0558\0\u0591\0\u0156\0\u05ca\0\u0603"+ + "\0\u063c\0\u0675\0\u06ae\0\u06e7\0\u0720\0\u0759\0\u0792\0\u07cb"+ + "\0\u0804\0\u083d\0\u0876\0\u023a\0\u023a\0\u08af\0\u08e8\0\u0921"+ + "\0\u095a\0\u023a\0\u0993\0\u09cc\0\u023a\0\u023a\0\u0a05\0\u023a"+ + "\0\u0a3e\0\u0a77\0\u023a\0\u0ab0\0\u0ae9\0\u0b22\0\u0b5b\0\u0b5b"+ + "\0\u0b5b\0\u0b94\0\u0bcd\0\u0c06\0\u0c3f\0\u0c78\0\u023a\0\u023a"+ + "\0\u0cb1\0\u023a\0\u0cea\0\u0d23\0\u0d5c\0\u018f\0\u0d95\0\u0dce"+ + "\0\u0e07\0\u0e40\0\u0e79\0\u0eb2\0\u0eeb\0\u0f24\0\u0f5d\0\u0f96"+ + "\0\u0fcf\0\u1008\0\u1041\0\u107a\0\u10b3\0\u10ec\0\u1125\0\u115e"+ + "\0\u1197\0\u11d0\0\u1209\0\u1242\0\u127b\0\u12b4\0\u12ed\0\u1326"+ + "\0\u135f\0\u1398\0\u13d1\0\u140a\0\u1443\0\u147c\0\u14b5\0\u14ee"+ + "\0\u1527\0\u1560\0\u1599\0\u15d2\0\u160b\0\u1644\0\u167d\0\u16b6"+ + "\0\u16ef\0\u1728\0\u1761\0\u179a\0\u17d3\0\u180c\0\u1845\0\u187e"+ + "\0\u18b7\0\u18f0\0\u1929\0\u1962\0\u199b\0\u19d4\0\u1a0d\0\u1a46"+ + "\0\u1a7f\0\u1ab8\0\u1af1\0\u1b2a\0\u1b63\0\u1b9c\0\u023a\0\u023a"+ + "\0\u1bd5\0\u1c0e\0\u1c47\0\u1c80\0\u1cb9\0\u1cf2\0\u0b5b\0\u1d2b"+ + "\0\u023a\0\u1d64\0\u1d9d\0\u1dd6\0\u1e0f\0\u1e48\0\u1e81\0\u1eba"+ + "\0\u1ef3\0\u1f2c\0\u1f65\0\u1f9e\0\u1fd7\0\u2010\0\u2049\0\u2082"+ + "\0\u20bb\0\u20f4\0\u212d\0\u018f\0\u2166\0\u219f\0\u21d8\0\u2211"+ + "\0\u224a\0\u2283\0\u22bc\0\u22f5\0\u232e\0\u2367\0\u23a0\0\u23d9"+ + "\0\u2412\0\u244b\0\u2484\0\u24bd\0\u24f6\0\u252f\0\u2568\0\u25a1"+ + "\0\u25da\0\u2613\0\u264c\0\u2685\0\u26be\0\u26f7\0\u2730\0\u2769"+ + "\0\u27a2\0\u27db\0\u2814\0\u284d\0\u2886\0\u28bf\0\u28f8\0\u2931"+ + "\0\u296a\0\u29a3\0\u29dc\0\u2a15\0\u2a4e\0\u2a87\0\u2ac0\0\u2af9"+ + "\0\u2b32\0\u2b6b\0\u2ba4\0\u2bdd\0\u2c16\0\u2c4f\0\u2c88\0\u2cc1"+ + "\0\u2cfa\0\u2d33\0\u2d6c\0\u2da5\0\u2dde\0\u2e17\0\u2e50\0\u2e89"+ + "\0\u2ec2\0\u2efb\0\u2f34\0\u2f6d\0\u2fa6\0\u2fdf\0\u3018\0\u3051"+ + "\0\u308a\0\u30c3\0\u30fc\0\u3135\0\u018f\0\u316e\0\u018f\0\u31a7"+ + "\0\u31e0\0\u3219\0\u3252\0\u328b\0\u32c4\0\u32fd\0\u3336\0\u336f"+ + "\0\u33a8\0\u33e1\0\u341a\0\u3453\0\u348c\0\u34c5\0\u34fe\0\u3537"+ + "\0\u3570\0\u35a9\0\u35e2\0\u361b\0\u3654\0\u368d\0\u36c6\0\u36ff"+ + "\0\u3738\0\u3771\0\u37aa\0\u37e3\0\u381c\0\u3855\0\u388e\0\u38c7"+ + "\0\u3900\0\u3939\0\u3972\0\u39ab\0\u39e4\0\u3a1d\0\u3a56\0\u3a8f"+ + "\0\u3ac8\0\u3b01\0\u3b3a\0\u3b73\0\u3bac\0\u3be5\0\u3c1e\0\u3c57"+ + "\0\u3c90\0\u3cc9\0\u3d02\0\u3d3b\0\u3d74\0\u3dad\0\u3de6\0\u3e1f"+ + "\0\u3e58\0\u3e91\0\u3eca\0\u3f03\0\u3f3c\0\u3f75\0\u3fae\0\u3fe7"+ + "\0\u4020\0\u4059\0\u4092\0\u40cb\0\u4104\0\u413d\0\u4176\0\u41af"+ + "\0\u41e8\0\u4221\0\u425a\0\u4293\0\u42cc\0\u4305\0\u433e\0\u4377"+ + "\0\u43b0\0\u43e9\0\u4422\0\u445b\0\u4494\0\u44cd\0\u4506\0\u453f"+ + "\0\u4578\0\u45b1\0\u45ea\0\u4623\0\u465c\0\u4695\0\u46ce\0\u4707"+ + "\0\u4740\0\u4779\0\u47b2\0\u47eb\0\u4824\0\u485d\0\u4896\0\u48cf"+ + "\0\u4908\0\u4941\0\u497a\0\u49b3\0\u49ec\0\u4a25\0\u4a5e\0\u4a97"+ + "\0\u4ad0\0\u4b09\0\u3eca\0\u4b42\0\u4b7b\0\u4bb4\0\u4bed\0\u4c26"+ + "\0\u4c5f\0\u4c98\0\u4cd1\0\u4d0a\0\u4092\0\u4d43\0\u413d\0\u4d7c"+ + "\0\u4db5\0\u4dee\0\u4e27\0\u4e60\0\u4e99\0\u4ed2\0\u4f0b\0\u1fd7"+ + "\0\u4f44\0\u4f7d\0\u4fb6\0\u4fef\0\u5028\0\u5061\0\u509a\0\u50d3"+ + "\0\u510c\0\u5145\0\u517e\0\u51b7\0\u51f0\0\u5229\0\u5262\0\u529b"+ + "\0\u52d4\0\u530d\0\u5346\0\u537f\0\u53b8\0\u53f1\0\u542a\0\u5463"+ + "\0\u549c\0\u54d5\0\u550e\0\u5547\0\u5580\0\u55b9\0\u55f2\0\u562b"+ + "\0\u5664\0\u569d\0\u56d6\0\u570f\0\u5748\0\u5781\0\u57ba\0\u57f3"+ + "\0\u582c\0\u5865\0\u589e\0\u58d7\0\u5910\0\u5949\0\u5982\0\u59bb"+ + "\0\u59f4\0\u5a2d\0\u5a66\0\u5a9f\0\u5ad8"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\71\0\162\0\253\0\344\0\u011d\0\u0156\0\u018f" + - "\0\u01c8\0\u0201\0\u023a\0\u0273\0\u023a\0\u02ac\0\u02e5\0\u031e" + - "\0\u0357\0\u023a\0\u023a\0\u0390\0\u03c9\0\u0402\0\u043b\0\u0474" + - "\0\u04ad\0\u04e6\0\u051f\0\u0558\0\u0591\0\u0156\0\u05ca\0\u0603" + - "\0\u063c\0\u0675\0\u06ae\0\u06e7\0\u0720\0\u0759\0\u0792\0\u07cb" + - "\0\u0804\0\u083d\0\u0876\0\u023a\0\u023a\0\u08af\0\u08e8\0\u0921" + - "\0\u095a\0\u023a\0\u0993\0\u09cc\0\u023a\0\u023a\0\u0a05\0\u023a" + - "\0\u0a3e\0\u0a77\0\u023a\0\u0ab0\0\u0ae9\0\u0b22\0\u0b5b\0\u0b5b" + - "\0\u0b5b\0\u0b94\0\u0bcd\0\u0c06\0\u0c3f\0\u0c78\0\u023a\0\u023a" + - "\0\u0cb1\0\u023a\0\u0cea\0\u0d23\0\u0d5c\0\u018f\0\u0d95\0\u0dce" + - "\0\u0e07\0\u0e40\0\u0e79\0\u0eb2\0\u0eeb\0\u0f24\0\u0f5d\0\u0f96" + - "\0\u0fcf\0\u1008\0\u1041\0\u107a\0\u10b3\0\u10ec\0\u1125\0\u115e" + - "\0\u1197\0\u11d0\0\u1209\0\u1242\0\u127b\0\u12b4\0\u12ed\0\u1326" + - "\0\u135f\0\u1398\0\u13d1\0\u140a\0\u1443\0\u147c\0\u14b5\0\u14ee" + - "\0\u1527\0\u1560\0\u1599\0\u15d2\0\u160b\0\u1644\0\u167d\0\u16b6" + - "\0\u16ef\0\u1728\0\u1761\0\u179a\0\u17d3\0\u180c\0\u1845\0\u187e" + - "\0\u18b7\0\u18f0\0\u1929\0\u1962\0\u199b\0\u19d4\0\u1a0d\0\u1a46" + - "\0\u1a7f\0\u1ab8\0\u1af1\0\u1b2a\0\u1b63\0\u1b9c\0\u023a\0\u023a" + - "\0\u1bd5\0\u1c0e\0\u1c47\0\u1c80\0\u1cb9\0\u1cf2\0\u0b5b\0\u1d2b" + - "\0\u023a\0\u1d64\0\u1d9d\0\u1dd6\0\u1e0f\0\u1e48\0\u1e81\0\u1eba" + - "\0\u1ef3\0\u1f2c\0\u1f65\0\u1f9e\0\u1fd7\0\u2010\0\u2049\0\u2082" + - "\0\u20bb\0\u20f4\0\u212d\0\u018f\0\u2166\0\u219f\0\u21d8\0\u2211" + - "\0\u224a\0\u2283\0\u22bc\0\u22f5\0\u232e\0\u2367\0\u23a0\0\u23d9" + - "\0\u2412\0\u244b\0\u2484\0\u24bd\0\u24f6\0\u252f\0\u2568\0\u25a1" + - "\0\u25da\0\u2613\0\u264c\0\u2685\0\u26be\0\u26f7\0\u2730\0\u2769" + - "\0\u27a2\0\u27db\0\u2814\0\u284d\0\u2886\0\u28bf\0\u28f8\0\u2931" + - "\0\u296a\0\u29a3\0\u29dc\0\u2a15\0\u2a4e\0\u2a87\0\u2ac0\0\u2af9" + - "\0\u2b32\0\u2b6b\0\u2ba4\0\u2bdd\0\u2c16\0\u2c4f\0\u2c88\0\u2cc1" + - "\0\u2cfa\0\u2d33\0\u2d6c\0\u2da5\0\u2dde\0\u2e17\0\u2e50\0\u2e89" + - "\0\u2ec2\0\u2efb\0\u2f34\0\u2f6d\0\u2fa6\0\u2fdf\0\u3018\0\u3051" + - "\0\u308a\0\u30c3\0\u30fc\0\u3135\0\u018f\0\u316e\0\u018f\0\u31a7" + - "\0\u31e0\0\u3219\0\u3252\0\u328b\0\u32c4\0\u32fd\0\u3336\0\u336f" + - "\0\u33a8\0\u33e1\0\u341a\0\u3453\0\u348c\0\u34c5\0\u34fe\0\u3537" + - "\0\u3570\0\u35a9\0\u35e2\0\u361b\0\u3654\0\u368d\0\u36c6\0\u36ff" + - "\0\u3738\0\u3771\0\u37aa\0\u37e3\0\u381c\0\u3855\0\u388e\0\u38c7" + - "\0\u3900\0\u3939\0\u3972\0\u39ab\0\u39e4\0\u3a1d\0\u3a56\0\u3a8f" + - "\0\u3ac8\0\u3b01\0\u3b3a\0\u3b73\0\u3bac\0\u3be5\0\u3c1e\0\u3c57" + - "\0\u3c90\0\u3cc9\0\u3d02\0\u3d3b\0\u3d74\0\u3dad\0\u3de6\0\u3e1f" + - "\0\u3e58\0\u3e91\0\u3eca\0\u3f03\0\u3f3c\0\u3f75\0\u3fae\0\u3fe7" + - "\0\u4020\0\u4059\0\u4092\0\u40cb\0\u4104\0\u413d\0\u4176\0\u41af" + - "\0\u41e8\0\u4221\0\u425a\0\u4293\0\u42cc\0\u4305\0\u433e\0\u4377" + - "\0\u43b0\0\u43e9\0\u4422\0\u445b\0\u4494\0\u44cd\0\u4506\0\u453f" + - "\0\u4578\0\u45b1\0\u45ea\0\u4623\0\u465c\0\u4695\0\u46ce\0\u4707" + - "\0\u4740\0\u4779\0\u47b2\0\u47eb\0\u4824\0\u485d\0\u4896\0\u48cf" + - "\0\u4908\0\u4941\0\u497a\0\u49b3\0\u49ec\0\u4a25\0\u4a5e\0\u4a97" + - "\0\u4ad0\0\u4b09\0\u3eca\0\u4b42\0\u4b7b\0\u4bb4\0\u4bed\0\u4c26" + - "\0\u4c5f\0\u4c98\0\u4cd1\0\u4d0a\0\u4092\0\u4d43\0\u413d\0\u4d7c" + - "\0\u4db5\0\u4dee\0\u4e27\0\u4e60\0\u4e99\0\u4ed2\0\u4f0b\0\u1fd7" + - "\0\u4f44\0\u4f7d\0\u4fb6\0\u4fef\0\u5028\0\u5061\0\u509a\0\u50d3" + - "\0\u510c\0\u5145\0\u517e\0\u51b7\0\u51f0\0\u5229\0\u5262\0\u529b" + - "\0\u52d4\0\u530d\0\u5346\0\u537f\0\u53b8\0\u53f1\0\u542a\0\u5463" + - "\0\u549c\0\u54d5\0\u550e\0\u5547\0\u5580\0\u55b9\0\u55f2\0\u562b" + - "\0\u5664\0\u569d\0\u56d6\0\u570f\0\u5748\0\u5781\0\u57ba\0\u57f3" + - "\0\u582c\0\u5865\0\u589e\0\u58d7\0\u5910\0\u5949\0\u5982\0\u59bb" + - "\0\u59f4\0\u5a2d\0\u5a66\0\u5a9f\0\u5ad8"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[437]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\7\2\10\1\11\1\12\1\10\1\11\1\13\1\14"+ + "\1\10\1\15\1\16\1\17\1\20\1\13\1\21\1\22"+ + "\1\23\1\24\4\10\1\22\1\25\1\26\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\23\1\13\1\36"+ + "\3\22\1\10\1\37\1\40\1\41\1\10\1\42\1\43"+ + "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\4\10"+ + "\12\53\1\54\3\53\1\55\16\53\1\56\11\53\1\57"+ + "\2\53\1\60\16\53\12\61\1\62\5\61\1\63\14\61"+ + "\1\56\11\61\1\57\2\61\1\60\16\61\12\64\1\65"+ + "\3\64\1\66\52\64\12\67\1\70\5\67\1\71\50\67"+ + "\12\72\1\73\22\72\1\74\11\72\1\75\2\72\1\76"+ + "\16\72\7\7\1\0\2\7\11\0\4\7\2\0\10\7"+ + "\2\0\1\7\3\0\23\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\22\10"+ + "\3\77\2\11\1\77\1\11\1\0\2\77\11\0\1\77"+ + "\1\100\1\101\1\102\1\0\1\103\3\77\1\102\1\101"+ + "\1\77\1\100\1\77\2\0\1\77\3\0\13\77\1\101"+ + "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ + "\1\106\1\100\1\101\1\102\1\0\1\103\3\77\1\102"+ + "\1\101\1\77\1\100\1\77\2\0\1\77\3\0\13\77"+ + "\1\101\1\77\1\106\4\77\71\0\3\7\2\14\1\7"+ + "\1\14\1\0\2\7\11\0\4\7\2\0\10\7\2\0"+ + "\1\7\3\0\22\7\13\0\1\16\55\0\14\17\1\107"+ + "\54\17\11\0\1\110\77\0\1\111\72\0\1\112\51\0"+ + "\2\103\1\0\1\103\62\0\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\113\6\10\2\0"+ + "\1\7\3\0\1\114\3\10\1\115\5\10\1\116\7\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\117\1\10\1\120\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\121\2\0\1\7\3\0\10\10\1\122"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\123\1\10\2\0\1\7\3\0\10\10"+ + "\1\124\4\10\1\125\4\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\2\10\1\126\2\10\1\127"+ + "\2\10\2\0\1\7\3\0\2\10\1\130\7\10\1\131"+ + "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\116\1\132\1\133\4\10\1\134\2\0\1\7"+ + "\3\0\6\10\1\135\13\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\136\2\10\2\0"+ + "\1\7\3\0\2\10\1\137\7\10\1\140\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\141"+ + "\2\10\1\142\1\10\1\143\2\10\2\0\1\7\3\0"+ + "\1\144\1\10\1\145\2\10\1\146\14\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\147"+ + "\1\150\2\10\1\151\1\152\1\10\2\0\1\7\3\0"+ + "\12\10\1\153\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\4\10\1\116\2\10\1\116\2\0"+ + "\1\7\3\0\5\10\1\154\2\10\1\155\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\156\6\10\2\0\1\7\3\0\1\157\1\10\1\160"+ + "\7\10\1\161\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\162\4\10\2\0\1\7"+ + "\3\0\12\10\1\124\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\163\4\10\2\0"+ + "\1\7\3\0\4\10\1\164\5\10\1\165\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\166\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\167"+ + "\1\10\1\170\2\10\2\0\1\7\3\0\2\10\1\171"+ + "\7\10\1\172\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\173\2\10\1\174\1\175"+ + "\1\10\2\0\1\7\3\0\1\176\11\10\1\177\1\200"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\116\1\201\1\10\1\116\3\10\2\0"+ + "\1\7\3\0\6\10\1\202\1\10\1\116\3\10\1\203"+ + "\5\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\204\4\10\2\0\1\7\3\0\2\10"+ + "\1\205\1\10\1\206\5\10\1\207\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\210"+ + "\2\10\2\0\1\7\3\0\2\10\1\211\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\212\7\10\12\53\1\0"+ + "\3\53\1\0\16\53\1\0\11\53\1\0\2\53\1\0"+ + "\16\53\31\0\1\213\17\0\1\214\50\0\1\215\111\0"+ + "\1\216\16\0\12\61\1\0\5\61\1\0\14\61\1\0"+ + "\11\61\1\0\2\61\1\0\16\61\21\0\1\217\47\0"+ + "\12\64\1\0\3\64\1\0\52\64\12\67\1\0\5\67"+ + "\1\0\50\67\21\0\1\220\47\0\12\72\1\0\22\72"+ + "\1\0\11\72\1\0\2\72\1\0\16\72\31\0\1\221"+ + "\17\0\1\222\50\0\1\223\111\0\1\224\16\0\7\77"+ + "\1\0\2\77\11\0\4\77\2\0\10\77\2\0\1\77"+ + "\3\0\25\77\2\225\1\77\1\225\1\0\2\77\11\0"+ + "\4\77\1\226\1\0\10\77\2\0\1\77\3\0\25\77"+ + "\2\103\1\77\1\103\1\0\2\77\11\0\2\77\1\101"+ + "\1\102\2\0\3\77\1\102\1\101\3\77\2\0\1\77"+ + "\3\0\13\77\1\101\11\77\2\104\1\77\1\104\1\0"+ + "\2\77\11\0\2\77\1\101\1\102\1\0\1\103\3\77"+ + "\1\102\1\101\3\77\2\0\1\77\3\0\13\77\1\101"+ + "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0"+ + "\1\77\1\227\1\101\1\102\1\0\1\103\3\77\1\102"+ + "\1\101\1\77\1\227\1\77\2\0\1\77\3\0\13\77"+ + "\1\101\11\77\4\230\1\0\2\77\11\0\2\77\2\230"+ + "\2\0\3\77\3\230\2\77\2\0\1\77\3\0\6\77"+ + "\1\230\2\77\1\230\1\77\1\230\6\77\11\0\1\231"+ + "\57\0\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\232\5\10\2\0\1\7\3\0\4\10"+ + "\1\116\15\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\233\1\10\1\234\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\1\10"+ + "\1\235\20\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\236\1\10\1\237\2\0\1\7"+ + "\3\0\1\10\1\240\1\241\4\10\1\242\1\10\1\243"+ + "\7\10\1\244\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\123"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\245\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\246\6\10\1\247\2\0\1\7\3\0\2\10\1\201"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\235\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\116\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\250\7\10"+ + "\2\0\1\7\3\0\1\10\1\251\7\10\1\252\10\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\253\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\254\4\10\1\255\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\235\1\10\2\0\1\7\3\0\10\10\1\256"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\257\6\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\260\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\261"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\262\2\0"+ + "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\263\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ + "\1\264\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\265"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\10\10\1\266\1\267"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\270\3\10\1\271\2\10\2\0\1\7"+ + "\3\0\12\10\1\272\1\273\6\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\116\4\10\1\274"+ + "\1\275\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\4\10\1\276"+ + "\3\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\10\1\116\4\10"+ + "\1\116\1\10\2\0\1\7\3\0\12\10\1\277\7\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\300\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\301\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\2\10\1\302\7\10\1\303\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\6\10\1\304\13\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\7\10\1\305"+ + "\2\0\1\7\3\0\11\10\1\306\10\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\307"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\310\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\1\10\1\311\20\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\312\5\10\1\313\1\10\2\0"+ + "\1\7\3\0\1\314\1\10\1\315\10\10\1\316\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\317\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\320\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\321\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\322\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\7\10\1\323\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\7\10\1\324\12\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\325\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\12\10\1\326\7\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\327\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\330\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\5\10\1\331"+ + "\14\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\254\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\116\7\10\2\0\1\7\3\0\13\10\1\332\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\333\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\334\5\10\1\235\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\335\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\336"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\5\10\1\337\2\10\1\340\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\341"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\116\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\17\10"+ + "\1\342\2\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\3\10\1\343\4\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\4\10\1\344\2\10\1\345\2\0\1\7\3\0"+ + "\1\10\1\346\20\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\7\10\1\347\2\0\1\7\3\0"+ + "\14\10\1\116\5\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\10\10"+ + "\1\350\11\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\2\10\1\351\5\10\2\0\1\7\3\0"+ + "\3\10\1\352\16\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\353\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\354\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\116\6\10\2\0\1\7\3\0\22\10"+ + "\50\0\1\355\57\0\1\356\62\0\1\357\111\0\1\360"+ + "\66\0\1\361\57\0\1\362\62\0\1\363\111\0\1\364"+ + "\16\0\3\77\2\225\1\77\1\225\1\0\2\77\11\0"+ + "\2\77\1\101\1\77\2\0\4\77\1\101\3\77\2\0"+ + "\1\77\3\0\13\77\1\101\6\77\3\0\2\225\1\0"+ + "\1\225\62\0\3\77\4\230\1\0\2\77\11\0\1\77"+ + "\1\227\2\230\2\0\3\77\3\230\1\227\1\77\2\0"+ + "\1\77\3\0\6\77\1\230\2\77\1\230\1\77\1\230"+ + "\6\77\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\365\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\366\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\116\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\116"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\367\1\10"+ + "\2\0\1\7\3\0\13\10\1\370\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\2\10\1\371\7\10\1\372\7\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\373\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\374\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\375\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\12\10\1\376\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\377\5\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\7\10\1\116\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u0100\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u0101\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0102"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0103\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u0104\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u0105\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\7\10\1\232\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u0106\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\3\10\1\u0107\16\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0108"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0109\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u010a\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u010b\7\10\2\0\1\7\3\0"+ + "\12\10\1\u010c\7\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0100\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u010d\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\7\10\1\u010e\12\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\171\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u010f\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0110\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u0111\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u0112\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u0113\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\4\10\1\254\3\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\273\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\u0114\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\7\10\1\u0115\12\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\u0116\1\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\14\10\1\u0117\5\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u0118\7\10\2\0\1\7\3\0"+ + "\1\10\1\u0119\5\10\1\u011a\1\10\1\u011b\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u011c\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\11\10\1\267\10\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\20\10\1\u011d\1\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\u011e\7\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\u011f"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u0120\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\u0121\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0122\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0123"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\u0124\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0125\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u0126\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\235\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\1\116\21\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\13\10\1\u0127\6\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\7\10\1\u0128\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\234"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\u0127\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\u0129\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\116\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\254"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u012a\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u012b\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u012c\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\u012d"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\7\10\1\245\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\367\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\1\10\1\367\20\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\u012e\6\10\1\u012f"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\171\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u0130\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0131\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0132\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0133\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0134"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\1\10\1\u0135\20\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\u0136\2\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10"+ + "\1\u0115\13\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\166"+ + "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0137\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0138\7\10\2\0\1\7\3\0\22\10\45\0\1\u0139"+ + "\57\0\1\355\104\0\1\u013a\50\0\1\u013b\105\0\1\u013c"+ + "\57\0\1\361\104\0\1\u013d\50\0\1\u013e\40\0\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u013f\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\12\10\1\u0140\7\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\13\10\1\u0141\6\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\2\10\1\u0142\5\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\201\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u0143\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\7\10\1\u0144\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\124"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0145\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\6\10\1\116\1\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\4\10\1\235\3\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0146\6\10\2\0\1\7\3\0"+ + "\10\10\1\u0147\11\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u0148\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\1\10\1\201"+ + "\20\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0149\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u014a\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u014b"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\4\10\1\116\15\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\5\10\1\u014c\14\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ + "\1\u014d\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u014e\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u014f\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u0150\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0151\3\10\1\u0152\13\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\u0153\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\2\10\1\u0154\17\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0155"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\5\10\1\u0156\2\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\124\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u0157\7\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\u0158\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\u0157\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10"+ + "\1\u0159\2\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u015a"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u015b\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u015c\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\u015d\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\u015e"+ + "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\124\1\10\1\u015f\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\4\10\1\u0160\3\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0161\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\u0162\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0163"+ + "\6\10\2\0\1\7\3\0\7\10\1\u0161\12\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\235\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0164"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0165\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\15\10\1\254\4\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\3\10\1\370\4\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0152"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u015f\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\3\10\1\u0166\4\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ + "\1\u0167\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\4\10\1\344\3\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u0168\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0169\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u016a\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u016b\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\11\10\1\201\10\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016c"+ + "\4\10\1\u016d\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\2\10"+ + "\1\u016e\5\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016f"+ + "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u0170\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0171\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10"+ + "\1\u0172\14\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u0173\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\267\5\10\2\0\1\7\3\0\22\10"+ + "\22\0\1\u0174\106\0\1\355\4\0\1\u0139\24\0\1\u013b"+ + "\1\u0175\4\u013b\1\0\1\u0175\1\u013b\2\0\1\u0175\2\0"+ + "\3\u0175\5\u013b\2\u0175\10\u013b\3\u0175\1\0\2\u0175\22\u013b"+ + "\22\0\1\u0176\106\0\1\361\4\0\1\u013c\24\0\1\u013e"+ + "\1\u0177\4\u013e\1\0\1\u0177\1\u013e\2\0\1\u0177\2\0"+ + "\3\u0177\5\u013e\2\u0177\10\u013e\3\u0177\1\0\2\u0177\22\u013e"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\13\10\1\u0178\6\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u0179\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u017a"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\10\1\u017b\6\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u017c\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\u017d\7\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\10\1\u017e\6\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\267\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\u017f\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0180\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0181\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\6\10\1\u0108\1\10\2\0\1\7"+ + "\3\0\2\10\1\u0182\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\u0155\6\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\u0183\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0184"+ + "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0185\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\2\10\1\u0159\5\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\u0186\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\u0187\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\12\10\1\u0188\7\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\7\10\1\116\12\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\116\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\254"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\6\10\1\171\1\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u0151\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10"+ + "\1\367\4\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0189\7\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\u0183\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\1\10\1\u018a\6\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u018b\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\13\10\1\u018c\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\7\10\1\u018d\2\0\1\7\3\0\11\10\1\254\10\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\7\10\1\u0189\12\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\u018e\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\336"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\5\10\1\u018f\14\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\4\10\1\u0190\3\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0191\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\5\10\1\u0192\2\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0193\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\1\10\1\u0194\20\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u0195\11\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\10\10\1\u0196\11\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\2\10\1\u0197\17\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\2\10\1\u0198\17\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ + "\1\u0199\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u019a\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\2\10\1\u019b\5\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\u014c\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\10\10\1\u019c\2\10\1\254\6\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\2\10\1\u019d\17\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\7\10\1\u019e\12\10\22\0\1\u013b"+ + "\70\0\1\u013e\46\0\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\14\10"+ + "\1\u019f\5\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\6\10\1\u0186\1\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\10\10\1\u019a\11\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\u01a0\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\12\10\1\u01a1\7\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\330"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\3\10\1\u019e\4\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u01a2\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10"+ + "\1\234\7\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\16\10\1\u01a3"+ + "\3\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\1\u0111\7\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10"+ + "\1\u017d\1\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\11\10\1\u019a\10\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\4\10\1\254\15\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\367\7\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\12\10\1\u01a4"+ + "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\254\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\u0108\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\2\10\1\u01a5\5\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\1\u0111\21\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\10\1\u01a6\6\10\2\0\1\7\3\0"+ + "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\3\10\1\u01a7\4\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\5\10\1\u01a8\2\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u0113"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\6\10\1\u01a9\1\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\10\10\1\367\11\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\5\10\1\u01aa\2\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u01ab"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u01a4\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\10\10\1\u019e\11\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10"+ + "\2\0\1\7\3\0\13\10\1\u0189\6\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0155"+ + "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\1\254\7\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10"+ + "\1\u01ac\10\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u01ad\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\10\10\2\0\1\7\3\0\11\10\1\254\10\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10"+ + "\1\254\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\5\10\1\212\2\10"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\3\10\1\u01ae\4\10\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\13\10"+ + "\1\u01af\6\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\367"+ + "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\5\10\1\u0105\2\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\6\10\1\367\1\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10"+ + "\1\235\6\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0"+ + "\1\7\3\0\5\10\1\254\14\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\10\10\1\u01b0\11\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0"+ + "\11\10\1\235\10\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10"+ + "\1\u0182\17\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u017e"+ + "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10"+ + "\2\0\10\10\2\0\1\7\3\0\4\10\1\367\15\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\52\7\10\2\0\1\7\3\0\22\10\1\7\6\10"+ + "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u01b1"+ + "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\7\10\1\u01b2\2\0"+ + "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10"+ + "\11\0\4\10\2\0\2\10\1\u01b3\5\10\2\0\1\7"+ + "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0"+ + "\4\10\2\0\1\u01b4\7\10\2\0\1\7\3\0\22\10"+ + "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0"+ + "\1\10\1\u0163\6\10\2\0\1\7\3\0\22\10\1\7"+ + "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u01b5"+ + "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0"+ + "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7"+ + "\3\0\11\10\1\u0189\10\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\5\10\1\u0105\1\10\1\254"+ + "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7"+ + "\1\10\11\0\4\10\2\0\1\10\1\270\6\10\2\0"+ + "\1\7\3\0\22\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[23313]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\4\1\1\11\1\1\1\11\4\1\2\11\30\1"+ + "\2\11\4\1\1\11\2\1\2\11\1\1\1\11\2\1"+ + "\1\11\13\1\2\11\1\1\1\11\100\1\4\0\2\11"+ + "\4\0\1\1\1\0\2\1\1\11\123\1\10\0\104\1"+ + "\2\0\1\1\2\0\66\1\4\0\76\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\7\2\10\1\11\1\12\1\10\1\11\1\13\1\14" + - "\1\10\1\15\1\16\1\17\1\20\1\13\1\21\1\22" + - "\1\23\1\24\4\10\1\22\1\25\1\26\1\27\1\30" + - "\1\31\1\32\1\33\1\34\1\35\1\23\1\13\1\36" + - "\3\22\1\10\1\37\1\40\1\41\1\10\1\42\1\43" + - "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\4\10" + - "\12\53\1\54\3\53\1\55\16\53\1\56\11\53\1\57" + - "\2\53\1\60\16\53\12\61\1\62\5\61\1\63\14\61" + - "\1\56\11\61\1\57\2\61\1\60\16\61\12\64\1\65" + - "\3\64\1\66\52\64\12\67\1\70\5\67\1\71\50\67" + - "\12\72\1\73\22\72\1\74\11\72\1\75\2\72\1\76" + - "\16\72\7\7\1\0\2\7\11\0\4\7\2\0\10\7" + - "\2\0\1\7\3\0\23\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\22\10" + - "\3\77\2\11\1\77\1\11\1\0\2\77\11\0\1\77" + - "\1\100\1\101\1\102\1\0\1\103\3\77\1\102\1\101" + - "\1\77\1\100\1\77\2\0\1\77\3\0\13\77\1\101" + - "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0" + - "\1\106\1\100\1\101\1\102\1\0\1\103\3\77\1\102" + - "\1\101\1\77\1\100\1\77\2\0\1\77\3\0\13\77" + - "\1\101\1\77\1\106\4\77\71\0\3\7\2\14\1\7" + - "\1\14\1\0\2\7\11\0\4\7\2\0\10\7\2\0" + - "\1\7\3\0\22\7\13\0\1\16\55\0\14\17\1\107" + - "\54\17\11\0\1\110\77\0\1\111\72\0\1\112\51\0" + - "\2\103\1\0\1\103\62\0\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\113\6\10\2\0" + - "\1\7\3\0\1\114\3\10\1\115\5\10\1\116\7\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\3\10\1\117\1\10\1\120\2\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\7\10\1\121\2\0\1\7\3\0\10\10\1\122" + - "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\123\1\10\2\0\1\7\3\0\10\10" + - "\1\124\4\10\1\125\4\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\2\10\1\126\2\10\1\127" + - "\2\10\2\0\1\7\3\0\2\10\1\130\7\10\1\131" + - "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\116\1\132\1\133\4\10\1\134\2\0\1\7" + - "\3\0\6\10\1\135\13\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\5\10\1\136\2\10\2\0" + - "\1\7\3\0\2\10\1\137\7\10\1\140\7\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\141" + - "\2\10\1\142\1\10\1\143\2\10\2\0\1\7\3\0" + - "\1\144\1\10\1\145\2\10\1\146\14\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\147" + - "\1\150\2\10\1\151\1\152\1\10\2\0\1\7\3\0" + - "\12\10\1\153\7\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\4\10\1\116\2\10\1\116\2\0" + - "\1\7\3\0\5\10\1\154\2\10\1\155\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\156\6\10\2\0\1\7\3\0\1\157\1\10\1\160" + - "\7\10\1\161\7\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\162\4\10\2\0\1\7" + - "\3\0\12\10\1\124\7\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\163\4\10\2\0" + - "\1\7\3\0\4\10\1\164\5\10\1\165\7\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\12\10\1\166\7\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\167" + - "\1\10\1\170\2\10\2\0\1\7\3\0\2\10\1\171" + - "\7\10\1\172\7\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\2\10\1\173\2\10\1\174\1\175" + - "\1\10\2\0\1\7\3\0\1\176\11\10\1\177\1\200" + - "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\10\1\116\1\201\1\10\1\116\3\10\2\0" + - "\1\7\3\0\6\10\1\202\1\10\1\116\3\10\1\203" + - "\5\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\204\4\10\2\0\1\7\3\0\2\10" + - "\1\205\1\10\1\206\5\10\1\207\7\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\210" + - "\2\10\2\0\1\7\3\0\2\10\1\211\17\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\12\10\1\212\7\10\12\53\1\0" + - "\3\53\1\0\16\53\1\0\11\53\1\0\2\53\1\0" + - "\16\53\31\0\1\213\17\0\1\214\50\0\1\215\111\0" + - "\1\216\16\0\12\61\1\0\5\61\1\0\14\61\1\0" + - "\11\61\1\0\2\61\1\0\16\61\21\0\1\217\47\0" + - "\12\64\1\0\3\64\1\0\52\64\12\67\1\0\5\67" + - "\1\0\50\67\21\0\1\220\47\0\12\72\1\0\22\72" + - "\1\0\11\72\1\0\2\72\1\0\16\72\31\0\1\221" + - "\17\0\1\222\50\0\1\223\111\0\1\224\16\0\7\77" + - "\1\0\2\77\11\0\4\77\2\0\10\77\2\0\1\77" + - "\3\0\25\77\2\225\1\77\1\225\1\0\2\77\11\0" + - "\4\77\1\226\1\0\10\77\2\0\1\77\3\0\25\77" + - "\2\103\1\77\1\103\1\0\2\77\11\0\2\77\1\101" + - "\1\102\2\0\3\77\1\102\1\101\3\77\2\0\1\77" + - "\3\0\13\77\1\101\11\77\2\104\1\77\1\104\1\0" + - "\2\77\11\0\2\77\1\101\1\102\1\0\1\103\3\77" + - "\1\102\1\101\3\77\2\0\1\77\3\0\13\77\1\101" + - "\11\77\1\104\1\105\1\77\1\105\1\0\2\77\11\0" + - "\1\77\1\227\1\101\1\102\1\0\1\103\3\77\1\102" + - "\1\101\1\77\1\227\1\77\2\0\1\77\3\0\13\77" + - "\1\101\11\77\4\230\1\0\2\77\11\0\2\77\2\230" + - "\2\0\3\77\3\230\2\77\2\0\1\77\3\0\6\77" + - "\1\230\2\77\1\230\1\77\1\230\6\77\11\0\1\231" + - "\57\0\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\2\10\1\232\5\10\2\0\1\7\3\0\4\10" + - "\1\116\15\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\233\1\10\1\234\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\1\10" + - "\1\235\20\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\5\10\1\236\1\10\1\237\2\0\1\7" + - "\3\0\1\10\1\240\1\241\4\10\1\242\1\10\1\243" + - "\7\10\1\244\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\123" + - "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\245\4\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\246\6\10\1\247\2\0\1\7\3\0\2\10\1\201" + - "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\7\10\1\235\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\13\10\1\116\6\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\250\7\10" + - "\2\0\1\7\3\0\1\10\1\251\7\10\1\252\10\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\10\10\1\253\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\254\4\10\1\255\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\6\10\1\235\1\10\2\0\1\7\3\0\10\10\1\256" + - "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\10\1\257\6\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\10\1\260\6\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\261" + - "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\7\10\1\262\2\0" + - "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\7\10\1\263\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10" + - "\1\264\13\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\265" + - "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\10\10\1\266\1\267" + - "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\10\1\270\3\10\1\271\2\10\2\0\1\7" + - "\3\0\12\10\1\272\1\273\6\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\116\4\10\1\274" + - "\1\275\1\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\4\10\1\276" + - "\3\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\10\1\116\4\10" + - "\1\116\1\10\2\0\1\7\3\0\12\10\1\277\7\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\10\10\1\300\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10" + - "\1\301\2\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\2\10\1\302\7\10\1\303\7\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\6\10\1\304\13\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\7\10\1\305" + - "\2\0\1\7\3\0\11\10\1\306\10\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\307" + - "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\2\10\1\310\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\1\10\1\311\20\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\312\5\10\1\313\1\10\2\0" + - "\1\7\3\0\1\314\1\10\1\315\10\10\1\316\6\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\2\10\1\317\17\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\2\10\1\320\17\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\321\7\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\322\6\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\7\10\1\323\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\7\10\1\324\12\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\325\7\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\12\10\1\326\7\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\327\7\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\5\10\1\330\2\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\5\10\1\331" + - "\14\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\254\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\116\7\10\2\0\1\7\3\0\13\10\1\332\6\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\10\1\333\6\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\334\5\10\1\235\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10" + - "\1\335\2\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\336" + - "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\5\10\1\337\2\10\1\340\11\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\341" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\116\7\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\17\10" + - "\1\342\2\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\3\10\1\343\4\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\4\10\1\344\2\10\1\345\2\0\1\7\3\0" + - "\1\10\1\346\20\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\7\10\1\347\2\0\1\7\3\0" + - "\14\10\1\116\5\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\10\10" + - "\1\350\11\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\2\10\1\351\5\10\2\0\1\7\3\0" + - "\3\10\1\352\16\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\10\1\353\6\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\354\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\10\1\116\6\10\2\0\1\7\3\0\22\10" + - "\50\0\1\355\57\0\1\356\62\0\1\357\111\0\1\360" + - "\66\0\1\361\57\0\1\362\62\0\1\363\111\0\1\364" + - "\16\0\3\77\2\225\1\77\1\225\1\0\2\77\11\0" + - "\2\77\1\101\1\77\2\0\4\77\1\101\3\77\2\0" + - "\1\77\3\0\13\77\1\101\6\77\3\0\2\225\1\0" + - "\1\225\62\0\3\77\4\230\1\0\2\77\11\0\1\77" + - "\1\227\2\230\2\0\3\77\3\230\1\227\1\77\2\0" + - "\1\77\3\0\6\77\1\230\2\77\1\230\1\77\1\230" + - "\6\77\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\365\4\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\3\10\1\366\4\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\10\10\1\116\11\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\116" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\6\10\1\367\1\10" + - "\2\0\1\7\3\0\13\10\1\370\6\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\2\10\1\371\7\10\1\372\7\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10" + - "\1\373\4\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\10\10\1\374\11\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\2\10\1\375\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\12\10\1\376\7\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\2\10\1\377\5\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\7\10\1\116\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\2\10\1\u0100\17\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10" + - "\1\u0101\2\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0102" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\12\10\1\u0103\7\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u0104\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10" + - "\1\u0105\10\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\7\10\1\232\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\5\10\1\u0106\2\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\3\10\1\u0107\16\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0108" + - "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\12\10\1\u0109\7\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u010a\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\u010b\7\10\2\0\1\7\3\0" + - "\12\10\1\u010c\7\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\u0100\4\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u010d\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\7\10\1\u010e\12\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\5\10\1\171\2\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\2\10\1\u010f\17\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0110\7\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\u0111\6\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10" + - "\1\u0112\10\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\6\10\1\u0113\1\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\4\10\1\254\3\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\3\10\1\273\4\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\u0114\6\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\7\10\1\u0115\12\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\6\10\1\u0116\1\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\14\10\1\u0117\5\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\u0118\7\10\2\0\1\7\3\0" + - "\1\10\1\u0119\5\10\1\u011a\1\10\1\u011b\10\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10" + - "\1\u011c\1\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\11\10\1\267\10\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\20\10\1\u011d\1\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\u011e\7\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\u011f" + - "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\u0120\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\3\10\1\u0121\4\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\2\10\1\u0122\17\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0123" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\u0124\7\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\u0125\4\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\u0126\7\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\6\10\1\235\1\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\1\116\21\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\13\10\1\u0127\6\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\7\10\1\u0128\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\234" + - "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\u0127\4\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\6\10\1\u0129\1\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\12\10\1\116\7\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\254" + - "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\3\10\1\u012a\4\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u012b\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\10\1\u012c\6\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\u012d" + - "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\7\10\1\245\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\367\6\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\1\10\1\367\20\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\u012e\6\10\1\u012f" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\11\10\1\171\10\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\u0130\4\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u0131\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u0132\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\u0133\7\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0134" + - "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\1\10\1\u0135\20\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\5\10\1\u0136\2\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\6\10" + - "\1\u0115\13\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\10\10\1\166" + - "\11\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u0137\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\u0138\7\10\2\0\1\7\3\0\22\10\45\0\1\u0139" + - "\57\0\1\355\104\0\1\u013a\50\0\1\u013b\105\0\1\u013c" + - "\57\0\1\361\104\0\1\u013d\50\0\1\u013e\40\0\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10" + - "\1\u013f\2\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\12\10\1\u0140\7\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\13\10\1\u0141\6\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\2\10\1\u0142\5\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\5\10\1\201\2\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\u0143\7\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\7\10\1\u0144\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\124" + - "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\2\10\1\u0145\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\6\10\1\116\1\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\4\10\1\235\3\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u0146\6\10\2\0\1\7\3\0" + - "\10\10\1\u0147\11\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\10\1\u0148\6\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\1\10\1\201" + - "\20\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\u0149\7\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10" + - "\1\u014a\1\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u014b" + - "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\4\10\1\116\15\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\5\10\1\u014c\14\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10" + - "\1\u014d\14\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u014e\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\u014f\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\5\10\1\u0150\2\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\2\10\1\u0151\3\10\1\u0152\13\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\10\10\1\u0153\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\2\10\1\u0154\17\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u0155" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\5\10\1\u0156\2\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\124\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\u0157\7\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\u0158\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\6\10\1\u0157\1\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\5\10" + - "\1\u0159\2\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u015a" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\3\10\1\u015b\4\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\u015c\6\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\u015d\4\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\2\10\1\u015e" + - "\17\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\124\1\10\1\u015f\2\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\4\10\1\u0160\3\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\u0161\7\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10" + - "\1\u0162\4\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0163" + - "\6\10\2\0\1\7\3\0\7\10\1\u0161\12\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\10\10\1\235\11\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u0164" + - "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\2\10\1\u0165\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\15\10\1\254\4\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\3\10\1\370\4\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0152" + - "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u015f\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\3\10\1\u0166\4\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10" + - "\1\u0167\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\4\10\1\344\3\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u0168\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10" + - "\1\u0169\17\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\5\10\1\u016a\2\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\u016b\7\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\11\10\1\201\10\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016c" + - "\4\10\1\u016d\1\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\2\10" + - "\1\u016e\5\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\10\1\u016f" + - "\6\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\3\10\1\u0170\4\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\2\10\1\u0171\17\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\5\10" + - "\1\u0172\14\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u0173\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\2\10\1\267\5\10\2\0\1\7\3\0\22\10" + - "\22\0\1\u0174\106\0\1\355\4\0\1\u0139\24\0\1\u013b" + - "\1\u0175\4\u013b\1\0\1\u0175\1\u013b\2\0\1\u0175\2\0" + - "\3\u0175\5\u013b\2\u0175\10\u013b\3\u0175\1\0\2\u0175\22\u013b" + - "\22\0\1\u0176\106\0\1\361\4\0\1\u013c\24\0\1\u013e" + - "\1\u0177\4\u013e\1\0\1\u0177\1\u013e\2\0\1\u0177\2\0" + - "\3\u0177\5\u013e\2\u0177\10\u013e\3\u0177\1\0\2\u0177\22\u013e" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\13\10\1\u0178\6\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\10\10\1\u0179\11\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u017a" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\10\1\u017b\6\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\u017c\6\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\u017d\7\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\10\1\u017e\6\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\10\10\1\267\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\13\10\1\u017f\6\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0180\7\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\2\10\1\u0181\17\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\6\10\1\u0108\1\10\2\0\1\7" + - "\3\0\2\10\1\u0182\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\u0155\6\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\5\10\1\u0183\2\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\6\10\1\u0184" + - "\13\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u0185\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\2\10\1\u0159\5\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\u0186\6\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\10\10\1\u0187\11\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\12\10\1\u0188\7\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\7\10\1\116\12\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10" + - "\1\116\10\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\254" + - "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\6\10\1\171\1\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\2\10\1\u0151\17\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\3\10" + - "\1\367\4\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\1\u0189\7\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\11\10\1\u0183\10\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\1\10\1\u018a\6\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\5\10\1\u018b\2\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\13\10\1\u018c\6\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\7\10\1\u018d\2\0\1\7\3\0\11\10\1\254\10\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\7\10\1\u0189\12\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\12\10\1\u018e\7\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\336" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\5\10\1\u018f\14\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\4\10\1\u0190\3\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10" + - "\1\u0191\17\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\5\10\1\u0192\2\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u0193\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\1\10\1\u0194\20\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\10\10\1\u0195\11\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\10\10\1\u0196\11\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\2\10\1\u0197\17\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\2\10\1\u0198\17\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10" + - "\1\u0199\7\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\6\10\1\u019a\1\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\2\10\1\u019b\5\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\11\10\1\u014c\10\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\10\10\1\u019c\2\10\1\254\6\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\2\10\1\u019d\17\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\7\10\1\u019e\12\10\22\0\1\u013b" + - "\70\0\1\u013e\46\0\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\14\10" + - "\1\u019f\5\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\6\10\1\u0186\1\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\10\10\1\u019a\11\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\11\10\1\u01a0\10\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\12\10\1\u01a1\7\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\330" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\3\10\1\u019e\4\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u01a2\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\12\10" + - "\1\234\7\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\16\10\1\u01a3" + - "\3\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\1\u0111\7\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\6\10" + - "\1\u017d\1\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\11\10\1\u019a\10\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\4\10\1\254\15\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\367\7\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\12\10\1\u01a4" + - "\7\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\254\4\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\u0108\7\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\5\10\1\116\14\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\2\10\1\u01a5\5\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\1\u0111\21\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\10\1\u01a6\6\10\2\0\1\7\3\0" + - "\22\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\3\10\1\u01a7\4\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\5\10\1\u01a8\2\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u0113" + - "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\6\10\1\u01a9\1\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\10\10\1\367\11\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\5\10\1\u01aa\2\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u01ab" + - "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u01a4\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\10\10\1\u019e\11\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\10\10" + - "\2\0\1\7\3\0\13\10\1\u0189\6\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\5\10\1\u0155" + - "\2\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\1\254\7\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\11\10" + - "\1\u01ac\10\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\u01ad\7\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\10\10\2\0\1\7\3\0\11\10\1\254\10\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\7\10" + - "\1\254\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\5\10\1\212\2\10" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\3\10\1\u01ae\4\10\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\13\10" + - "\1\u01af\6\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\13\10\1\367" + - "\6\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\5\10\1\u0105\2\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\6\10\1\367\1\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\10" + - "\1\235\6\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\10\10\2\0" + - "\1\7\3\0\5\10\1\254\14\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\10\10\1\u01b0\11\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\10\10\2\0\1\7\3\0" + - "\11\10\1\235\10\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\10\10\2\0\1\7\3\0\2\10" + - "\1\u0182\17\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\10\10\2\0\1\7\3\0\11\10\1\u017e" + - "\10\10\1\7\6\10\1\0\1\7\1\10\11\0\4\10" + - "\2\0\10\10\2\0\1\7\3\0\4\10\1\367\15\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\52\7\10\2\0\1\7\3\0\22\10\1\7\6\10" + - "\1\0\1\7\1\10\11\0\4\10\2\0\3\10\1\u01b1" + - "\4\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\7\10\1\u01b2\2\0" + - "\1\7\3\0\22\10\1\7\6\10\1\0\1\7\1\10" + - "\11\0\4\10\2\0\2\10\1\u01b3\5\10\2\0\1\7" + - "\3\0\22\10\1\7\6\10\1\0\1\7\1\10\11\0" + - "\4\10\2\0\1\u01b4\7\10\2\0\1\7\3\0\22\10" + - "\1\7\6\10\1\0\1\7\1\10\11\0\4\10\2\0" + - "\1\10\1\u0163\6\10\2\0\1\7\3\0\22\10\1\7" + - "\6\10\1\0\1\7\1\10\11\0\4\10\2\0\1\u01b5" + - "\7\10\2\0\1\7\3\0\22\10\1\7\6\10\1\0" + - "\1\7\1\10\11\0\4\10\2\0\10\10\2\0\1\7" + - "\3\0\11\10\1\u0189\10\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\5\10\1\u0105\1\10\1\254" + - "\2\0\1\7\3\0\22\10\1\7\6\10\1\0\1\7" + - "\1\10\11\0\4\10\2\0\1\10\1\270\6\10\2\0" + - "\1\7\3\0\22\10"; - - private static int[] zzUnpackTrans() { - int[] result = new int[23313]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*" comment. + */ + public static final int INTERNAL_MLC2 = -1; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "{$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE = -2; + + /** + * Token type specific to DelphiTokenMaker; denotes a line ending + * with an unterminated "(*$" compiler directive. + */ + public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DelphiTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case INTERNAL_MLC2: + state = MLC2; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE: + state = COMPILER_DIRECTIVE; + start = text.offset; + break; + case INTERNAL_COMPILER_DIRECTIVE2: + state = COMPILER_DIRECTIVE2; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DelphiTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DelphiTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 158) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\6\0\4\1\1\11\1\1\1\11\4\1\2\11\30\1" + - "\2\11\4\1\1\11\2\1\2\11\1\1\1\11\2\1" + - "\1\11\13\1\2\11\1\1\1\11\100\1\4\0\2\11" + - "\4\0\1\1\1\0\2\1\1\11\123\1\10\0\104\1" + - "\2\0\1\1\2\0\66\1\4\0\76\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[437]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; + throw new Error(message); + } - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** the textposition at the last accepting state */ - private int zzMarkedPos; + zzMarkedPos -= number; + } - /** the current text position in the buffer */ - private int zzCurrentPos; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /* user code: */ + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Token type specific to DelphiTokenMaker; denotes a line ending with an unterminated "(*" comment. - */ - public static final int INTERNAL_MLC2 = -1; + zzAction = -1; - /** - * Token type specific to DelphiTokenMaker; denotes a line ending with an unterminated "{$" compiler directive. - */ - public static final int INTERNAL_COMPILER_DIRECTIVE = -2; + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Token type specific to DelphiTokenMaker; denotes a line ending with an unterminated "(*$" compiler directive. - */ - public static final int INTERNAL_COMPILER_DIRECTIVE2 = -3; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public DelphiTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addHyperlinkToken(int, int, int) - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, false); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - super.addToken(array, start, end, tokenType, startOffset, hyperlink); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - case INTERNAL_MLC2: - state = MLC2; - start = text.offset; - break; - case INTERNAL_COMPILER_DIRECTIVE: - state = COMPILER_DIRECTIVE; - start = text.offset; - break; - case INTERNAL_COMPILER_DIRECTIVE2: - state = COMPILER_DIRECTIVE2; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public DelphiTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public DelphiTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 158) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + zzState = zzLexicalState; - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 15: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_COMPILER_DIRECTIVE); - return firstToken; - } - case 35: - break; - case 4: { - addToken(Token.PREPROCESSOR); - } - case 36: - break; - case 5: { - addNullToken(); - return firstToken; - } - case 37: - break; - case 27: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 38: - break; - case 6: { - addToken(Token.WHITESPACE); - } - case 39: - break; - case 21: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 40: - break; - case 20: { - addToken(Token.LITERAL_NUMBER_FLOAT); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 41: - break; - case 26: { - addToken(Token.RESERVED_WORD); - } - case 42: - break; - case 16: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.PREPROCESSOR); - } - case 43: - break; - case 9: { - addToken(Token.SEPARATOR); - } - case 44: - break; - case 17: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_COMPILER_DIRECTIVE2); - return firstToken; - } - case 45: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 46: - break; - case 18: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 47: - break; - case 25: { - start = zzMarkedPos - 2; - yybegin(EOL_COMMENT); - } - case 48: - break; - case 30: { - addToken(Token.FUNCTION); - } - case 49: - break; - case 7: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 50: - break; - case 14: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_MLC2); - return firstToken; - } - case 51: - break; - case 32: { - addToken(Token.DATA_TYPE); - } - case 52: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 53: - break; - case 31: { - addToken(Token.LITERAL_BOOLEAN); - } - case 54: - break; - case 22: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 55: - break; - case 34: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 56: - break; - case 29: { - start = zzMarkedPos - 3; - yybegin(COMPILER_DIRECTIVE2); - } - case 57: - break; - case 24: { - start = zzMarkedPos - 2; - yybegin(MLC2); - } - case 58: - break; - case 33: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 59: - break; - case 19: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 60: - break; - case 28: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.PREPROCESSOR); - } - case 61: - break; - case 13: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.COMMENT_MULTILINE); - } - case 62: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; + } + case 35: break; + case 4: + { addToken(Token.PREPROCESSOR); + } + case 36: break; + case 5: + { addNullToken(); return firstToken; + } + case 37: break; + case 27: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 38: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 39: break; + case 21: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 40: break; + case 20: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 41: break; + case 26: + { addToken(Token.RESERVED_WORD); + } + case 42: break; + case 16: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.PREPROCESSOR); + } + case 43: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 44: break; + case 17: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; + } + case 45: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 18: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 47: break; + case 25: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 48: break; + case 30: + { addToken(Token.FUNCTION); + } + case 49: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 50: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; + } + case 51: break; + case 32: + { addToken(Token.DATA_TYPE); + } + case 52: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 53: break; + case 31: + { addToken(Token.LITERAL_BOOLEAN); + } + case 54: break; + case 22: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 55: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 56: break; + case 29: + { start = zzMarkedPos-3; yybegin(COMPILER_DIRECTIVE2); + } + case 57: break; + case 24: + { start = zzMarkedPos-2; yybegin(MLC2); + } + case 58: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 59: break; + case 19: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 60: break; + case 28: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); + } + case 61: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.COMMENT_MULTILINE); + } + case 62: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 63: break; + case 10: + { addToken(Token.OPERATOR); + } + case 64: break; + case 8: + { start = zzMarkedPos-1; yybegin(MLC); + } + case 65: break; + case 23: + { start = zzMarkedPos-2; yybegin(COMPILER_DIRECTIVE); + } + case 66: break; + case 11: + { + } + case 67: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 68: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case COMPILER_DIRECTIVE: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE); return firstToken; } - case 63: - break; - case 10: { - addToken(Token.OPERATOR); + case 438: break; + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 64: - break; - case 8: { - start = zzMarkedPos - 1; - yybegin(MLC); + case 439: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 65: - break; - case 23: { - start = zzMarkedPos - 2; - yybegin(COMPILER_DIRECTIVE); + case 440: break; + case COMPILER_DIRECTIVE2: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_COMPILER_DIRECTIVE2); return firstToken; } - case 66: - break; - case 11: { + case 441: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 67: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 442: break; + case MLC2: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_MLC2); return firstToken; } - case 68: - break; + case 443: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case COMPILER_DIRECTIVE: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_COMPILER_DIRECTIVE); - return firstToken; - } - case 438: - break; - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 439: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 440: - break; - case COMPILER_DIRECTIVE2: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_COMPILER_DIRECTIVE2); - return firstToken; - } - case 441: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 442: - break; - case MLC2: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_MLC2); - return firstToken; - } - case 443: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex old mode 100644 new mode 100755 similarity index 55% rename from tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex rename to tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex index f898d5835..9ce0dfc1f --- a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.flex @@ -1,24 +1,8 @@ /* - * 11/07/2008 + * 11/24/2015 * - * PlainTextTokenMaker.flex - Scanner for plain text files. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,13 +13,13 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Scanner for plain text files. + * Scanner for Dockerfiles.

                * * This implementation was created using * JFlex 1.4.1; however, the generated file * was modified for performance. Memory allocation needs to be almost * completely removed to be competitive with the handwritten lexers (subclasses - * of AbstractTokenMaker), so this class has been modified so that + * of AbstractTokenMaker, so this class has been modified so that * Strings are never allocated (via yytext()), and the scanner never has to * worry about refilling its buffer (needlessly copying chars around). * We can achieve this because RText always scans exactly 1 line of tokens at a @@ -49,8 +33,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

                  - *
                • The generated PlainTextTokenMaker.java file will contain - * two definitions of both zzRefill and yyreset. + *
                • The generated DockerTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input * buffer, which we'll never have to do.
                • @@ -69,9 +53,10 @@ import org.fife.ui.rsyntaxtextarea.*; %% %public -%class PlainTextTokenMaker +%class DockerTokenMaker %extends AbstractJFlexTokenMaker %unicode +%ignorecase %type org.fife.ui.rsyntaxtextarea.Token @@ -82,7 +67,7 @@ import org.fife.ui.rsyntaxtextarea.*; * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ - public PlainTextTokenMaker() { + public DockerTokenMaker() { } @@ -90,51 +75,60 @@ import org.fife.ui.rsyntaxtextarea.*; * Adds the token specified to the current linked list of tokens. * * @param tokenType The token's type. - * @param link Whether this token is a hyperlink. */ - private void addToken(int tokenType, boolean link) { - int so = zzStartRead + offsetShift; - super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); - zzStartRead = zzMarkedPos; + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); } /** - * Always returns Token.NULL, as there are no multiline - * tokens in properties files. + * Adds the token specified to the current linked list of tokens. * - * @param text The line of tokens to examine. - * @param initialTokenType The token type to start with (i.e., the value - * of getLastTokenTypeOnLine for the line before - * text). - * @return Token.NULL. + * @param tokenType The token's type. */ - public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { - return Token.NULL; + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); } /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. + * Adds the token specified to the current linked list of tokens. * - * @return null, as there are no comments in plain text. + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. */ - public String[] getLineCommentStartAndEnd() { - return null; + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; } /** - * Always returns false, as you never want "mark occurrences" - * working in plain text files. + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. * * @param type The token type. * @return Whether tokens of this type should have "mark occurrences" * enabled. */ + @Override public boolean getMarkOccurrencesOfTokenType(int type) { - return false; + return type==Token.IDENTIFIER || type==Token.RESERVED_WORD; } @@ -156,14 +150,16 @@ import org.fife.ui.rsyntaxtextarea.*; this.offsetShift = -text.offset + startOffset; // Start off in the proper state. + int state = TokenTypes.NULL; + s = text; try { yyreset(zzReader); - yybegin(YYINITIAL); + yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -174,9 +170,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -191,7 +186,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -213,28 +208,75 @@ import org.fife.ui.rsyntaxtextarea.*; %} -LetterOrDigit = ([a-zA-Z0-9]) -Identifier = ({LetterOrDigit}+) -Separator = ([^a-zA-Z0-9 \t\n]) -WhiteSpace = ([ \t]+) -LineTerminator = ([\n]) +Letter = [A-Za-z] +Digit = [0-9] +IdentifierPart = ({Letter}|{Digit}|[_\-\.]) +Identifier = ({IdentifierPart}|{IdentifierPart}*) +WhiteSpace = ([ \t\f]) -URLGenDelim = ([:\/\?#\[\]@]) -URLSubDelim = ([\!\$&'\(\)\*\+,;=]) -URLUnreserved = ([a-zA-Z0-9\-\.\~]) -URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) -URLCharacters = ({URLCharacter}*) -URLEndCharacter = ([\/\$]|{LetterOrDigit}) -URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) +%state STRING +%state CHAR_LITERAL %% { - {URL} { addToken(Token.IDENTIFIER, true); } - {Identifier} { addToken(Token.IDENTIFIER, false); } - {Separator} { addToken(Token.IDENTIFIER, false); } - {WhiteSpace} { addToken(Token.WHITESPACE, false); } - {LineTerminator} { addNullToken(); return firstToken; } - <> { addNullToken(); return firstToken; } - . { /* Never happens */ addToken(Token.IDENTIFIER, false); } + + /* Keywords */ + "maintainer" | + "from" | + "onbuild" | + "run" | + "expose" | + "env" | + "add" | + "copy" | + "volume" | + "user" | + "workdir" | + "cmd" | + "entrypoint" | + "label" | + "arg" | + "stopsignal" { addToken(Token.RESERVED_WORD); } + + {Identifier} { addToken(Token.IDENTIFIER); } + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + "[" | + "]" { addToken(Token.SEPARATOR); } + + "|" | + ">" | + ">>" { addToken(Token.OPERATOR); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + + /* Comment literals. */ + "#".* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + + /* Ended with a line not in a string or comment. */ + "\n" | + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters. */ + . { addToken(Token.IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped single quotes only, but this should still work. */ } + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java new file mode 100755 index 000000000..ba09eaf65 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DockerTokenMaker.java @@ -0,0 +1,764 @@ +/* The following code was generated by JFlex 1.4.1 on 11/25/15 12:02 AM */ + +/* + * 11/24/2015 + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for Dockerfiles.

                  + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                  + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                  + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                    + *
                  • The generated DockerTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                  • + *
                  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                  • + *
                  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                  • + *
                  + * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class DockerTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int CHAR_LITERAL = 2; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\37\1\0\1\2\23\0\1\2\1\0\1\34\1\36"+ + "\3\0\1\35\5\0\2\1\1\0\12\1\4\0\1\33\2\0\1\4"+ + "\1\14\1\24\1\17\1\10\1\12\1\30\1\1\1\5\1\1\1\27"+ + "\1\16\1\3\1\6\1\13\1\21\1\1\1\11\1\22\1\7\1\15"+ + "\1\23\1\26\1\20\1\25\1\1\1\31\1\40\1\31\1\0\1\1"+ + "\1\0\1\4\1\14\1\24\1\17\1\10\1\12\1\30\1\1\1\5"+ + "\1\1\1\27\1\16\1\3\1\6\1\13\1\21\1\1\1\11\1\22"+ + "\1\7\1\15\1\23\1\26\1\20\1\25\1\1\1\0\1\32\uff83\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\1\2\0\2\1\1\2\14\1\1\3\2\4\1\5"+ + "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\11"+ + "\1\15\1\16\1\17\16\1\1\14\1\17\1\1\1\20"+ + "\41\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[84]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\41\0\102\0\143\0\204\0\245\0\306\0\347"+ + "\0\u0108\0\u0129\0\u014a\0\u016b\0\u018c\0\u01ad\0\u01ce\0\u01ef"+ + "\0\u0210\0\u0231\0\143\0\143\0\u0252\0\143\0\143\0\u0273"+ + "\0\143\0\u0294\0\143\0\143\0\u02b5\0\u02d6\0\143\0\143"+ + "\0\u02f7\0\u0318\0\u0339\0\u035a\0\u037b\0\u039c\0\u03bd\0\u03de"+ + "\0\u03ff\0\u0420\0\u0441\0\u0462\0\u0483\0\u04a4\0\u04c5\0\143"+ + "\0\143\0\u04e6\0\204\0\u0507\0\u0528\0\u0549\0\u056a\0\u058b"+ + "\0\u05ac\0\u05cd\0\u05ee\0\u060f\0\u0630\0\u0651\0\u0672\0\u0693"+ + "\0\u06b4\0\u06d5\0\u06f6\0\u0717\0\u0738\0\u0759\0\u077a\0\u079b"+ + "\0\u07bc\0\u07dd\0\u07fe\0\u081f\0\u0840\0\u0861\0\u0882\0\u08a3"+ + "\0\u08c4\0\u08e5\0\u0906\0\u0927"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[84]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\3\5\1\11\1\12"+ + "\1\13\1\14\1\5\1\15\1\16\3\5\1\17\1\20"+ + "\1\21\1\5\1\22\2\5\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\31\1\4\34\32\1\33\2\32\1\34"+ + "\1\35\35\36\1\37\1\36\1\40\1\41\42\0\1\5"+ + "\1\0\26\5\12\0\1\6\37\0\1\5\1\0\1\5"+ + "\1\42\24\5\11\0\1\5\1\0\6\5\1\43\5\5"+ + "\1\44\11\5\11\0\1\5\1\0\3\5\1\45\11\5"+ + "\1\46\10\5\11\0\1\5\1\0\12\5\1\47\13\5"+ + "\11\0\1\5\1\0\6\5\1\50\17\5\11\0\1\5"+ + "\1\0\3\5\1\51\22\5\11\0\1\5\1\0\17\5"+ + "\1\52\6\5\11\0\1\5\1\0\1\5\1\53\24\5"+ + "\11\0\1\5\1\0\4\5\1\54\21\5\11\0\1\5"+ + "\1\0\10\5\1\55\15\5\11\0\1\5\1\0\1\44"+ + "\7\5\1\56\15\5\11\0\1\5\1\0\10\5\1\57"+ + "\15\5\43\0\1\24\5\0\37\30\1\0\1\30\34\32"+ + "\1\0\2\32\2\0\37\60\1\0\1\60\35\36\1\0"+ + "\1\36\2\0\37\61\1\0\1\61\1\0\1\5\1\0"+ + "\2\5\1\62\23\5\11\0\1\5\1\0\25\5\1\63"+ + "\11\0\1\5\1\0\14\5\1\63\11\5\11\0\1\5"+ + "\1\0\4\5\1\64\13\5\1\63\5\5\11\0\1\5"+ + "\1\0\16\5\1\65\7\5\11\0\1\5\1\0\3\5"+ + "\1\63\22\5\11\0\1\5\1\0\10\5\1\66\15\5"+ + "\11\0\1\5\1\0\11\5\1\67\14\5\11\0\1\5"+ + "\1\0\5\5\1\70\20\5\11\0\1\5\1\0\11\5"+ + "\1\71\14\5\11\0\1\5\1\0\10\5\1\72\15\5"+ + "\11\0\1\5\1\0\13\5\1\73\12\5\11\0\1\5"+ + "\1\0\16\5\1\74\7\5\11\0\1\5\1\0\6\5"+ + "\1\75\17\5\11\0\1\5\1\0\3\5\1\76\22\5"+ + "\11\0\1\5\1\0\6\5\1\77\17\5\11\0\1\5"+ + "\1\0\10\5\1\100\15\5\11\0\1\5\1\0\1\63"+ + "\25\5\11\0\1\5\1\0\12\5\1\101\13\5\11\0"+ + "\1\5\1\0\6\5\1\63\17\5\11\0\1\5\1\0"+ + "\5\5\1\102\20\5\11\0\1\5\1\0\16\5\1\103"+ + "\7\5\11\0\1\5\1\0\12\5\1\104\13\5\11\0"+ + "\1\5\1\0\22\5\1\63\3\5\11\0\1\5\1\0"+ + "\24\5\1\105\1\5\11\0\1\5\1\0\4\5\1\106"+ + "\21\5\11\0\1\5\1\0\22\5\1\107\3\5\11\0"+ + "\1\5\1\0\17\5\1\110\6\5\11\0\1\5\1\0"+ + "\2\5\1\111\23\5\11\0\1\5\1\0\13\5\1\63"+ + "\12\5\11\0\1\5\1\0\17\5\1\112\6\5\11\0"+ + "\1\5\1\0\1\110\25\5\11\0\1\5\1\0\14\5"+ + "\1\113\11\5\11\0\1\5\1\0\1\5\1\114\24\5"+ + "\11\0\1\5\1\0\16\5\1\115\7\5\11\0\1\5"+ + "\1\0\5\5\1\63\20\5\11\0\1\5\1\0\13\5"+ + "\1\44\12\5\11\0\1\5\1\0\2\5\1\116\23\5"+ + "\11\0\1\5\1\0\2\5\1\70\23\5\11\0\1\5"+ + "\1\0\2\5\1\117\23\5\11\0\1\5\1\0\10\5"+ + "\1\120\15\5\11\0\1\5\1\0\25\5\1\121\11\0"+ + "\1\5\1\0\3\5\1\52\22\5\11\0\1\5\1\0"+ + "\2\5\1\122\23\5\11\0\1\5\1\0\3\5\1\123"+ + "\22\5\11\0\1\5\1\0\3\5\1\124\22\5\11\0"+ + "\1\5\1\0\1\5\1\102\24\5\11\0\1\5\1\0"+ + "\4\5\1\63\21\5\10\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2376]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\1\2\0\1\11\16\1\2\11\1\1\2\11\1\1"+ + "\1\11\1\1\2\11\2\1\2\11\17\1\2\11\43\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[84]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DockerTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = TokenTypes.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DockerTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DockerTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 160) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 16: + { addToken(Token.RESERVED_WORD); + } + case 17: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 18: break; + case 7: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 19: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 20: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 21: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 22: break; + case 12: + { /* Skip escaped chars. */ + } + case 23: break; + case 4: + { addToken(Token.OPERATOR); + } + case 24: break; + case 15: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 25: break; + case 5: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 26: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 27: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 28: break; + case 8: + { addNullToken(); return firstToken; + } + case 29: break; + case 9: + { + } + case 30: break; + case 3: + { addToken(Token.SEPARATOR); + } + case 31: break; + case 6: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 32: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 85: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 86: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 87: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex new file mode 100755 index 000000000..00373c94d --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.flex @@ -0,0 +1,347 @@ +/* + * 04/12/2012 + * + * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for DTD files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                  + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                  + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                    + *
                  • The generated XMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                  • + *
                  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                  • + *
                  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                  • + *
                  + * + * @author Robert Futrell + * @version 1.0 + */ +%% + +%public +%class DtdTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG_START = -1; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ELEMENT = -2; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed, locally-defined DTD in a DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ATTLIST = -3; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed comment. The state to return to when this comment ends is + * embedded in the token type as well. + */ + public static final int INTERNAL_IN_COMMENT = -(1<<11); + + /** + * The state we were in prior to the current one. This is used to know + * what state to resume after an MLC ends. + */ + private int prevState; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DtdTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + prevState = YYINITIAL; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_INTAG_START: + state = INTAG_START; + break; + case INTERNAL_INTAG_ELEMENT: + state = INTAG_ELEMENT; + break; + case INTERNAL_INTAG_ATTLIST: + state = INTAG_ATTLIST; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_COMMENT: + state = COMMENT; + break; + } + prevState = -initialTokenType&0xff; + } + else { // Shouldn't happen + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]) +LineTerminator = ([\n]) +UnclosedString = ([\"][^\"]*) +UnclosedChar = ([\'][^\']*) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z_0-9\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state COMMENT +%state INTAG_START +%state INTAG_ELEMENT +%state INTAG_ATTLIST + +%% + + { + ([^ \t\f<]+) { /* Not really valid */ addToken(Token.IDENTIFIER); } + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; } +} + + { + ("ELEMENT") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); } + ("ATTLIST") { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); } + ([^ \t\f>]+) { addToken(Token.IDENTIFIER); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_START); return firstToken; } +} + + { + ([^ \t\f>]+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; } +} + + { + ("CDATA"|"#IMPLIED"|"#REQUIRED") { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); } + ([^ \t\f>\"\']+) { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + ({UnclosedString}[\"]?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + ({UnclosedChar}[\']?) { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + (">") { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + <> { addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java new file mode 100755 index 000000000..21c71a7bd --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/DtdTokenMaker.java @@ -0,0 +1,835 @@ +/* The following code was generated by JFlex 1.4.1 on 7/9/16 6:48 PM */ + +/* + * 04/12/2012 + * + * DtdTokenMaker.java - Generates tokens for DTD syntax highlighting. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * Scanner for DTD files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                  + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                  + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                    + *
                  • The generated XMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                  • + *
                  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                  • + *
                  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                  • + *
                  + * + * @author Robert Futrell + * @version 1.0 + */ + +public class DtdTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INTAG_START = 2; + public static final int INTAG_ELEMENT = 3; + public static final int YYINITIAL = 0; + public static final int INTAG_ATTLIST = 4; + public static final int COMMENT = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\1\1\2\1\0\1\1\23\0\1\1\1\24\1\3\1\41"+ + "\1\7\1\5\1\5\1\4\5\5\1\25\1\22\1\6\12\7\1\20"+ + "\1\5\1\23\1\5\1\26\2\5\1\34\1\7\1\37\1\40\1\27"+ + "\3\7\1\35\2\7\1\30\1\31\1\32\1\7\1\42\1\44\1\43"+ + "\1\36\1\33\1\45\5\7\1\5\1\0\1\5\1\0\1\5\1\0"+ + "\4\7\1\17\1\14\1\7\1\10\1\15\2\7\1\16\3\7\1\12"+ + "\2\7\1\13\1\11\2\7\1\21\3\7\3\0\1\5\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\1\1\1\2\1\3\1\4\1\5\4\4\1\3"+ + "\1\6\2\3\2\7\2\10\2\7\1\11\5\0\2\3"+ + "\1\10\3\7\5\0\1\12\2\3\3\7\1\13\2\0"+ + "\1\14\2\3\3\7\2\0\2\3\1\15\2\7\2\3"+ + "\2\7\1\16\1\17\1\7"; + + private static int [] zzUnpackAction() { + int [] result = new int[70]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\46\0\114\0\162\0\230\0\276\0\344\0\u010a"+ + "\0\u0130\0\u0156\0\u017c\0\u01a2\0\u01c8\0\u01ee\0\u0214\0\u0156"+ + "\0\u023a\0\u0260\0\u0286\0\u02ac\0\u02d2\0\u02f8\0\u031e\0\u0344"+ + "\0\u036a\0\u0390\0\u03b6\0\u03dc\0\u0402\0\u0428\0\u044e\0\u0474"+ + "\0\u0156\0\u049a\0\u04c0\0\u04e6\0\u050c\0\u0532\0\u0558\0\u057e"+ + "\0\u05a4\0\u0156\0\u05ca\0\u05f0\0\u0616\0\u063c\0\u0662\0\u0156"+ + "\0\u0688\0\u06ae\0\u06d4\0\u06fa\0\u0720\0\u0746\0\u076c\0\u0792"+ + "\0\u07b8\0\u06d4\0\u07de\0\u0804\0\u02ac\0\u082a\0\u0850\0\u0876"+ + "\0\u089c\0\u08c2\0\u08e8\0\u0214\0\u0214\0\u090e"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[70]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\21\6\1\10\22\6\2\11\1\12\5\11"+ + "\1\13\3\11\1\14\4\11\1\15\3\11\1\16\20\11"+ + "\1\17\1\7\24\17\1\20\1\21\4\17\1\22\11\17"+ + "\1\23\1\7\24\23\1\20\17\23\1\24\1\7\1\24"+ + "\1\25\1\26\21\24\1\20\10\24\1\27\1\24\1\30"+ + "\4\24\1\6\1\0\21\6\1\0\22\6\1\0\1\7"+ + "\70\0\1\31\21\0\2\11\1\0\5\11\1\0\3\11"+ + "\1\0\4\11\1\0\3\11\1\0\20\11\57\0\1\32"+ + "\45\0\1\33\3\0\1\34\51\0\1\35\51\0\1\36"+ + "\20\0\1\17\1\0\24\17\1\0\20\17\1\0\24\17"+ + "\1\0\1\17\1\37\16\17\1\0\24\17\1\0\4\17"+ + "\1\40\12\17\1\23\1\0\24\23\1\0\17\23\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\17\24\3\25\1\41"+ + "\42\25\4\26\1\41\41\26\1\24\1\0\1\24\2\0"+ + "\21\24\1\0\11\24\1\42\6\24\1\0\1\24\2\0"+ + "\21\24\1\0\6\24\1\43\5\24\1\44\2\24\25\0"+ + "\1\45\31\0\1\46\46\0\1\47\51\0\1\50\50\0"+ + "\1\51\52\0\1\52\17\0\1\17\1\0\24\17\1\0"+ + "\1\53\17\17\1\0\24\17\1\0\4\17\1\54\12\17"+ + "\1\24\1\0\1\24\2\0\21\24\1\0\5\24\1\55"+ + "\12\24\1\0\1\24\2\0\21\24\1\0\2\24\1\56"+ + "\15\24\1\0\1\24\2\0\21\24\1\0\1\57\16\24"+ + "\25\0\1\60\32\0\1\61\53\0\1\62\44\0\1\47"+ + "\50\0\1\63\23\0\1\17\1\0\24\17\1\0\2\17"+ + "\1\64\15\17\1\0\24\17\1\0\1\17\1\65\15\17"+ + "\1\24\1\0\1\24\2\0\21\24\1\0\4\24\1\66"+ + "\13\24\1\0\1\24\2\0\21\24\1\0\13\24\1\67"+ + "\4\24\1\0\1\24\2\0\21\24\1\0\15\24\1\70"+ + "\1\24\13\0\1\47\4\0\1\62\33\0\1\71\43\0"+ + "\2\72\12\63\1\72\1\63\1\72\1\0\2\72\1\0"+ + "\12\63\1\72\4\63\1\17\1\0\24\17\1\0\1\73"+ + "\17\17\1\0\24\17\1\0\6\17\1\74\10\17\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\5\24\1\75\12\24"+ + "\1\0\1\24\2\0\21\24\1\0\1\24\1\76\16\24"+ + "\1\0\1\24\2\0\21\24\1\0\16\24\1\77\6\0"+ + "\1\63\37\0\1\17\1\0\24\17\1\0\3\17\1\100"+ + "\14\17\1\0\24\17\1\0\7\17\1\101\7\17\1\24"+ + "\1\0\1\24\2\0\21\24\1\0\6\24\1\102\11\24"+ + "\1\0\1\24\2\0\21\24\1\0\6\24\1\103\10\24"+ + "\1\17\1\0\24\17\1\0\4\17\1\104\13\17\1\0"+ + "\24\17\1\0\4\17\1\105\12\17\1\24\1\0\1\24"+ + "\2\0\21\24\1\0\1\106\17\24\1\0\1\24\2\0"+ + "\21\24\1\0\14\24\1\102\3\24\1\0\1\24\2\0"+ + "\21\24\1\0\11\24\1\75\5\24"; + + private static int [] zzUnpackTrans() { + int [] result = new int[2356]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\4\1\1\11\5\1\1\11\11\1\5\0\2\1"+ + "\1\11\3\1\5\0\1\11\5\1\1\11\2\0\6\1"+ + "\2\0\14\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[70]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG_START = -1; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ELEMENT = -2; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed, locally-defined DTD in a DOCTYPE element. + */ + public static final int INTERNAL_INTAG_ATTLIST = -3; + + /** + * Token type specific to XMLTokenMaker denoting a line ending with an + * unclosed comment. The state to return to when this comment ends is + * embedded in the token type as well. + */ + public static final int INTERNAL_IN_COMMENT = -(1<<11); + + /** + * The state we were in prior to the current one. This is used to know + * what state to resume after an MLC ends. + */ + private int prevState; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public DtdTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + prevState = YYINITIAL; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_INTAG_START: + state = INTAG_START; + break; + case INTERNAL_INTAG_ELEMENT: + state = INTAG_ELEMENT; + break; + case INTERNAL_INTAG_ATTLIST: + state = INTAG_ATTLIST; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_COMMENT: + state = COMMENT; + break; + } + prevState = -initialTokenType&0xff; + } + else { // Shouldn't happen + state = YYINITIAL; + } + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public DtdTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public DtdTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 138) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { addToken(Token.IDENTIFIER); + } + case 16: break; + case 2: + { addToken(Token.WHITESPACE); + } + case 17: break; + case 1: + { /* Not really valid */ addToken(Token.IDENTIFIER); + } + case 18: break; + case 12: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 19: break; + case 9: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG_START); + } + case 20: break; + case 6: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 21: break; + case 10: + { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); + } + case 22: break; + case 11: + { start = zzStartRead; prevState = zzLexicalState; yybegin(COMMENT); + } + case 23: break; + case 7: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 24: break; + case 15: + { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ATTLIST); + } + case 25: break; + case 14: + { addToken(Token.MARKUP_TAG_NAME); yybegin(INTAG_ELEMENT); + } + case 26: break; + case 13: + { addToken(Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 27: break; + case 4: + { + } + case 28: break; + case 5: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; + } + case 29: break; + case 8: + { addToken(Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 30: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INTAG_START: { + addEndToken(INTERNAL_INTAG_START); return firstToken; + } + case 71: break; + case INTAG_ELEMENT: { + addEndToken(INTERNAL_INTAG_ELEMENT); return firstToken; + } + case 72: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 73: break; + case INTAG_ATTLIST: { + addEndToken(INTERNAL_INTAG_ATTLIST); return firstToken; + } + case 74: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_COMMENT - prevState); return firstToken; + } + case 75: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex old mode 100644 new mode 100755 index 5a8500830..b1429634a --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.flex @@ -2,23 +2,9 @@ * 03/23/2005 * * FortranTokenMaker.java - Scanner for the Fortran programming language. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                    - *
                  • The generated FortranTokenMaker.java file will contain two + *
                  • The generated FortranTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -71,7 +57,6 @@ import org.fife.ui.rsyntaxtextarea.*; %public %class FortranTokenMaker %extends AbstractJFlexTokenMaker -%implements TokenMaker %unicode %ignorecase %type org.fife.ui.rsyntaxtextarea.Token @@ -120,6 +105,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -127,13 +113,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "!", null }; } @@ -177,7 +160,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -188,9 +171,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -205,7 +187,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java old mode 100644 new mode 100755 index babb1445c..cf5f0b8cc --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/FortranTokenMaker.java @@ -4,23 +4,9 @@ * 03/23/2005 * * FortranTokenMaker.java - Scanner for the Fortran programming language. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1004 +15,996 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * Scanner for the Fortran programming language. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                    - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                    - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                    + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                    + * * If you wish to regenerate this file yourself, keep in mind the following: *

                      - *
                    • The generated FortranTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                    • - *
                    • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                    • - *
                    • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                    • + *
                    • The generated FortranTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                    • + *
                    • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                    • + *
                    • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                    • *
                    - * + * * @author Robert Futrell * @version 0.4 - * + * */ -public class FortranTokenMaker extends AbstractJFlexTokenMaker implements TokenMaker { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int STRING = 1; - public static final int YYINITIAL = 0; - public static final int CHAR = 2; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\2\1\1\1\0\1\2\23\0\1\2\1\5\1\10\1\0" + - "\1\6\1\0\1\14\1\11\2\0\1\3\3\0\1\16\1\15\1\45" + - "\1\50\1\51\7\6\2\0\1\12\1\13\1\12\2\0\1\25\1\37" + - "\1\7\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17" + - "\1\36\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6" + - "\1\44\1\40\1\43\1\47\4\0\1\6\1\0\1\25\1\37\1\34" + - "\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17\1\36" + - "\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6\1\44" + - "\1\40\1\43\1\47\uff85\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7" + - "\1\2\1\5\1\10\1\11\1\12\1\2\1\12\24\2" + - "\1\1\1\13\1\14\1\1\1\15\1\16\7\2\1\17" + - "\20\2\7\0\41\2\1\17\27\2\1\17\10\2\1\17" + - "\3\2\4\0\2\17\3\2\2\17\20\2\1\17\10\2" + - "\2\17\3\2\1\17\2\2\1\17\6\2\1\17\2\0" + - "\3\2\1\17\4\2\1\17\26\2\1\0\20\2\1\20" + - "\12\2\1\17"; - - private static int[] zzUnpackAction() { - int[] result = new int[257]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; +public class FortranTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int YYINITIAL = 0; + public static final int CHAR = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\1\0\1\2\23\0\1\2\1\5\1\10\1\0"+ + "\1\6\1\0\1\14\1\11\2\0\1\3\3\0\1\16\1\15\1\45"+ + "\1\50\1\51\7\6\2\0\1\12\1\13\1\12\2\0\1\25\1\37"+ + "\1\7\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17"+ + "\1\36\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6"+ + "\1\44\1\40\1\43\1\47\4\0\1\6\1\0\1\25\1\37\1\34"+ + "\1\4\1\22\1\31\1\21\1\41\1\33\1\46\1\42\1\17\1\36"+ + "\1\24\1\26\1\35\1\23\1\27\1\32\1\20\1\30\1\6\1\44"+ + "\1\40\1\43\1\47\uff85\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\2\1\1\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\2\1\5\1\10\1\11\1\12\1\2\1\12\24\2"+ + "\1\1\1\13\1\14\1\1\1\15\1\16\7\2\1\17"+ + "\20\2\7\0\41\2\1\17\27\2\1\17\10\2\1\17"+ + "\3\2\4\0\2\17\3\2\2\17\20\2\1\17\10\2"+ + "\2\17\3\2\1\17\2\2\1\17\6\2\1\17\2\0"+ + "\3\2\1\17\4\2\1\17\26\2\1\0\20\2\1\20"+ + "\12\2\1\17"; + + private static int [] zzUnpackAction() { + int [] result = new int[257]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\52\0\124\0\176\0\176\0\250\0\176\0\322"+ + "\0\176\0\374\0\u0126\0\176\0\176\0\u0150\0\u0150\0\176"+ + "\0\u017a\0\u01a4\0\u01ce\0\u01f8\0\u0222\0\u024c\0\u0276\0\u02a0"+ + "\0\u02ca\0\u02f4\0\u031e\0\u0348\0\u0372\0\u0126\0\u039c\0\u03c6"+ + "\0\u03f0\0\u041a\0\u0444\0\u046e\0\u0498\0\176\0\176\0\u04c2"+ + "\0\176\0\176\0\u04ec\0\u0516\0\u0540\0\u056a\0\u0594\0\u05be"+ + "\0\u05e8\0\u0612\0\u063c\0\u0666\0\u0690\0\u06ba\0\u06e4\0\u070e"+ + "\0\u0738\0\u0762\0\u078c\0\u07b6\0\u07e0\0\u080a\0\u0834\0\u085e"+ + "\0\u0888\0\u08b2\0\u08dc\0\u0906\0\u0930\0\u095a\0\u0984\0\u09ae"+ + "\0\u09d8\0\u0a02\0\u0a2c\0\u0a56\0\u0a80\0\u0aaa\0\u0ad4\0\u0afe"+ + "\0\u0b28\0\u0b52\0\u0b7c\0\u0ba6\0\u0bd0\0\u0bfa\0\u0c24\0\u0c4e"+ + "\0\u0c78\0\u0ca2\0\u0ccc\0\u0cf6\0\u0d20\0\u0d4a\0\u0d74\0\u0d9e"+ + "\0\u0dc8\0\u0df2\0\u0e1c\0\u0e46\0\u0e70\0\u0e9a\0\u0ec4\0\u0eee"+ + "\0\u0f18\0\u0f42\0\u0f6c\0\u0f96\0\u0fc0\0\u0fea\0\u1014\0\u103e"+ + "\0\u1068\0\u1092\0\u10bc\0\u10e6\0\u1110\0\u113a\0\u1164\0\u118e"+ + "\0\u11b8\0\u11e2\0\u120c\0\u1236\0\u1260\0\u128a\0\u12b4\0\u12de"+ + "\0\u1308\0\u1332\0\u135c\0\u1386\0\u13b0\0\u13da\0\u1404\0\u142e"+ + "\0\u1458\0\u1482\0\u14ac\0\u14d6\0\u1500\0\u152a\0\u1554\0\u157e"+ + "\0\u15a8\0\u15d2\0\u15fc\0\374\0\u1626\0\u1650\0\u167a\0\u16a4"+ + "\0\u16ce\0\u16f8\0\u1722\0\u174c\0\u1776\0\u17a0\0\u17ca\0\u17f4"+ + "\0\u181e\0\u1848\0\u1872\0\u189c\0\u18c6\0\u18f0\0\u191a\0\u1944"+ + "\0\u196e\0\u1998\0\u19c2\0\u19ec\0\u1a16\0\u1a40\0\u1a6a\0\u16f8"+ + "\0\u1a94\0\u1abe\0\u1ae8\0\u1b12\0\u1b3c\0\u1b66\0\u1b90\0\u1bba"+ + "\0\u1be4\0\u1c0e\0\u1c38\0\u174c\0\u1c62\0\u1c8c\0\u1cb6\0\u1ce0"+ + "\0\u1d0a\0\u1d34\0\u1d5e\0\u1d88\0\u1db2\0\u1ddc\0\u1e06\0\u1e30"+ + "\0\u1e5a\0\u1e84\0\u1eae\0\u1ed8\0\u1f02\0\u1f2c\0\u1b12\0\u1f56"+ + "\0\u1f80\0\u1faa\0\u1fd4\0\u1ffe\0\u2028\0\u2052\0\u207c\0\u20a6"+ + "\0\u20d0\0\u20fa\0\u2124\0\u214e\0\u2178\0\u21a2\0\u21cc\0\u21f6"+ + "\0\u2220\0\u224a\0\u2274\0\u229e\0\u22c8\0\u22f2\0\u231c\0\u2346"+ + "\0\u2370\0\u239a\0\u23c4\0\u23ee\0\u2418\0\u2442\0\u246c\0\u2496"+ + "\0\u24c0\0\u24ea\0\u2514\0\u253e\0\u2568\0\176\0\u2592\0\u25bc"+ + "\0\u25e6\0\u2610\0\u263a\0\u2664\0\u268e\0\u26b8\0\u26e2\0\u270c"+ + "\0\u13da"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[257]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\52\0\124\0\176\0\176\0\250\0\176\0\322" + - "\0\176\0\374\0\u0126\0\176\0\176\0\u0150\0\u0150\0\176" + - "\0\u017a\0\u01a4\0\u01ce\0\u01f8\0\u0222\0\u024c\0\u0276\0\u02a0" + - "\0\u02ca\0\u02f4\0\u031e\0\u0348\0\u0372\0\u0126\0\u039c\0\u03c6" + - "\0\u03f0\0\u041a\0\u0444\0\u046e\0\u0498\0\176\0\176\0\u04c2" + - "\0\176\0\176\0\u04ec\0\u0516\0\u0540\0\u056a\0\u0594\0\u05be" + - "\0\u05e8\0\u0612\0\u063c\0\u0666\0\u0690\0\u06ba\0\u06e4\0\u070e" + - "\0\u0738\0\u0762\0\u078c\0\u07b6\0\u07e0\0\u080a\0\u0834\0\u085e" + - "\0\u0888\0\u08b2\0\u08dc\0\u0906\0\u0930\0\u095a\0\u0984\0\u09ae" + - "\0\u09d8\0\u0a02\0\u0a2c\0\u0a56\0\u0a80\0\u0aaa\0\u0ad4\0\u0afe" + - "\0\u0b28\0\u0b52\0\u0b7c\0\u0ba6\0\u0bd0\0\u0bfa\0\u0c24\0\u0c4e" + - "\0\u0c78\0\u0ca2\0\u0ccc\0\u0cf6\0\u0d20\0\u0d4a\0\u0d74\0\u0d9e" + - "\0\u0dc8\0\u0df2\0\u0e1c\0\u0e46\0\u0e70\0\u0e9a\0\u0ec4\0\u0eee" + - "\0\u0f18\0\u0f42\0\u0f6c\0\u0f96\0\u0fc0\0\u0fea\0\u1014\0\u103e" + - "\0\u1068\0\u1092\0\u10bc\0\u10e6\0\u1110\0\u113a\0\u1164\0\u118e" + - "\0\u11b8\0\u11e2\0\u120c\0\u1236\0\u1260\0\u128a\0\u12b4\0\u12de" + - "\0\u1308\0\u1332\0\u135c\0\u1386\0\u13b0\0\u13da\0\u1404\0\u142e" + - "\0\u1458\0\u1482\0\u14ac\0\u14d6\0\u1500\0\u152a\0\u1554\0\u157e" + - "\0\u15a8\0\u15d2\0\u15fc\0\374\0\u1626\0\u1650\0\u167a\0\u16a4" + - "\0\u16ce\0\u16f8\0\u1722\0\u174c\0\u1776\0\u17a0\0\u17ca\0\u17f4" + - "\0\u181e\0\u1848\0\u1872\0\u189c\0\u18c6\0\u18f0\0\u191a\0\u1944" + - "\0\u196e\0\u1998\0\u19c2\0\u19ec\0\u1a16\0\u1a40\0\u1a6a\0\u16f8" + - "\0\u1a94\0\u1abe\0\u1ae8\0\u1b12\0\u1b3c\0\u1b66\0\u1b90\0\u1bba" + - "\0\u1be4\0\u1c0e\0\u1c38\0\u174c\0\u1c62\0\u1c8c\0\u1cb6\0\u1ce0" + - "\0\u1d0a\0\u1d34\0\u1d5e\0\u1d88\0\u1db2\0\u1ddc\0\u1e06\0\u1e30" + - "\0\u1e5a\0\u1e84\0\u1eae\0\u1ed8\0\u1f02\0\u1f2c\0\u1b12\0\u1f56" + - "\0\u1f80\0\u1faa\0\u1fd4\0\u1ffe\0\u2028\0\u2052\0\u207c\0\u20a6" + - "\0\u20d0\0\u20fa\0\u2124\0\u214e\0\u2178\0\u21a2\0\u21cc\0\u21f6" + - "\0\u2220\0\u224a\0\u2274\0\u229e\0\u22c8\0\u22f2\0\u231c\0\u2346" + - "\0\u2370\0\u239a\0\u23c4\0\u23ee\0\u2418\0\u2442\0\u246c\0\u2496" + - "\0\u24c0\0\u24ea\0\u2514\0\u253e\0\u2568\0\176\0\u2592\0\u25bc" + - "\0\u25e6\0\u2610\0\u263a\0\u2664\0\u268e\0\u26b8\0\u26e2\0\u270c" + - "\0\u13da"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[257]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13"+ + "\1\14\1\15\1\16\1\17\1\20\1\17\1\21\1\22"+ + "\1\23\1\24\1\25\1\12\1\26\1\27\1\30\1\31"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\2\12\1\42\1\12\1\43\2\12\1\44\2\12\1\45"+ + "\1\46\6\45\1\47\41\45\1\50\1\51\7\50\1\52"+ + "\40\50\54\0\1\6\53\0\1\53\1\0\1\12\1\54"+ + "\7\0\1\55\1\56\1\12\1\57\1\12\1\60\1\61"+ + "\1\62\1\63\1\12\1\64\1\65\1\66\1\54\1\67"+ + "\1\70\1\71\12\12\4\0\1\12\1\0\2\12\7\0"+ + "\33\12\4\0\1\12\1\0\1\12\1\72\7\0\1\73"+ + "\2\12\1\74\2\12\1\75\1\76\3\12\1\77\1\12"+ + "\1\72\1\12\1\100\2\12\1\101\1\12\1\102\6\12"+ + "\13\0\1\20\55\0\1\103\1\104\1\103\1\105\1\0"+ + "\1\106\1\107\1\110\2\0\1\111\24\0\1\12\1\0"+ + "\2\12\7\0\1\112\1\12\1\112\1\113\3\12\1\114"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\6\12\1\115"+ + "\1\12\1\116\11\12\1\117\10\12\4\0\1\12\1\0"+ + "\2\12\7\0\7\12\1\120\23\12\4\0\1\12\1\0"+ + "\2\12\7\0\1\121\4\12\1\122\13\12\1\123\11\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\124\4\12"+ + "\1\125\16\12\4\0\1\12\1\0\1\12\1\72\7\0"+ + "\1\126\1\127\3\12\1\60\5\12\1\130\1\131\1\72"+ + "\1\12\1\132\1\133\12\12\4\0\1\12\1\0\2\12"+ + "\7\0\16\12\1\117\14\12\4\0\1\12\1\0\2\12"+ + "\7\0\3\12\1\134\27\12\4\0\1\12\1\0\2\12"+ + "\7\0\13\12\1\135\17\12\4\0\1\12\1\0\2\12"+ + "\7\0\1\136\6\12\1\137\1\12\1\140\21\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\141\1\12\1\142"+ + "\1\143\1\144\3\12\1\145\2\12\1\146\16\12\4\0"+ + "\1\147\1\0\1\12\1\150\7\0\5\12\1\151\1\152"+ + "\3\12\1\153\1\154\1\12\1\150\1\12\1\155\13\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\156\1\12"+ + "\1\157\22\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\160\1\161\4\12\1\162\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\6\12\1\163\24\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\164\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\10\12\1\165\11\12\1\166\10\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\167\27\12\1\45"+ + "\1\0\6\45\1\0\41\45\1\50\1\0\7\50\1\0"+ + "\40\50\4\0\1\12\1\0\2\12\7\0\14\12\1\170"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\7\12\1\171"+ + "\7\12\1\100\13\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\172\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\115\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\173\3\12\1\174\6\12\1\175\11\12\4\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\125\16\12\4\0"+ + "\1\12\1\0\1\12\1\72\7\0\1\12\1\176\11\12"+ + "\1\130\1\12\1\72\2\12\1\133\12\12\4\0\1\12"+ + "\1\0\2\12\7\0\11\12\1\177\21\12\4\0\1\12"+ + "\1\0\2\12\7\0\3\12\1\200\27\12\4\0\1\12"+ + "\1\0\2\12\7\0\1\201\32\12\4\0\1\12\1\0"+ + "\2\12\7\0\4\12\1\143\7\12\1\146\16\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\202\11\12\1\203"+ + "\13\12\4\0\1\12\1\0\2\12\7\0\10\12\1\204"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\6\12\1\205"+ + "\1\206\4\12\1\207\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\1\135\32\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\133\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\210\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\14\12\1\211\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\212\12\12\1\135\4\12\1\133\12\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\213\5\12\1\214\3\12"+ + "\1\215\13\12\4\0\1\12\1\0\2\12\7\0\4\12"+ + "\1\143\7\12\1\113\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\16\12\1\216\14\12\4\0\1\12\1\0\2\12"+ + "\7\0\6\12\1\217\24\12\4\0\1\12\1\0\1\12"+ + "\1\71\7\0\15\12\1\71\15\12\20\0\1\220\1\0"+ + "\1\220\56\0\1\221\45\0\1\220\50\0\1\220\53\0"+ + "\1\222\54\0\1\220\47\0\1\223\30\0\1\12\1\0"+ + "\2\12\7\0\1\12\1\224\1\12\1\224\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\224\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\2\12\1\225\30\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\214\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\6\12\1\226\24\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\113\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\227\31\12\4\0"+ + "\1\12\1\0\2\12\7\0\13\12\1\230\17\12\4\0"+ + "\1\231\1\0\2\12\7\0\33\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\202\1\12\1\232\14\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\135\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\202\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\233\6\12\1\172\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\234\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\113\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\5\12\1\202\11\12"+ + "\1\235\13\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\236\1\206\4\12\1\237\16\12\4\0\1\12\1\0"+ + "\2\12\7\0\13\12\1\224\17\12\4\0\1\12\1\0"+ + "\2\12\7\0\1\12\1\240\4\12\1\241\16\12\1\42"+ + "\5\12\4\0\1\12\1\0\2\12\7\0\3\12\1\224"+ + "\27\12\4\0\1\12\1\0\2\12\7\0\7\12\1\242"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\10\12\1\243"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\5\12\1\244"+ + "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\175"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\1\245\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\202\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\212\30\12"+ + "\4\0\1\12\1\0\2\12\7\0\20\12\1\246\12\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\113\2\12"+ + "\1\214\25\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\60\6\12\1\247\16\12\4\0\1\12\1\0\2\12"+ + "\7\0\22\12\1\250\10\12\4\0\1\251\1\0\1\12"+ + "\1\252\7\0\1\12\1\253\2\12\1\254\10\12\1\252"+ + "\15\12\4\0\1\12\1\0\2\12\7\0\20\12\1\133"+ + "\12\12\4\0\1\12\1\0\2\12\7\0\14\12\1\255"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\14\12\1\256"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\6\12\1\257"+ + "\7\12\1\260\14\12\4\0\1\12\1\0\2\12\7\0"+ + "\10\12\1\261\1\32\21\12\4\0\1\12\1\0\2\12"+ + "\7\0\3\12\1\262\3\12\1\263\4\12\1\125\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\21\12\1\264\11\12"+ + "\4\0\1\265\1\0\2\12\7\0\33\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\264\25\12\4\0\1\12"+ + "\1\0\1\12\1\266\7\0\15\12\1\266\15\12\4\0"+ + "\1\12\1\0\2\12\7\0\5\12\1\206\25\12\4\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\267\16\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\270\10\12\1\71"+ + "\16\12\4\0\1\12\1\0\2\12\7\0\21\12\1\202"+ + "\11\12\4\0\1\12\1\0\2\12\7\0\17\12\1\224"+ + "\13\12\4\0\1\12\1\0\2\12\7\0\13\12\1\214"+ + "\17\12\4\0\1\12\1\0\2\12\7\0\2\12\1\271"+ + "\30\12\4\0\1\12\1\0\2\12\7\0\1\272\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\273\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\16\12\1\224\14\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\274\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\20\12\1\71\12\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\212\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\275\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\12\1\224\31\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\276\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\206\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\21\12\1\277\11\12"+ + "\4\0\1\224\1\0\2\12\7\0\33\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\277\25\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\224\10\12\1\135\17\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\300\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\224\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\1\12\1\301\25\12\1\257\3\12"+ + "\4\0\1\12\1\0\2\12\7\0\22\12\1\224\10\12"+ + "\4\0\1\12\1\0\2\12\7\0\16\12\1\302\14\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\255\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\10\12\1\303\22\12\16\0"+ + "\1\20\63\0\1\304\25\0\1\220\64\0\1\305\36\0"+ + "\1\12\1\0\2\12\7\0\14\12\1\306\14\12\1\307"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\5\12\1\310"+ + "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\224"+ + "\23\12\4\0\1\12\1\0\2\12\7\0\3\12\1\311"+ + "\27\12\4\0\1\227\1\0\2\12\7\0\12\12\1\312"+ + "\1\12\1\313\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\314\32\12\4\0\1\12\1\0\2\12\7\0\7\12"+ + "\1\315\23\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\316\25\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\257\24\12\4\0\1\12\1\0\2\12\7\0\21\12"+ + "\1\317\11\12\4\0\1\12\1\0\2\12\7\0\5\12"+ + "\1\317\25\12\4\0\1\12\1\0\2\12\7\0\11\12"+ + "\1\320\21\12\4\0\1\224\1\0\2\12\7\0\1\224"+ + "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\202"+ + "\1\321\23\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\322\10\12\1\275\13\12\4\0\1\12\1\0\1\12"+ + "\1\323\7\0\15\12\1\323\15\12\4\0\1\12\1\0"+ + "\2\12\7\0\3\12\1\324\27\12\4\0\1\12\1\0"+ + "\2\12\7\0\10\12\1\325\22\12\4\0\1\12\1\0"+ + "\2\12\7\0\5\12\1\202\11\12\1\224\13\12\4\0"+ + "\1\12\1\0\2\12\7\0\6\12\1\321\24\12\4\0"+ + "\1\12\1\0\2\12\7\0\3\12\1\255\27\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\326\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\3\12\1\327\27\12\4\0\1\12"+ + "\1\0\2\12\7\0\11\12\1\330\21\12\4\0\1\12"+ + "\1\0\2\12\7\0\21\12\1\224\11\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\113\30\12\4\0\1\12"+ + "\1\0\2\12\7\0\2\12\1\224\30\12\4\0\1\12"+ + "\1\0\2\12\7\0\6\12\1\331\24\12\4\0\1\12"+ + "\1\0\1\12\1\332\7\0\15\12\1\332\15\12\4\0"+ + "\1\12\1\0\2\12\7\0\2\12\1\333\30\12\4\0"+ + "\1\12\1\0\2\12\7\0\26\12\1\224\2\12\1\224"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\11\12\1\334"+ + "\21\12\4\0\1\12\1\0\2\12\7\0\23\12\1\335"+ + "\7\12\4\0\1\12\1\0\2\12\7\0\1\12\1\135"+ + "\31\12\4\0\1\12\1\0\2\12\7\0\10\12\1\135"+ + "\22\12\4\0\1\12\1\0\2\12\7\0\31\12\1\307"+ + "\1\12\4\0\1\12\1\0\2\12\7\0\1\336\32\12"+ + "\4\0\1\12\1\0\2\12\7\0\11\12\1\337\21\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\202\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\5\12\1\340\25\12"+ + "\4\0\1\12\1\0\2\12\7\0\31\12\1\224\1\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\341\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\342\5\12"+ + "\1\343\16\12\4\0\1\12\1\0\2\12\7\0\1\251"+ + "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\344"+ + "\24\12\22\0\1\345\61\0\1\304\23\0\1\12\1\0"+ + "\1\12\1\200\7\0\15\12\1\200\15\12\4\0\1\12"+ + "\1\0\2\12\7\0\26\12\1\224\4\12\4\0\1\12"+ + "\1\0\2\12\7\0\13\12\1\346\17\12\4\0\1\12"+ + "\1\0\2\12\7\0\14\12\1\313\10\12\1\347\5\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\71\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\12\12\1\224\20\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\350\16\12"+ + "\4\0\1\12\1\0\1\12\1\351\7\0\15\12\1\351"+ + "\15\12\4\0\1\12\1\0\2\12\7\0\32\12\1\224"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\113\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\224\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\212\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\12\1\352\31\12\4\0"+ + "\1\12\1\0\1\12\1\202\7\0\15\12\1\202\15\12"+ + "\4\0\1\12\1\0\2\12\7\0\7\12\1\353\23\12"+ + "\4\0\1\12\1\0\2\12\7\0\11\12\1\354\21\12"+ + "\4\0\1\12\1\0\2\12\7\0\2\12\1\355\30\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\270\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\17\12\1\356\13\12"+ + "\4\0\1\12\1\0\2\12\7\0\14\12\1\340\16\12"+ + "\4\0\1\12\1\0\2\12\7\0\10\12\1\357\22\12"+ + "\4\0\1\12\1\0\2\12\7\0\1\360\32\12\4\0"+ + "\1\12\1\0\2\12\7\0\13\12\1\361\17\12\4\0"+ + "\1\12\1\0\2\12\7\0\7\12\1\362\23\12\4\0"+ + "\1\12\1\0\2\12\7\0\1\202\32\12\4\0\1\12"+ + "\1\0\2\12\7\0\13\12\1\352\17\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\257\25\12\4\0\1\12"+ + "\1\0\2\12\7\0\14\12\1\363\16\12\4\0\1\12"+ + "\1\0\2\12\7\0\5\12\1\364\25\12\4\0\1\12"+ + "\1\0\1\12\1\365\7\0\15\12\1\365\15\12\16\0"+ + "\1\366\37\0\1\12\1\0\2\12\7\0\12\12\1\355"+ + "\20\12\4\0\1\12\1\0\2\12\7\0\22\12\1\367"+ + "\10\12\4\0\1\12\1\0\1\12\1\370\7\0\15\12"+ + "\1\370\15\12\4\0\1\12\1\0\2\12\7\0\6\12"+ + "\1\371\24\12\4\0\1\12\1\0\2\12\7\0\14\12"+ + "\1\372\16\12\4\0\1\12\1\0\2\12\7\0\11\12"+ + "\1\373\21\12\4\0\1\135\1\0\2\12\7\0\33\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\321\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\365\27\12"+ + "\4\0\1\12\1\0\2\12\7\0\6\12\1\170\24\12"+ + "\4\0\1\12\1\0\2\12\7\0\3\12\1\224\3\12"+ + "\1\224\23\12\4\0\1\12\1\0\2\12\7\0\16\12"+ + "\1\374\14\12\4\0\1\12\1\0\1\12\1\375\7\0"+ + "\15\12\1\375\15\12\4\0\1\12\1\0\2\12\7\0"+ + "\5\12\1\133\25\12\4\0\1\12\1\0\2\12\7\0"+ + "\11\12\1\135\21\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\355\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\3\12\1\270\27\12\4\0\1\12\1\0\2\12\7\0"+ + "\14\12\1\202\16\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\376\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\7\12\1\113\23\12\4\0\1\12\1\0\2\12\7\0"+ + "\1\12\1\377\31\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\u0100\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\6\12\1\267\24\12\4\0\1\12\1\0\2\12\7\0"+ + "\3\12\1\u0101\2\12\1\177\24\12\4\0\1\12\1\0"+ + "\2\12\7\0\14\12\1\124\16\12\4\0\1\12\1\0"+ + "\1\12\1\135\7\0\15\12\1\135\15\12"; + + private static int [] zzUnpackTrans() { + int [] result = new int[10038]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\2\1\2\11\1\1\1\11\1\1\1\11\2\1"+ + "\2\11\2\1\1\11\25\1\2\11\1\1\2\11\30\1"+ + "\7\0\106\1\4\0\60\1\2\0\37\1\1\0\20\1"+ + "\1\11\13\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[257]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13" + - "\1\14\1\15\1\16\1\17\1\20\1\17\1\21\1\22" + - "\1\23\1\24\1\25\1\12\1\26\1\27\1\30\1\31" + - "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41" + - "\2\12\1\42\1\12\1\43\2\12\1\44\2\12\1\45" + - "\1\46\6\45\1\47\41\45\1\50\1\51\7\50\1\52" + - "\40\50\54\0\1\6\53\0\1\53\1\0\1\12\1\54" + - "\7\0\1\55\1\56\1\12\1\57\1\12\1\60\1\61" + - "\1\62\1\63\1\12\1\64\1\65\1\66\1\54\1\67" + - "\1\70\1\71\12\12\4\0\1\12\1\0\2\12\7\0" + - "\33\12\4\0\1\12\1\0\1\12\1\72\7\0\1\73" + - "\2\12\1\74\2\12\1\75\1\76\3\12\1\77\1\12" + - "\1\72\1\12\1\100\2\12\1\101\1\12\1\102\6\12" + - "\13\0\1\20\55\0\1\103\1\104\1\103\1\105\1\0" + - "\1\106\1\107\1\110\2\0\1\111\24\0\1\12\1\0" + - "\2\12\7\0\1\112\1\12\1\112\1\113\3\12\1\114" + - "\23\12\4\0\1\12\1\0\2\12\7\0\6\12\1\115" + - "\1\12\1\116\11\12\1\117\10\12\4\0\1\12\1\0" + - "\2\12\7\0\7\12\1\120\23\12\4\0\1\12\1\0" + - "\2\12\7\0\1\121\4\12\1\122\13\12\1\123\11\12" + - "\4\0\1\12\1\0\2\12\7\0\7\12\1\124\4\12" + - "\1\125\16\12\4\0\1\12\1\0\1\12\1\72\7\0" + - "\1\126\1\127\3\12\1\60\5\12\1\130\1\131\1\72" + - "\1\12\1\132\1\133\12\12\4\0\1\12\1\0\2\12" + - "\7\0\16\12\1\117\14\12\4\0\1\12\1\0\2\12" + - "\7\0\3\12\1\134\27\12\4\0\1\12\1\0\2\12" + - "\7\0\13\12\1\135\17\12\4\0\1\12\1\0\2\12" + - "\7\0\1\136\6\12\1\137\1\12\1\140\21\12\4\0" + - "\1\12\1\0\2\12\7\0\1\12\1\141\1\12\1\142" + - "\1\143\1\144\3\12\1\145\2\12\1\146\16\12\4\0" + - "\1\147\1\0\1\12\1\150\7\0\5\12\1\151\1\152" + - "\3\12\1\153\1\154\1\12\1\150\1\12\1\155\13\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\156\1\12" + - "\1\157\22\12\4\0\1\12\1\0\2\12\7\0\6\12" + - "\1\160\1\161\4\12\1\162\16\12\4\0\1\12\1\0" + - "\2\12\7\0\6\12\1\163\24\12\4\0\1\12\1\0" + - "\2\12\7\0\14\12\1\164\16\12\4\0\1\12\1\0" + - "\2\12\7\0\10\12\1\165\11\12\1\166\10\12\4\0" + - "\1\12\1\0\2\12\7\0\3\12\1\167\27\12\1\45" + - "\1\0\6\45\1\0\41\45\1\50\1\0\7\50\1\0" + - "\40\50\4\0\1\12\1\0\2\12\7\0\14\12\1\170" + - "\16\12\4\0\1\12\1\0\2\12\7\0\7\12\1\171" + - "\7\12\1\100\13\12\4\0\1\12\1\0\2\12\7\0" + - "\7\12\1\172\23\12\4\0\1\12\1\0\2\12\7\0" + - "\6\12\1\115\24\12\4\0\1\12\1\0\2\12\7\0" + - "\6\12\1\173\3\12\1\174\6\12\1\175\11\12\4\0" + - "\1\12\1\0\2\12\7\0\14\12\1\125\16\12\4\0" + - "\1\12\1\0\1\12\1\72\7\0\1\12\1\176\11\12" + - "\1\130\1\12\1\72\2\12\1\133\12\12\4\0\1\12" + - "\1\0\2\12\7\0\11\12\1\177\21\12\4\0\1\12" + - "\1\0\2\12\7\0\3\12\1\200\27\12\4\0\1\12" + - "\1\0\2\12\7\0\1\201\32\12\4\0\1\12\1\0" + - "\2\12\7\0\4\12\1\143\7\12\1\146\16\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\202\11\12\1\203" + - "\13\12\4\0\1\12\1\0\2\12\7\0\10\12\1\204" + - "\22\12\4\0\1\12\1\0\2\12\7\0\6\12\1\205" + - "\1\206\4\12\1\207\16\12\4\0\1\12\1\0\2\12" + - "\7\0\1\135\32\12\4\0\1\12\1\0\2\12\7\0" + - "\7\12\1\133\23\12\4\0\1\12\1\0\2\12\7\0" + - "\7\12\1\210\23\12\4\0\1\12\1\0\2\12\7\0" + - "\14\12\1\211\16\12\4\0\1\12\1\0\2\12\7\0" + - "\1\212\12\12\1\135\4\12\1\133\12\12\4\0\1\12" + - "\1\0\2\12\7\0\5\12\1\213\5\12\1\214\3\12" + - "\1\215\13\12\4\0\1\12\1\0\2\12\7\0\4\12" + - "\1\143\7\12\1\113\16\12\4\0\1\12\1\0\2\12" + - "\7\0\16\12\1\216\14\12\4\0\1\12\1\0\2\12" + - "\7\0\6\12\1\217\24\12\4\0\1\12\1\0\1\12" + - "\1\71\7\0\15\12\1\71\15\12\20\0\1\220\1\0" + - "\1\220\56\0\1\221\45\0\1\220\50\0\1\220\53\0" + - "\1\222\54\0\1\220\47\0\1\223\30\0\1\12\1\0" + - "\2\12\7\0\1\12\1\224\1\12\1\224\27\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\224\25\12\4\0" + - "\1\12\1\0\2\12\7\0\2\12\1\225\30\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\214\25\12\4\0" + - "\1\12\1\0\2\12\7\0\6\12\1\226\24\12\4\0" + - "\1\12\1\0\2\12\7\0\3\12\1\113\27\12\4\0" + - "\1\12\1\0\2\12\7\0\1\12\1\227\31\12\4\0" + - "\1\12\1\0\2\12\7\0\13\12\1\230\17\12\4\0" + - "\1\231\1\0\2\12\7\0\33\12\4\0\1\12\1\0" + - "\2\12\7\0\14\12\1\202\1\12\1\232\14\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\135\25\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\202\25\12\4\0" + - "\1\12\1\0\2\12\7\0\1\233\6\12\1\172\23\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\234\24\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\113\16\12" + - "\4\0\1\12\1\0\2\12\7\0\5\12\1\202\11\12" + - "\1\235\13\12\4\0\1\12\1\0\2\12\7\0\6\12" + - "\1\236\1\206\4\12\1\237\16\12\4\0\1\12\1\0" + - "\2\12\7\0\13\12\1\224\17\12\4\0\1\12\1\0" + - "\2\12\7\0\1\12\1\240\4\12\1\241\16\12\1\42" + - "\5\12\4\0\1\12\1\0\2\12\7\0\3\12\1\224" + - "\27\12\4\0\1\12\1\0\2\12\7\0\7\12\1\242" + - "\23\12\4\0\1\12\1\0\2\12\7\0\10\12\1\243" + - "\22\12\4\0\1\12\1\0\2\12\7\0\5\12\1\244" + - "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\175" + - "\23\12\4\0\1\12\1\0\2\12\7\0\1\245\32\12" + - "\4\0\1\12\1\0\2\12\7\0\10\12\1\202\22\12" + - "\4\0\1\12\1\0\2\12\7\0\2\12\1\212\30\12" + - "\4\0\1\12\1\0\2\12\7\0\20\12\1\246\12\12" + - "\4\0\1\12\1\0\2\12\7\0\2\12\1\113\2\12" + - "\1\214\25\12\4\0\1\12\1\0\2\12\7\0\5\12" + - "\1\60\6\12\1\247\16\12\4\0\1\12\1\0\2\12" + - "\7\0\22\12\1\250\10\12\4\0\1\251\1\0\1\12" + - "\1\252\7\0\1\12\1\253\2\12\1\254\10\12\1\252" + - "\15\12\4\0\1\12\1\0\2\12\7\0\20\12\1\133" + - "\12\12\4\0\1\12\1\0\2\12\7\0\14\12\1\255" + - "\16\12\4\0\1\12\1\0\2\12\7\0\14\12\1\256" + - "\16\12\4\0\1\12\1\0\2\12\7\0\6\12\1\257" + - "\7\12\1\260\14\12\4\0\1\12\1\0\2\12\7\0" + - "\10\12\1\261\1\32\21\12\4\0\1\12\1\0\2\12" + - "\7\0\3\12\1\262\3\12\1\263\4\12\1\125\16\12" + - "\4\0\1\12\1\0\2\12\7\0\21\12\1\264\11\12" + - "\4\0\1\265\1\0\2\12\7\0\33\12\4\0\1\12" + - "\1\0\2\12\7\0\5\12\1\264\25\12\4\0\1\12" + - "\1\0\1\12\1\266\7\0\15\12\1\266\15\12\4\0" + - "\1\12\1\0\2\12\7\0\5\12\1\206\25\12\4\0" + - "\1\12\1\0\2\12\7\0\14\12\1\267\16\12\4\0" + - "\1\12\1\0\2\12\7\0\3\12\1\270\10\12\1\71" + - "\16\12\4\0\1\12\1\0\2\12\7\0\21\12\1\202" + - "\11\12\4\0\1\12\1\0\2\12\7\0\17\12\1\224" + - "\13\12\4\0\1\12\1\0\2\12\7\0\13\12\1\214" + - "\17\12\4\0\1\12\1\0\2\12\7\0\2\12\1\271" + - "\30\12\4\0\1\12\1\0\2\12\7\0\1\272\32\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\273\24\12" + - "\4\0\1\12\1\0\2\12\7\0\16\12\1\224\14\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\274\24\12" + - "\4\0\1\12\1\0\2\12\7\0\20\12\1\71\12\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\212\24\12" + - "\4\0\1\12\1\0\2\12\7\0\7\12\1\275\23\12" + - "\4\0\1\12\1\0\2\12\7\0\1\12\1\224\31\12" + - "\4\0\1\12\1\0\2\12\7\0\3\12\1\276\27\12" + - "\4\0\1\12\1\0\2\12\7\0\7\12\1\206\23\12" + - "\4\0\1\12\1\0\2\12\7\0\21\12\1\277\11\12" + - "\4\0\1\224\1\0\2\12\7\0\33\12\4\0\1\12" + - "\1\0\2\12\7\0\5\12\1\277\25\12\4\0\1\12" + - "\1\0\2\12\7\0\2\12\1\224\10\12\1\135\17\12" + - "\4\0\1\12\1\0\2\12\7\0\1\300\32\12\4\0" + - "\1\12\1\0\2\12\7\0\1\224\32\12\4\0\1\12" + - "\1\0\2\12\7\0\1\12\1\301\25\12\1\257\3\12" + - "\4\0\1\12\1\0\2\12\7\0\22\12\1\224\10\12" + - "\4\0\1\12\1\0\2\12\7\0\16\12\1\302\14\12" + - "\4\0\1\12\1\0\2\12\7\0\1\255\32\12\4\0" + - "\1\12\1\0\2\12\7\0\10\12\1\303\22\12\16\0" + - "\1\20\63\0\1\304\25\0\1\220\64\0\1\305\36\0" + - "\1\12\1\0\2\12\7\0\14\12\1\306\14\12\1\307" + - "\1\12\4\0\1\12\1\0\2\12\7\0\5\12\1\310" + - "\25\12\4\0\1\12\1\0\2\12\7\0\7\12\1\224" + - "\23\12\4\0\1\12\1\0\2\12\7\0\3\12\1\311" + - "\27\12\4\0\1\227\1\0\2\12\7\0\12\12\1\312" + - "\1\12\1\313\16\12\4\0\1\12\1\0\2\12\7\0" + - "\1\314\32\12\4\0\1\12\1\0\2\12\7\0\7\12" + - "\1\315\23\12\4\0\1\12\1\0\2\12\7\0\5\12" + - "\1\316\25\12\4\0\1\12\1\0\2\12\7\0\6\12" + - "\1\257\24\12\4\0\1\12\1\0\2\12\7\0\21\12" + - "\1\317\11\12\4\0\1\12\1\0\2\12\7\0\5\12" + - "\1\317\25\12\4\0\1\12\1\0\2\12\7\0\11\12" + - "\1\320\21\12\4\0\1\224\1\0\2\12\7\0\1\224" + - "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\202" + - "\1\321\23\12\4\0\1\12\1\0\2\12\7\0\6\12" + - "\1\322\10\12\1\275\13\12\4\0\1\12\1\0\1\12" + - "\1\323\7\0\15\12\1\323\15\12\4\0\1\12\1\0" + - "\2\12\7\0\3\12\1\324\27\12\4\0\1\12\1\0" + - "\2\12\7\0\10\12\1\325\22\12\4\0\1\12\1\0" + - "\2\12\7\0\5\12\1\202\11\12\1\224\13\12\4\0" + - "\1\12\1\0\2\12\7\0\6\12\1\321\24\12\4\0" + - "\1\12\1\0\2\12\7\0\3\12\1\255\27\12\4\0" + - "\1\12\1\0\2\12\7\0\1\326\32\12\4\0\1\12" + - "\1\0\2\12\7\0\3\12\1\327\27\12\4\0\1\12" + - "\1\0\2\12\7\0\11\12\1\330\21\12\4\0\1\12" + - "\1\0\2\12\7\0\21\12\1\224\11\12\4\0\1\12" + - "\1\0\2\12\7\0\2\12\1\113\30\12\4\0\1\12" + - "\1\0\2\12\7\0\2\12\1\224\30\12\4\0\1\12" + - "\1\0\2\12\7\0\6\12\1\331\24\12\4\0\1\12" + - "\1\0\1\12\1\332\7\0\15\12\1\332\15\12\4\0" + - "\1\12\1\0\2\12\7\0\2\12\1\333\30\12\4\0" + - "\1\12\1\0\2\12\7\0\26\12\1\224\2\12\1\224" + - "\1\12\4\0\1\12\1\0\2\12\7\0\11\12\1\334" + - "\21\12\4\0\1\12\1\0\2\12\7\0\23\12\1\335" + - "\7\12\4\0\1\12\1\0\2\12\7\0\1\12\1\135" + - "\31\12\4\0\1\12\1\0\2\12\7\0\10\12\1\135" + - "\22\12\4\0\1\12\1\0\2\12\7\0\31\12\1\307" + - "\1\12\4\0\1\12\1\0\2\12\7\0\1\336\32\12" + - "\4\0\1\12\1\0\2\12\7\0\11\12\1\337\21\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\202\24\12" + - "\4\0\1\12\1\0\2\12\7\0\5\12\1\340\25\12" + - "\4\0\1\12\1\0\2\12\7\0\31\12\1\224\1\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\341\16\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\342\5\12" + - "\1\343\16\12\4\0\1\12\1\0\2\12\7\0\1\251" + - "\32\12\4\0\1\12\1\0\2\12\7\0\6\12\1\344" + - "\24\12\22\0\1\345\61\0\1\304\23\0\1\12\1\0" + - "\1\12\1\200\7\0\15\12\1\200\15\12\4\0\1\12" + - "\1\0\2\12\7\0\26\12\1\224\4\12\4\0\1\12" + - "\1\0\2\12\7\0\13\12\1\346\17\12\4\0\1\12" + - "\1\0\2\12\7\0\14\12\1\313\10\12\1\347\5\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\71\16\12" + - "\4\0\1\12\1\0\2\12\7\0\12\12\1\224\20\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\350\16\12" + - "\4\0\1\12\1\0\1\12\1\351\7\0\15\12\1\351" + - "\15\12\4\0\1\12\1\0\2\12\7\0\32\12\1\224" + - "\4\0\1\12\1\0\2\12\7\0\10\12\1\113\22\12" + - "\4\0\1\12\1\0\2\12\7\0\10\12\1\224\22\12" + - "\4\0\1\12\1\0\2\12\7\0\1\212\32\12\4\0" + - "\1\12\1\0\2\12\7\0\1\12\1\352\31\12\4\0" + - "\1\12\1\0\1\12\1\202\7\0\15\12\1\202\15\12" + - "\4\0\1\12\1\0\2\12\7\0\7\12\1\353\23\12" + - "\4\0\1\12\1\0\2\12\7\0\11\12\1\354\21\12" + - "\4\0\1\12\1\0\2\12\7\0\2\12\1\355\30\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\270\16\12" + - "\4\0\1\12\1\0\2\12\7\0\17\12\1\356\13\12" + - "\4\0\1\12\1\0\2\12\7\0\14\12\1\340\16\12" + - "\4\0\1\12\1\0\2\12\7\0\10\12\1\357\22\12" + - "\4\0\1\12\1\0\2\12\7\0\1\360\32\12\4\0" + - "\1\12\1\0\2\12\7\0\13\12\1\361\17\12\4\0" + - "\1\12\1\0\2\12\7\0\7\12\1\362\23\12\4\0" + - "\1\12\1\0\2\12\7\0\1\202\32\12\4\0\1\12" + - "\1\0\2\12\7\0\13\12\1\352\17\12\4\0\1\12" + - "\1\0\2\12\7\0\5\12\1\257\25\12\4\0\1\12" + - "\1\0\2\12\7\0\14\12\1\363\16\12\4\0\1\12" + - "\1\0\2\12\7\0\5\12\1\364\25\12\4\0\1\12" + - "\1\0\1\12\1\365\7\0\15\12\1\365\15\12\16\0" + - "\1\366\37\0\1\12\1\0\2\12\7\0\12\12\1\355" + - "\20\12\4\0\1\12\1\0\2\12\7\0\22\12\1\367" + - "\10\12\4\0\1\12\1\0\1\12\1\370\7\0\15\12" + - "\1\370\15\12\4\0\1\12\1\0\2\12\7\0\6\12" + - "\1\371\24\12\4\0\1\12\1\0\2\12\7\0\14\12" + - "\1\372\16\12\4\0\1\12\1\0\2\12\7\0\11\12" + - "\1\373\21\12\4\0\1\135\1\0\2\12\7\0\33\12" + - "\4\0\1\12\1\0\2\12\7\0\3\12\1\321\27\12" + - "\4\0\1\12\1\0\2\12\7\0\3\12\1\365\27\12" + - "\4\0\1\12\1\0\2\12\7\0\6\12\1\170\24\12" + - "\4\0\1\12\1\0\2\12\7\0\3\12\1\224\3\12" + - "\1\224\23\12\4\0\1\12\1\0\2\12\7\0\16\12" + - "\1\374\14\12\4\0\1\12\1\0\1\12\1\375\7\0" + - "\15\12\1\375\15\12\4\0\1\12\1\0\2\12\7\0" + - "\5\12\1\133\25\12\4\0\1\12\1\0\2\12\7\0" + - "\11\12\1\135\21\12\4\0\1\12\1\0\2\12\7\0" + - "\1\12\1\355\31\12\4\0\1\12\1\0\2\12\7\0" + - "\3\12\1\270\27\12\4\0\1\12\1\0\2\12\7\0" + - "\14\12\1\202\16\12\4\0\1\12\1\0\2\12\7\0" + - "\1\12\1\376\31\12\4\0\1\12\1\0\2\12\7\0" + - "\7\12\1\113\23\12\4\0\1\12\1\0\2\12\7\0" + - "\1\12\1\377\31\12\4\0\1\12\1\0\2\12\7\0" + - "\6\12\1\u0100\24\12\4\0\1\12\1\0\2\12\7\0" + - "\6\12\1\267\24\12\4\0\1\12\1\0\2\12\7\0" + - "\3\12\1\u0101\2\12\1\177\24\12\4\0\1\12\1\0" + - "\2\12\7\0\14\12\1\124\16\12\4\0\1\12\1\0" + - "\1\12\1\135\7\0\15\12\1\135\15\12"; - - private static int[] zzUnpackTrans() { - int[] result = new int[10038]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. We must have this here as there is no default, + * no-parameter constructor generated by JFlex. + */ + public FortranTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "!", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public FortranTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public FortranTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 168) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\2\1\2\11\1\1\1\11\1\1\1\11\2\1" + - "\2\11\2\1\1\11\25\1\2\11\1\1\2\11\30\1" + - "\7\0\106\1\4\0\60\1\2\0\37\1\1\0\20\1" + - "\1\11\13\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[257]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; + throw new Error(message); + } - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** the textposition at the last accepting state */ - private int zzMarkedPos; + zzMarkedPos -= number; + } - /** the current text position in the buffer */ - private int zzCurrentPos; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /* user code: */ + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Constructor. We must have this here as there is no default, no-parameter constructor generated by JFlex. - */ - public FortranTokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + zzAction = -1; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } + zzState = zzLexicalState; - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "!", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public FortranTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public FortranTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 168) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 15: { - addToken(Token.RESERVED_WORD); - } - case 17: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 18: - break; - case 4: { - addToken(Token.WHITESPACE); - } - case 19: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 20: - break; - case 13: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 21: - break; - case 10: { - addToken(Token.OPERATOR); - } - case 22: - break; - case 5: { // Since we change zzStartRead, we have the unfortunate - // side-effect of not being able to use the '^' operator. - // So we must check whether we're really at the beginning - // of the line ourselves... - if (zzStartRead == s.offset) { - addToken(zzStartRead, zzEndRead, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - else { - addToken(Token.IDENTIFIER); - } + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 23: - break; - case 16: { - addToken(Token.LITERAL_BOOLEAN); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 24: - break; - case 8: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 25: - break; - case 7: { - addToken(zzStartRead, zzEndRead, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 26: - break; - case 6: { // Since we change zzStartRead, we have the unfortunate - // side-effect of not being able to use the '^' operator. - // So we must check whether we're really at the beginning - // of the line ourselves... - if (zzStartRead == s.offset) { - addToken(zzStartRead, zzEndRead, Token.COMMENT_DOCUMENTATION); - addNullToken(); - return firstToken; - } - else { - addToken(Token.IDENTIFIER); - } - } - case 27: - break; - case 9: { - start = zzMarkedPos - 1; - yybegin(CHAR); - } - case 28: - break; - case 14: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 29: - break; - case 12: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 15: + { addToken(Token.RESERVED_WORD); + } + case 17: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 18: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 19: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 20: break; + case 13: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 21: break; + case 10: + { addToken(Token.OPERATOR); + } + case 22: break; + case 5: + { // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + case 23: break; + case 16: + { addToken(Token.LITERAL_BOOLEAN); + } + case 24: break; + case 8: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 25: break; + case 7: + { addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 26: break; + case 6: + { // Since we change zzStartRead, we have the unfortunate + // side-effect of not being able to use the '^' operator. + // So we must check whether we're really at the beginning + // of the line ourselves... + if (zzStartRead==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_DOCUMENTATION); + addNullToken(); + return firstToken; + } + else { + addToken(Token.IDENTIFIER); + } + } + case 27: break; + case 9: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 28: break; + case 14: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 29: break; + case 12: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 30: break; + case 3: + { addNullToken(); return firstToken; + } + case 31: break; + case 1: + { + } + case 32: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 30: - break; - case 3: { - addNullToken(); - return firstToken; + case 258: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 31: - break; - case 1: { + case 259: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 32: - break; + case 260: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 258: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 259: - break; - case CHAR: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 260: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.flex similarity index 66% rename from tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex rename to tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.flex index afc6c140d..8c9b7434e 100644 --- a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/CTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.flex @@ -1,26 +1,6 @@ /* - * 11/13/2004 - * - * CTokenMaker.java - An object that can take a chunk of text and - * return a linked list of tokens representing it in the C programming - * language. - * Copyright (C) 2004 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -31,7 +11,7 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Scanner for the C programming language. + * Scanner for the Go programming language. * * This implementation was created using * JFlex 1.4.1; however, the generated file @@ -51,7 +31,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                      - *
                    • The generated CTokenMaker.java file will contain two + *
                    • The generated GoTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -65,13 +45,13 @@ import org.fife.ui.rsyntaxtextarea.*; *
                    * * @author Robert Futrell - * @version 0.5 + * @version 0.6 * */ %% %public -%class CTokenMaker +%class GoTokenMaker %extends AbstractJFlexCTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -84,7 +64,7 @@ import org.fife.ui.rsyntaxtextarea.*; * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ - public CTokenMaker() { + public GoTokenMaker() { super(); } @@ -132,6 +112,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -139,13 +120,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -168,7 +146,7 @@ import org.fife.ui.rsyntaxtextarea.*; this.offsetShift = -text.offset + startOffset; // Start off in the proper state. - int state = Token.NULL; + int state = YYINITIAL; switch (initialTokenType) { case Token.COMMENT_MULTILINE: state = MLC; @@ -185,7 +163,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -196,9 +174,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -213,7 +190,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -242,8 +219,6 @@ HexDigit = {Digit}|[A-Fa-f] OctalDigit = [0-7] Exponent = [eE][+-]?{Digit}+ -PreprocessorWord = define|elif|else|endif|error|if|ifdef|ifndef|include|line|pragma|undef - Trigraph = ("??="|"??("|"??)"|"??/"|"??'"|"??<"|"??>"|"??!"|"??-") OctEscape1 = ([\\]{OctalDigit}) @@ -253,7 +228,7 @@ OctEscape = ({OctEscape1}|{OctEscape2}|{OctEscape3}) HexEscape = ([\\][xX]{HexDigit}{HexDigit}) AnyChrChr = ([^\'\n\\]) -Escape = ([\\]([abfnrtv\'\"\?\\0])) +Escape = ([\\]([abfnrtv\'\"\?\\0e])) UnclosedCharLiteral = ([\']({Escape}|{OctEscape}|{HexEscape}|{Trigraph}|{AnyChrChr})) CharLiteral = ({UnclosedCharLiteral}[\']) ErrorUnclosedCharLiteral = ([\'][^\'\n]*) @@ -272,11 +247,13 @@ MLCBegin = "/*" MLCEnd = "*/" LineCommentBegin = "//" -NonFloatSuffix = (([uU][lL]?)|([lL][uU]?)) -IntegerLiteral = ({Digit}+{Exponent}?{NonFloatSuffix}?) -HexLiteral = ("0"[xX]{HexDigit}+{NonFloatSuffix}?) -FloatLiteral = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?[fFlL]?) -ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) +DecimalLit = ([1-9]{Digit}*) +OctalLit = ("0"{OctalDigit}*) +IntegerLit = ({DecimalLit}|{OctalLit}) +HexLit = ("0"[xX]{HexDigit}+) +FloatLit = ((({Digit}*[\.]{Digit}+)|({Digit}+[\.]{Digit}*)){Exponent}?) +ImaginaryLit = (({Digit}+|{FloatLit})"i") +ErrorNumberFormat = (({IntegerLit}|{HexLit}|{FloatLit}){NonSeparator}+) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#") Identifier = ({LetterOrUnderscore}({LetterOrUnderscore}|{Digit}|[$])*) @@ -299,253 +276,119 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) { /* Keywords */ - "auto" | "break" | "case" | + "chan" | "const" | "continue" | "default" | - "do" | + "defer" | "else" | - "enum" | - "extern" | + "fallthrough" | "for" | + "func" | + "go" | "goto" | "if" | - "register" | - "return" | - "sizeof" | - "static" | + "import" | + "interface" | + "map" | + "package" | + "range" | + "select" | "struct" | "switch" | - "typedef" | - "union" | - "volatile" | - "while" { addToken(Token.RESERVED_WORD); } + "type" | + "var" { addToken(Token.RESERVED_WORD); } + + "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ - "char" | - "div_t" | - "double" | - "float" | + "bool" | + "string" | "int" | - "ldiv_t" | - "long" | - "short" | - "signed" | - "size_t" | - "unsigned" | - "void" | - "wchar_t" { addToken(Token.DATA_TYPE); } + "int8" | + "int16" | + "int32" | + "int64" | + "uint" | + "uint8" | + "uint16" | + "uint32" | + "uint64" | + "uintptr" | + "byte" | + "rune" | + "float32" | + "float64" | + "complex64" | + "complex128" { addToken(Token.DATA_TYPE); } /* Standard functions */ - "abort" | - "abs" | - "acos" | - "asctime" | - "asin" | - "assert" | - "atan2" | - "atan" | - "atexit" | - "atof" | - "atoi" | - "atol" | - "bsearch" | - "btowc" | - "calloc" | - "ceil" | - "clearerr" | - "clock" | - "cosh" | - "cos" | - "ctime" | - "difftime" | - "div" | - "errno" | - "exit" | - "exp" | - "fabs" | - "fclose" | - "feof" | - "ferror" | - "fflush" | - "fgetc" | - "fgetpos" | - "fgetwc" | - "fgets" | - "fgetws" | - "floor" | - "fmod" | - "fopen" | - "fprintf" | - "fputc" | - "fputs" | - "fputwc" | - "fputws" | - "fread" | - "free" | - "freopen" | - "frexp" | - "fscanf" | - "fseek" | - "fsetpos" | - "ftell" | - "fwprintf" | - "fwrite" | - "fwscanf" | - "getchar" | - "getc" | - "getenv" | - "gets" | - "getwc" | - "getwchar" | - "gmtime" | - "isalnum" | - "isalpha" | - "iscntrl" | - "isdigit" | - "isgraph" | - "islower" | - "isprint" | - "ispunct" | - "isspace" | - "isupper" | - "isxdigit" | - "labs" | - "ldexp" | - "ldiv" | - "localeconv" | - "localtime" | - "log10" | - "log" | - "longjmp" | - "malloc" | - "mblen" | - "mbrlen" | - "mbrtowc" | - "mbsinit" | - "mbsrtowcs" | - "mbstowcs" | - "mbtowc" | - "memchr" | - "memcmp" | - "memcpy" | - "memmove" | - "memset" | - "mktime" | - "modf" | - "offsetof" | - "perror" | - "pow" | - "printf" | - "putchar" | - "putc" | - "puts" | - "putwc" | - "putwchar" | - "qsort" | - "raise" | - "rand" | - "realloc" | - "remove" | - "rename" | - "rewind" | - "scanf" | - "setbuf" | - "setjmp" | - "setlocale" | - "setvbuf" | - "setvbuf" | - "signal" | - "sinh" | - "sin" | - "sprintf" | - "sqrt" | - "srand" | - "sscanf" | - "strcat" | - "strchr" | - "strcmp" | - "strcmp" | - "strcoll" | - "strcpy" | - "strcspn" | - "strerror" | - "strftime" | - "strlen" | - "strncat" | - "strncmp" | - "strncpy" | - "strpbrk" | - "strrchr" | - "strspn" | - "strstr" | - "strtod" | - "strtok" | - "strtol" | - "strtoul" | - "strxfrm" | - "swprintf" | - "swscanf" | - "system" | - "tanh" | - "tan" | - "time" | - "tmpfile" | - "tmpnam" | - "tolower" | - "toupper" | - "ungetc" | - "ungetwc" | - "va_arg" | - "va_end" | - "va_start" | - "vfprintf" | - "vfwprintf" | - "vprintf" | - "vsprintf" | - "vswprintf" | - "vwprintf" | - "wcrtomb" | - "wcscat" | - "wcschr" | - "wcscmp" | - "wcscoll" | - "wcscpy" | - "wcscspn" | - "wcsftime" | - "wcslen" | - "wcsncat" | - "wcsncmp" | - "wcsncpy" | - "wcspbrk" | - "wcsrchr" | - "wcsrtombs" | - "wcsspn" | - "wcsstr" | - "wcstod" | - "wcstok" | - "wcstol" | - "wcstombs" | - "wcstoul" | - "wcsxfrm" | - "wctob" | - "wctomb" | - "wmemchr" | - "wmemcmp" | - "wmemcpy" | - "wmemmove" | - "wmemset" | - "wprintf" | - "wscanf" { addToken(Token.FUNCTION); } - - /* Standard-defined macros. */ - "__DATE__" | - "__TIME__" | - "__FILE__" | - "__LINE__" | - "__STDC__" { addToken(Token.PREPROCESSOR); } + "append" | + "cap" | + "close" | + "complex" | + "copy" | + "delete" | + "imag" | + "len" | + "make" | + "new" | + "panic" | + "print" | + "println" | + "real" | + "recover" { addToken(Token.FUNCTION); } + + /* Strings package */ + "Compare" | + "Contains" | + "ContainsAny" | + "ContainsRune" | + "Count" | + "EqualsFold" | + "Fields" | + "FieldsFunc" | + "HasPrefix" | + "HasSuffix" | + "Index" | + "IndexAny" | + "IndexByte" | + "IndexFunc" | + "IndexRune" | + "Join" | + "LastIndex" | + "LastIndexAny" | + "LastIndexByte" | + "LastIndexFunc" | + "Map" | + "Repeat" | + "Replace" | + "ReplaceAll" | + "Split" | + "SplitAfter" | + "SplitAfterN" | + "SplitN" | + "Title" | + "ToLower" | + "ToLowerSpecial" | + "ToTitle" | + "ToTitleSpecial" | + "ToUpper" | + "ToUppserSpecial" | + "Trim" | + "TrimFunc" | + "TrimLeft" | + "TrimLeftFunc" | + "TrimPrefix" | + "TrimRight" | + "TrimRightFunc" | + "TrimSpace" | + "TrimSuffix" { addToken(Token.FUNCTION); } + + /* Boolean literals */ + ("true"|"false"|"nil") { addToken(Token.LITERAL_BOOLEAN); } {LineTerminator} { addNullToken(); return firstToken; } @@ -553,9 +396,6 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) {WhiteSpace}+ { addToken(Token.WHITESPACE); } - /* Preprocessor directives */ - "#"{WhiteSpace}*{PreprocessorWord} { addToken(Token.PREPROCESSOR); } - /* String/Character Literals. */ {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ } @@ -580,6 +420,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* Operators. */ {Trigraph} | "=" | + ":=" | "+" | "-" | "*" | @@ -587,6 +428,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "%" | "~" | "<" | + "<-" | ">" | "<<" | ">>" | @@ -596,11 +438,20 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "*=" | "/=" | "%=" | + "&=" | + "|=" | + "^=" | + ">=" | + "<=" | + "!=" | ">>=" | "<<=" | "^" | "&" | "&&" | + "&^" | + "&^=" | + "..." | "|" | "||" | "?" | @@ -613,9 +464,10 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "," { addToken(Token.OPERATOR); } /* Numbers */ - {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } - {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } - {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {IntegerLit} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLit} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {FloatLit} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {ImaginaryLit} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } /* Some lines will end in '\' to wrap an expression. */ diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.java new file mode 100644 index 000000000..b97740677 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GoTokenMaker.java @@ -0,0 +1,1523 @@ +/* The following code was generated by JFlex 1.4.1 on 6/30/19 10:57 PM */ + +/* + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for the Go programming language. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                    + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                    + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                      + *
                    • The generated GoTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                    • + *
                    • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                    • + *
                    • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                    • + *
                    + * + * @author Robert Futrell + * @version 0.6 + * + */ + +public class GoTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\32\1\24\1\0\1\32\1\36\22\0\1\32\1\17\1\25"+ + "\1\37\1\40\1\44\1\117\1\14\1\12\1\12\1\33\1\7\1\43"+ + "\1\20\1\34\1\13\1\31\1\71\1\22\1\73\1\74\1\5\1\72"+ + "\1\5\1\70\1\3\1\53\1\42\1\15\1\11\1\16\1\10\1\37"+ + "\1\77\1\107\1\76\1\4\1\6\1\102\1\1\1\103\1\106\1\110"+ + "\1\1\1\111\1\112\1\113\1\1\1\104\1\1\1\100\1\105\1\114"+ + "\1\115\2\1\1\23\2\1\1\41\1\21\1\41\1\121\1\2\1\0"+ + "\1\27\1\55\1\60\1\64\1\30\1\51\1\65\1\45\1\35\1\1"+ + "\1\57\1\52\1\66\1\61\1\62\1\47\1\101\1\56\1\50\1\46"+ + "\1\63\1\26\1\54\1\75\1\67\1\1\1\116\1\120\1\116\1\43"+ + "\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\1\2\1\3\1\2\3\4\1\5\1\4"+ + "\1\6\3\4\1\2\1\7\1\10\3\2\1\3\1\11"+ + "\1\4\1\2\1\1\1\2\1\4\27\2\2\4\1\12"+ + "\1\13\5\12\1\14\3\12\1\15\2\16\1\2\1\0"+ + "\1\17\1\20\2\21\1\22\1\6\2\10\1\23\3\2"+ + "\1\15\1\3\1\15\1\0\1\24\33\2\1\24\15\2"+ + "\1\25\10\0\1\15\1\2\1\6\1\26\1\6\3\21"+ + "\1\6\2\10\1\27\2\2\1\30\1\31\14\2\1\32"+ + "\14\2\1\33\23\2\10\0\1\16\1\0\1\2\1\6"+ + "\1\10\2\2\1\31\22\2\1\31\15\2\1\32\3\2"+ + "\2\0\1\34\2\0\1\35\3\2\1\32\20\2\2\32"+ + "\10\2\4\0\3\2\1\36\6\2\1\32\20\2\1\32"+ + "\1\2\1\32\7\2\1\32\4\2\1\32\11\2\1\32"+ + "\1\2\1\32\3\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[348]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\122\0\244\0\366\0\u0148\0\u019a\0\u01ec\0\u023e"+ + "\0\u0290\0\u02e2\0\u0334\0\u0386\0\u03d8\0\u042a\0\u047c\0\u04ce"+ + "\0\366\0\u0334\0\u0520\0\u0572\0\u05c4\0\u0616\0\u0668\0\u06ba"+ + "\0\u070c\0\u075e\0\u0334\0\u0334\0\u0334\0\u07b0\0\u0802\0\u0854"+ + "\0\u08a6\0\u08f8\0\u094a\0\u099c\0\u09ee\0\u0a40\0\u0a92\0\u0ae4"+ + "\0\u0b36\0\u0b88\0\u0bda\0\u0c2c\0\u0c7e\0\u0cd0\0\u0d22\0\u0d74"+ + "\0\u0dc6\0\u0e18\0\u0e6a\0\u0ebc\0\u0f0e\0\u0f60\0\u0fb2\0\u0334"+ + "\0\u1004\0\u1056\0\u10a8\0\u10fa\0\u114c\0\u0334\0\u119e\0\u11f0"+ + "\0\u1242\0\u1294\0\u12e6\0\u1294\0\u1338\0\u138a\0\u0334\0\u0334"+ + "\0\u13dc\0\u142e\0\u0334\0\u1480\0\u14d2\0\u1524\0\u0334\0\u1576"+ + "\0\u15c8\0\u161a\0\u166c\0\u16be\0\u1710\0\u1762\0\u0148\0\u17b4"+ + "\0\u1806\0\u1858\0\u18aa\0\u18fc\0\u194e\0\u19a0\0\u19f2\0\u1a44"+ + "\0\u1a96\0\u1ae8\0\u1b3a\0\u1b8c\0\u1bde\0\u1c30\0\u1c82\0\u1cd4"+ + "\0\u1d26\0\u1d78\0\u1dca\0\u1e1c\0\u1e6e\0\u1ec0\0\u1f12\0\u1f64"+ + "\0\u1fb6\0\u2008\0\u205a\0\u20ac\0\u20fe\0\u2150\0\u21a2\0\u21f4"+ + "\0\u2246\0\u2298\0\u22ea\0\u233c\0\u238e\0\u23e0\0\u2432\0\u2484"+ + "\0\u0334\0\u24d6\0\u2528\0\u257a\0\u25cc\0\u261e\0\u2670\0\u26c2"+ + "\0\u2714\0\u2766\0\u27b8\0\u280a\0\u0334\0\u285c\0\u28ae\0\u2900"+ + "\0\u2952\0\u29a4\0\u29f6\0\u2a48\0\u0334\0\u2a9a\0\u2aec\0\u1710"+ + "\0\u2b3e\0\u2b90\0\u2be2\0\u2c34\0\u2c86\0\u2cd8\0\u2d2a\0\u2d7c"+ + "\0\u2dce\0\u2e20\0\u2e72\0\u2ec4\0\u2f16\0\u0148\0\u2f68\0\u2fba"+ + "\0\u300c\0\u305e\0\u30b0\0\u3102\0\u3154\0\u31a6\0\u31f8\0\u324a"+ + "\0\u329c\0\u32ee\0\u0148\0\u3340\0\u3392\0\u33e4\0\u3436\0\u3488"+ + "\0\u34da\0\u352c\0\u357e\0\u35d0\0\u3622\0\u3674\0\u36c6\0\u3718"+ + "\0\u376a\0\u37bc\0\u380e\0\u3860\0\u38b2\0\u3904\0\u3956\0\u39a8"+ + "\0\u39fa\0\u3a4c\0\u3a9e\0\u3af0\0\u3b42\0\u3b94\0\u3be6\0\u3c38"+ + "\0\u3c8a\0\u3cdc\0\u3d2e\0\u3d80\0\u3dd2\0\u0148\0\u3e24\0\u3e76"+ + "\0\u3ec8\0\u3f1a\0\u3f6c\0\u3fbe\0\u4010\0\u4062\0\u40b4\0\u4106"+ + "\0\u4158\0\u41aa\0\u41fc\0\u424e\0\u42a0\0\u42f2\0\u4344\0\u4396"+ + "\0\u43e8\0\u443a\0\u448c\0\u44de\0\u4530\0\u4582\0\u45d4\0\u4626"+ + "\0\u4678\0\u46ca\0\u471c\0\u476e\0\u47c0\0\u4812\0\u4864\0\u48b6"+ + "\0\u4908\0\u495a\0\u49ac\0\u49fe\0\u4a50\0\u4aa2\0\u4af4\0\u4b46"+ + "\0\u4b98\0\u4bea\0\u4c3c\0\u4c8e\0\u4ce0\0\u4d32\0\u4d84\0\u4dd6"+ + "\0\u4e28\0\u4e7a\0\u4ecc\0\u4f1e\0\u4f70\0\u4fc2\0\u5014\0\u5066"+ + "\0\u50b8\0\u510a\0\u515c\0\u51ae\0\u5200\0\u5252\0\u52a4\0\u52f6"+ + "\0\u5348\0\u539a\0\u53ec\0\u543e\0\u5490\0\u54e2\0\u5534\0\u4a50"+ + "\0\u5586\0\u4b46\0\u55d8\0\u562a\0\u567c\0\u0148\0\u56ce\0\u5720"+ + "\0\u5772\0\u57c4\0\u5816\0\u5868\0\u58ba\0\u590c\0\u595e\0\u59b0"+ + "\0\u5a02\0\u5a54\0\u5aa6\0\u5af8\0\u5b4a\0\u5b9c\0\u5bee\0\u5c40"+ + "\0\u5c92\0\u5ce4\0\u5d36\0\u5d88\0\u5dda\0\u5e2c\0\u5e7e\0\u5ed0"+ + "\0\u5f22\0\u5f74\0\u5fc6\0\u6018\0\u606a\0\u60bc\0\u610e\0\u6160"+ + "\0\u61b2\0\u6204\0\u6256\0\u62a8\0\u62fa\0\u634c\0\u639e\0\u63f0"+ + "\0\u6442\0\u6494\0\u6160\0\u64e6\0\u6538\0\u658a\0\u65dc\0\u662e"+ + "\0\u6680\0\u66d2\0\u6724\0\u6776"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[348]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\2\5\1\6\1\5\1\6\1\7\1\10\1\11"+ + "\1\12\1\13\1\14\1\15\1\16\1\17\1\12\1\20"+ + "\1\21\1\6\1\5\1\22\1\23\1\24\1\25\1\26"+ + "\1\27\1\30\1\12\1\31\1\32\1\33\2\4\1\13"+ + "\1\34\1\35\1\12\1\5\1\36\1\37\1\40\1\41"+ + "\1\42\1\12\1\5\1\43\1\44\1\5\1\45\1\46"+ + "\1\5\1\47\1\50\1\51\1\52\1\5\5\6\1\5"+ + "\1\53\1\5\1\54\1\5\1\55\1\56\1\5\1\57"+ + "\1\60\1\5\1\61\1\62\1\63\1\5\1\64\1\5"+ + "\1\13\1\65\1\66\1\12\24\67\1\70\6\67\1\71"+ + "\11\67\1\72\3\67\1\73\2\67\1\74\45\67\24\75"+ + "\1\76\20\75\1\77\3\75\1\100\2\75\1\101\45\75"+ + "\7\4\12\0\3\4\2\0\4\4\3\0\1\4\1\0"+ + "\2\4\4\0\6\4\1\0\42\4\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\42\5\4\0\3\102"+ + "\1\6\1\102\1\6\1\102\12\0\1\102\1\6\1\102"+ + "\2\0\3\102\1\6\2\0\1\103\1\104\1\0\2\102"+ + "\4\0\6\102\1\0\14\102\5\6\21\102\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\25\5\1\105"+ + "\14\5\13\0\1\35\1\0\1\35\120\0\1\106\122\0"+ + "\1\35\243\0\1\35\1\0\1\107\17\0\1\110\66\0"+ + "\10\111\1\112\3\111\1\113\4\111\1\114\2\111\1\0"+ + "\75\111\11\0\1\35\3\0\1\12\2\0\1\35\112\0"+ + "\1\35\4\0\1\12\114\0\1\35\6\0\1\35\101\0"+ + "\21\23\1\115\2\23\1\116\1\117\74\23\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\1\5\1\120\2\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\2\5\1\121"+ + "\3\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\5\5\1\122\1\0\42\5\4\0\3\102\1\123"+ + "\1\102\1\124\1\102\12\0\1\102\1\124\1\125\2\0"+ + "\3\102\1\124\2\0\1\103\1\104\1\0\2\102\4\0"+ + "\6\102\1\0\14\102\1\123\4\124\1\125\20\102\36\0"+ + "\1\30\72\0\1\103\1\0\1\103\14\0\1\103\6\0"+ + "\1\103\2\0\1\126\33\0\5\103\25\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\4\5\1\127\1\5\1\0\5\5"+ + "\1\130\4\5\1\131\27\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\2\5\1\132\10\5\1\133"+ + "\26\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\1\5\1\134\2\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\2\5\1\135\37\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\136\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\1\5\1\137"+ + "\4\5\1\0\1\140\41\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\141\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\142\1\0\6\5"+ + "\1\120\1\143\32\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\2\5\1\144\1\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\2\5\1\145"+ + "\3\5\1\146\4\5\1\147\26\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\1\5\1\150\1\151\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\7\5\1\152\32\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\1\5\1\153\2\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\1\154\4\5\1\155\1\0\6\5"+ + "\1\156\33\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\157\1\5\3\0\1\160\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\161\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\162\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\6\5\1\163\33\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\164\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\6\5"+ + "\1\165\33\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\166\1\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\167\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\1\5\1\170\2\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\2\5"+ + "\1\171\3\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\5\5\1\172\34\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\6\5"+ + "\1\173\33\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\1\5\1\174\2\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\1\5\1\175\2\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\176\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\2\5\1\177\3\5\1\200\33\5\15\0\1\35\105\0"+ + "\1\35\1\0\1\12\11\0\1\35\106\0\1\35\1\0"+ + "\24\67\1\0\6\67\1\0\11\67\1\0\3\67\1\0"+ + "\2\67\1\0\45\67\13\0\1\201\154\0\1\202\110\0"+ + "\1\203\10\0\1\204\127\0\1\205\45\0\24\75\1\0"+ + "\20\75\1\0\3\75\1\0\2\75\1\0\45\75\46\0"+ + "\1\206\110\0\1\207\10\0\1\210\127\0\1\211\45\0"+ + "\7\102\12\0\3\102\2\0\4\102\3\0\1\102\1\0"+ + "\2\102\4\0\6\102\1\0\42\102\4\0\3\102\1\103"+ + "\1\102\1\103\1\212\12\0\1\102\1\103\1\102\2\0"+ + "\2\102\1\212\1\103\3\0\1\104\1\0\2\102\4\0"+ + "\6\102\1\0\14\102\5\103\21\102\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\7\5\1\213\32\5"+ + "\15\0\10\35\101\0\14\214\1\215\7\214\1\0\105\214"+ + "\1\216\3\214\1\215\7\214\1\0\102\214\1\217\2\214"+ + "\1\111\3\214\1\220\4\214\1\111\1\221\1\222\1\0"+ + "\4\111\1\221\14\214\1\111\2\214\1\111\3\214\2\111"+ + "\2\214\1\111\7\214\1\221\1\217\1\221\1\217\1\222"+ + "\24\214\5\116\1\23\2\116\1\23\3\116\1\23\4\116"+ + "\2\23\1\223\1\0\5\23\14\116\1\23\2\116\1\23"+ + "\3\116\2\23\2\116\1\23\7\116\4\23\1\223\45\116"+ + "\1\224\3\116\1\225\74\116\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\2\5\1\127\37\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\2\5\1\226\3\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\3\5"+ + "\1\227\2\5\1\0\42\5\4\0\3\102\1\123\1\102"+ + "\1\123\1\102\12\0\1\102\1\123\1\102\2\0\3\102"+ + "\1\123\2\0\1\103\1\104\1\0\2\102\4\0\6\102"+ + "\1\0\14\102\5\123\21\102\4\0\3\102\1\123\1\102"+ + "\1\124\1\102\12\0\1\102\1\124\1\102\2\0\3\102"+ + "\1\124\2\0\1\103\1\104\1\0\2\102\4\0\6\102"+ + "\1\0\14\102\1\123\4\124\21\102\4\0\3\102\4\230"+ + "\12\0\1\102\1\230\1\102\2\0\1\102\3\230\3\0"+ + "\1\102\1\0\2\102\4\0\4\102\1\230\1\102\1\0"+ + "\1\102\1\230\2\102\1\230\3\102\1\230\3\102\5\230"+ + "\1\102\2\230\2\102\1\230\4\102\1\230\6\102\40\0"+ + "\1\35\65\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\231\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\232\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\2\5\1\233\3\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\7\5\1\234\32\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\2\5\1\227\3\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\4\5"+ + "\1\235\1\236\34\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\237\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\5\5\1\240\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\2\5\1\241"+ + "\37\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\242\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\5\5\1\243\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\6\5\1\244\33\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\5\5"+ + "\1\245\34\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\5\5\1\246\34\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\247\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\6\5\1\250\33\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\1\5\1\251\4\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\5\5\1\252"+ + "\34\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\1\5\1\253\2\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\1\5\1\254\4\5\1\0\4\5\1\255\35\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\5\5\1\251\34\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\2\5\1\246\1\227\2\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\1\5\1\256"+ + "\2\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\6\5\1\257\33\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\2\5\1\260\3\5\1\0\5\5"+ + "\1\261\4\5\1\262\27\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\1\246\41\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\263\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\5\5\1\264\34\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\4\5\1\265\1\266\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\1\5\1\267\4\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\2\5"+ + "\1\127\3\5\1\0\3\5\1\270\36\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\5\5\1\271"+ + "\1\5\1\272\2\5\1\273\27\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\2\5\1\274\3\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\2\5"+ + "\1\275\1\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\3\5\1\276\2\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\277\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\10\5\1\300\31\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\144\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\3\5\1\301\2\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\2\5\1\246\3\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\1\5\1\302\4\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\303\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\35\5\1\304"+ + "\2\5\1\305\1\306\52\0\1\307\125\0\1\310\116\0"+ + "\1\311\126\0\1\312\113\0\1\313\125\0\1\314\116\0"+ + "\1\315\126\0\1\316\45\0\3\102\1\317\1\102\1\317"+ + "\1\102\1\320\10\0\1\320\1\102\1\317\1\102\2\0"+ + "\3\102\1\317\3\0\1\102\1\0\2\102\4\0\6\102"+ + "\1\0\14\102\5\317\21\102\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\321\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\14\214\1\113\7\214\1\0\106\214\3\111\1\220\4\111"+ + "\3\214\1\0\102\214\1\111\6\214\1\215\5\214\1\111"+ + "\1\214\1\0\4\214\1\111\37\214\4\111\25\214\14\0"+ + "\1\215\105\0\5\214\1\217\6\214\1\215\5\214\1\217"+ + "\1\214\1\0\4\214\1\217\37\214\4\217\30\214\4\322"+ + "\5\214\1\113\5\214\1\322\1\214\1\0\2\214\3\322"+ + "\17\214\1\322\3\214\1\322\2\214\1\322\3\214\1\322"+ + "\3\214\5\322\1\214\2\322\2\214\1\322\4\214\1\322"+ + "\12\214\3\116\4\323\12\116\1\224\1\323\2\116\1\225"+ + "\1\116\3\323\17\116\1\323\3\116\1\323\2\116\1\323"+ + "\3\116\1\323\3\116\5\323\1\116\2\323\2\116\1\323"+ + "\4\116\1\323\36\116\1\0\75\116\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\2\5\1\324\1\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\2\5\1\127"+ + "\1\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\325\1\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\14\5\1\326\1\327\1\330"+ + "\1\331\22\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\11\5\1\246\30\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\6\5\1\332\33\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\2\5"+ + "\1\263\1\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\3\5\1\333\36\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\334"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\5\5"+ + "\1\335\34\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\336\1\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\337\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\7\5\1\336\32\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\1\5\1\340"+ + "\4\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\3\5\1\234\1\5\1\341\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\1\5\1\342"+ + "\2\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\4\5\1\127\35\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\1\5\1\343\2\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\5\5\1\326"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\326\1\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\11\5\1\227\30\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\5\5\1\246"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\7\5\1\344\32\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\6\5\1\345\33\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\5\5\1\127\34\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\3\5\1\270\2\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\13\5\1\246"+ + "\26\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\346\1\5\1\347\2\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\2\5\1\350\3\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\351\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\352\1\120\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\2\5"+ + "\1\353\1\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\6\5\1\127\33\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\246\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\354\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\5\5\1\355\34\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\2\5\1\356\3\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\2\5\1\357\1\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\5\5\1\360\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\361\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\30\5\1\362\1\363\10\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\364\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\365\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\1\5\1\366"+ + "\4\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\5\5\1\270\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\12\5\1\367\27\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\6\5\1\370\33\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\371\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\2\5\1\372\3\5\1\0\42\5\53\0"+ + "\1\373\102\0\1\311\144\0\1\374\102\0\1\375\134\0"+ + "\1\376\102\0\1\315\144\0\1\377\102\0\1\u0100\65\0"+ + "\3\102\1\317\1\102\1\317\1\102\12\0\1\102\1\317"+ + "\1\102\2\0\3\102\1\317\3\0\1\104\1\0\2\102"+ + "\4\0\6\102\1\0\14\102\5\317\21\102\7\0\1\317"+ + "\1\0\1\317\14\0\1\317\6\0\1\317\36\0\5\317"+ + "\25\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\5\5\1\u0101"+ + "\1\0\42\5\4\0\3\214\4\111\5\214\1\113\5\214"+ + "\1\111\1\214\1\0\2\214\3\111\17\214\1\111\3\214"+ + "\1\111\2\214\1\111\3\214\1\111\3\214\5\111\1\214"+ + "\2\111\2\214\1\111\4\214\1\111\12\214\3\116\4\23"+ + "\12\116\1\224\1\23\2\116\1\225\1\116\3\23\17\116"+ + "\1\23\3\116\1\23\2\116\1\23\3\116\1\23\3\116"+ + "\5\23\1\116\2\23\2\116\1\23\4\116\1\23\12\116"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\5\5"+ + "\1\u0102\34\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\2\5\1\u0103\37\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\16\5\1\326\23\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\20\5\1\326\21\5\4\0\1\4\6\5\12\0\1\4"+ + "\1\326\1\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\2\5\1\347\37\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\1\5"+ + "\1\252\2\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\4\5\1\246\35\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\1\5\1\u0104\4\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\4\5\1\347\35\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\5\5\1\u0105\34\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\4\5"+ + "\1\u0106\35\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\1\5\1\u0107\4\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\1\5\1\u0108\4\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\3\5\1\127\36\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\2\5\1\u0109\37\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\1\u010a\3\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\u010b\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\127\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\5\5\1\u010c\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\2\5\1\u010d\3\5\1\0"+ + "\14\5\1\326\1\327\1\330\1\331\22\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\7\5\1\u010e"+ + "\32\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\270\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\u010f\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\1\5\1\246\4\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\1\5\1\u0110\2\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\1\5\1\355\2\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\1\5"+ + "\1\u0111\2\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\10\5\1\u0112\31\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\2\5\1\u0113"+ + "\37\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\7\5\1\u0114\32\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\1\5\1\u0115\4\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\21\5"+ + "\1\u0116\20\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\32\5\1\u0117\7\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\24\5\1\u0118\1\5"+ + "\1\u0119\1\5\1\362\1\u011a\3\5\1\u011b\4\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\1\u011c"+ + "\41\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\1\5"+ + "\1\u011d\4\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\2\5\1\u011e\3\5\1\0\42\5\54\0"+ + "\1\311\2\0\1\374\61\0\1\u011f\107\0\1\375\1\u0120"+ + "\4\375\4\u0120\1\375\1\u0120\2\0\2\u0120\1\0\2\375"+ + "\2\0\4\375\1\0\2\u0120\1\375\1\0\1\u0120\1\375"+ + "\4\u0120\6\375\1\u0120\42\375\1\0\1\u0120\52\0\1\315"+ + "\2\0\1\377\61\0\1\u0121\107\0\1\u0100\1\u0122\4\u0100"+ + "\4\u0122\1\u0100\1\u0122\2\0\2\u0122\1\0\2\u0100\2\0"+ + "\4\u0100\1\0\2\u0122\1\u0100\1\0\1\u0122\1\u0100\4\u0122"+ + "\6\u0100\1\u0122\42\u0100\1\0\1\u0122\2\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\3\5\1\u0123\2\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\10\5\1\246\31\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\4\5\1\u0124\1\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\144\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\11\5\1\326\30\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\1\127\5\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\1\u0125\5\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\16\5"+ + "\1\330\1\331\22\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\5\5\1\u0126\34\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\u0127\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\5\5\1\u0128\34\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\2\5\1\u0129\1\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\1\5\1\u012a\4\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\5\5\1\347\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\u012b\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\2\5\1\270\37\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\4\5\1\u012c\35\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\3\5\1\u012d\2\5\1\0\42\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\u012e\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\4\5"+ + "\1\u012e\1\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\23\5\1\u012f\13\5\1\246"+ + "\2\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\23\5\1\u0130\1\u0131\1\5\1\u0119\4\5\1\u0132"+ + "\6\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\5\5\1\u0133\34\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\u0134\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\7\5\1\u0135\32\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\2\5\1\u0136"+ + "\3\5\1\0\7\5\1\u0114\32\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\u0137\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\2\5"+ + "\1\u0138\1\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\5\5\1\u0139\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\u0127\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\3\5\1\u013a\2\5"+ + "\1\0\42\5\17\0\1\375\121\0\1\u0100\106\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\26\5\1\u013b"+ + "\13\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\1\5\1\u013c\2\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\42\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\2\5\1\u013d\37\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\2\5"+ + "\1\246\37\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\7\5\1\227\32\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\21\5\1\u013e\20\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\2\5\1\326\37\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\5\5\1\u013f\34\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\u0140\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\26\5\1\u0119\13\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\4\5\1\u0141\1\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\4\5\1\u0142\1\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\5\5\1\260\34\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\7\5\1\u0143\32\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\13\5\1\353\26\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\10\5\1\u0144\31\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\11\5\1\u0145"+ + "\30\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\5\5\1\334\34\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\1\5\1\u0146\2\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\4\5\1\u0147\1\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\2\5\1\u0148\37\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\u0148\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\2\5"+ + "\1\u0149\1\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\6\5\1\u014a\33\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\4\5\1\227"+ + "\35\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\6\5\1\u014b\33\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\15\5\1\u014c\1\330\23\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\3\5\1\u014d"+ + "\2\5\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\23\5\1\u014e\16\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\u014f"+ + "\1\0\1\4\1\5\4\0\6\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\1\5\1\u0150\4\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\5\5\1\270\34\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\2\5\1\u0151\1\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\1\u0147\5\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\4\5\1\270\35\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\1\5\1\u012d\4\5\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\31\5\1\u0152\10\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\2\5\1\u0153\37\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\4\5\3\0\1\5"+ + "\1\0\1\4\1\5\4\0\5\5\1\u0102\1\0\42\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\7\5\1\u0154\32\5\4\0\1\4\6\5\12\0\1\4"+ + "\1\u0155\1\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\6\5\1\0\42\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\23\5\1\u0130\1\u0131"+ + "\15\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\5\5"+ + "\1\253\1\0\42\5\4\0\1\4\6\5\12\0\1\4"+ + "\2\5\2\0\4\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\21\5\1\246\20\5\4\0\1\4"+ + "\6\5\12\0\1\4\2\5\2\0\2\5\1\u0156\1\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\4\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\21\5\1\u0157\20\5\4\0\1\4\6\5\12\0"+ + "\1\4\2\5\2\0\4\5\3\0\1\5\1\0\1\4"+ + "\1\5\4\0\2\5\1\u0158\3\5\1\0\42\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\4\5\3\0"+ + "\1\5\1\0\1\4\1\5\4\0\6\5\1\0\11\5"+ + "\1\u0106\30\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\14\5\1\326\25\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\2\5\1\u0159\37\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\5\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\23\5\1\u0130\2\5\1\u0119\4\5\1\u0132\6\5\4\0"+ + "\1\4\6\5\12\0\1\4\2\5\2\0\2\5\1\u015a"+ + "\1\5\3\0\1\5\1\0\1\4\1\5\4\0\6\5"+ + "\1\0\42\5\4\0\1\4\6\5\12\0\1\4\2\5"+ + "\2\0\4\5\3\0\1\5\1\0\1\4\1\5\4\0"+ + "\6\5\1\0\37\5\1\246\2\5\4\0\1\4\6\5"+ + "\12\0\1\4\2\5\2\0\4\5\3\0\1\5\1\0"+ + "\1\4\1\5\4\0\6\5\1\0\4\5\1\u015b\35\5"+ + "\4\0\1\4\6\5\12\0\1\4\2\5\2\0\4\5"+ + "\3\0\1\u015c\1\0\1\4\1\5\4\0\6\5\1\0"+ + "\42\5\4\0\1\4\6\5\12\0\1\4\2\5\2\0"+ + "\1\5\1\253\2\5\3\0\1\5\1\0\1\4\1\5"+ + "\4\0\6\5\1\0\42\5\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[26568]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\7\1\1\11\6\1\1\11\10\1\3\11\32\1"+ + "\1\11\5\1\1\11\7\1\1\0\2\11\2\1\1\11"+ + "\3\1\1\11\6\1\1\0\52\1\1\11\10\0\3\1"+ + "\1\11\7\1\1\11\61\1\10\0\1\1\1\0\52\1"+ + "\2\0\1\1\2\0\37\1\4\0\72\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[348]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the textposition at the last state to be included in yytext */ + private int zzPushbackPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** the number of characters up to the start of the matched text */ + private int yychar; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public GoTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public GoTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public GoTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 202) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 7: + { addNullToken(); return firstToken; + } + case 31: break; + case 22: + { addToken(Token.LITERAL_CHAR); + } + case 32: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 33: break; + case 16: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 34: break; + case 9: + { addToken(Token.WHITESPACE); + } + case 35: break; + case 24: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 36: break; + case 17: + { addToken(Token.ERROR_CHAR); /*addNullToken(); return firstToken;*/ + } + case 37: break; + case 23: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 38: break; + case 14: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 39: break; + case 20: + { addToken(Token.RESERVED_WORD); + } + case 40: break; + case 5: + { addToken(Token.SEPARATOR); + } + case 41: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 42: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 43: break; + case 15: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 44: break; + case 26: + { addToken(Token.FUNCTION); + } + case 45: break; + case 6: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 46: break; + case 8: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 47: break; + case 25: + { addToken(Token.DATA_TYPE); + } + case 48: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 49: break; + case 18: + { addToken(Token.ERROR_CHAR); + } + case 50: break; + case 27: + { addToken(Token.LITERAL_BOOLEAN); + } + case 51: break; + case 19: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 52: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 53: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 54: break; + case 30: + { addToken(Token.RESERVED_WORD_2); + } + case 55: break; + case 13: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 56: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 57: break; + case 4: + { addToken(Token.OPERATOR); + } + case 58: break; + case 10: + { + } + case 59: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 60: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 349: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 350: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 351: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex old mode 100644 new mode 100755 index 0f068ed44..9761f5505 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.flex @@ -2,23 +2,9 @@ * 09/28/2007 * * GroovyTokenMaker.java - Scanner for the Groovy programming language. - * Copyright (C) 2007 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                      - *
                    • The generated GroovyTokenMaker.java file will contain two + *
                    • The generated GroovyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -129,6 +115,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -136,13 +123,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -194,12 +178,37 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + /** * Refills the input buffer. * @@ -246,11 +255,11 @@ import org.fife.ui.rsyntaxtextarea.*; Letter = [A-Za-z] LetterOrUnderscore = ({Letter}|"_") NonzeroDigit = [1-9] +BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) AnyCharacterButApostropheOrBackSlash = ([^\\']) -AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") @@ -263,27 +272,38 @@ WhiteSpace = ([ \t\f]) CharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})*[\']) UnclosedCharLiteral = ([\'][^\'\n]*) ErrorCharLiteral = ({UnclosedCharLiteral}[\']) -StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) -UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) -ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) MLCBegin = "/*" MLCEnd = "*/" DocCommentBegin = "/**" LineCommentBegin = "//" -IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") -IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) -IntegerLiteral = ({IntegerHelper1}[lL]?) -HexLiteral = ({IntegerHelper2}[lL]?) +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +HexLiteral = ({HexHelper}[lL]?) + FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") +Regex = ([~]?"/"([^\*\\/]|\\.)([^/\\]|\\.)*"/") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) @@ -301,6 +321,12 @@ InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"val Identifier = ({IdentifierStart}{IdentifierPart}*) ErrorIdentifier = ({NonSeparator}+) +// Variables in strings +VariableStart = ([\$]) +BracedVariable = ({VariableStart}\{[^\}]+\}) +UnbracedVariable = ({VariableStart}{Identifier}) +Variable = ({BracedVariable}|{UnbracedVariable}) + Annotation = ("@"{Identifier}?) URLGenDelim = ([:\/\?#\[\]@]) @@ -313,8 +339,10 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state MLC %state DOCCOMMENT +%state EOL_COMMENT %state MULTILINE_STRING_DOUBLE %state MULTILINE_STRING_SINGLE +%state STRING_DOUBLE %% @@ -326,19 +354,23 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "case" | "catch" | "class" | + "const" | "continue" | "default" | "do" | "else" | + "enum" | "extends" | "final" | "finally" | "for" | + "goto" | "if" | "it" | "implements" | "import" | "instanceof" | + "interface" | "native" | "new" | "null" | @@ -346,7 +378,6 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "private" | "protected" | "public" | - "return" | "static" | "strictfp" | "super" | @@ -360,6 +391,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "void" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } /* Groovy keywords */ "as" | @@ -384,21 +416,24 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } - /* java.lang stuff */ + /* java.lang classes */ "Appendable" | + "AutoCloseable" | "CharSequence" | "Cloneable" | "Comparable" | "Iterable" | "Readable" | "Runnable" | + "Thread.UncaughtExceptionHandler" | "Boolean" | "Byte" | "Character" | - "Character.Subset" | - "Character.UnicodeBlock" | + "Character.Subset" | + "Character.UnicodeBlock" | "Class" | "ClassLoader" | + "ClassValue" | "Compiler" | "Double" | "Enum" | @@ -412,6 +447,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "Package" | "Process" | "ProcessBuilder" | + "ProcessBuilder.Redirect" | "Runtime" | "RuntimePermission" | "SecurityManager" | @@ -427,6 +463,8 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "ThreadLocal" | "Throwable" | "Void" | + "Character.UnicodeScript" | + "ProcessBuilder.Redirect.Type" | "Thread.State" | "ArithmeticException" | "ArrayIndexOutOfBoundsException" | @@ -456,6 +494,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "UnsupportedOperationException" | "AbstractMethodError" | "AssertionError" | + "BootstrapMethodError" | "ClassCircularityError" | "ClassFormatError" | "Error" | @@ -475,7 +514,227 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) "UnsatisfiedLinkError" | "UnsupportedClassVersionError" | "VerifyError" | - "VirtualMachineError" { addToken(Token.FUNCTION); } + "VirtualMachineError" | + + /* java.io classes*/ + "Closeable" | + "DataInput" | + "DataOutput" | + "Externalizable" | + "FileFilter" | + "FilenameFilter" | + "Flushable" | + "ObjectInput" | + "ObjectInputValidation" | + "ObjectOutput" | + "ObjectStreamConstants" | + "Serializable" | + + "BufferedInputStream" | + "BufferedOutputStream" | + "BufferedReader" | + "BufferedWriter" | + "ByteArrayInputStream" | + "ByteArrayOutputStream" | + "CharArrayReader" | + "CharArrayWriter" | + "Console" | + "DataInputStream" | + "DataOutputStream" | + "File" | + "FileDescriptor" | + "FileInputStream" | + "FileOutputStream" | + "FilePermission" | + "FileReader" | + "FileWriter" | + "FilterInputStream" | + "FilterOutputStream" | + "FilterReader" | + "FilterWriter" | + "InputStream" | + "InputStreamReader" | + "LineNumberInputStream" | + "LineNumberReader" | + "ObjectInputStream" | + "ObjectInputStream.GetField" | + "ObjectOutputStream" | + "ObjectOutputStream.PutField" | + "ObjectStreamClass" | + "ObjectStreamField" | + "OutputStream" | + "OutputStreamWriter" | + "PipedInputStream" | + "PipedOutputStream" | + "PipedReader" | + "PipedWriter" | + "PrintStream" | + "PrintWriter" | + "PushbackInputStream" | + "PushbackReader" | + "RandomAccessFile" | + "Reader" | + "SequenceInputStream" | + "SerializablePermission" | + "StreamTokenizer" | + "StringBufferInputStream" | + "StringReader" | + "StringWriter" | + "Writer" | + + "CharConversionException" | + "EOFException" | + "FileNotFoundException" | + "InterruptedIOException" | + "InvalidClassException" | + "InvalidObjectException" | + "IOException" | + "NotActiveException" | + "NotSerializableException" | + "ObjectStreamException" | + "OptionalDataException" | + "StreamCorruptedException" | + "SyncFailedException" | + "UncheckedIOException" | + "UnsupportedEncodingException" | + "UTFDataFormatException" | + "WriteAbortedException" | + + "IOError" | + + /* java.util classes */ + "Collection" | + "Comparator" | + "Deque" | + "Enumeration" | + "EventListener" | + "Formattable" | + "Iterator" | + "List" | + "ListIterator" | + "Map" | + "Map.Entry" | + "NavigableMap" | + "NavigableSet" | + "Observer" | + "PrimitiveIterator" | + "PrimitiveIterator.OfDouble" | + "PrimitiveIterator.OfInt" | + "PrimitiveIterator.OfLong" | + "Queue" | + "RandomAccess" | + "Set" | + "SortedMap" | + "SortedSet" | + "Spliterator" | + "Spliterator.OfDouble" | + "Spliterator.OfInt" | + "Spliterator.OfLong" | + "Spliterator.OfPrimitive" | + + "AbstractCollection" | + "AbstractList" | + "AbstractMap" | + "AbstractMap.SimpleEntry" | + "AbstractMap.SimpleImmutableEntry" | + "AbstractQueue" | + "AbstractSequentialList" | + "AbstractSet" | + "ArrayDeque" | + "ArrayList" | + "Arrays" | + "Base64" | + "Base64.Decoder" | + "Base64.Encoder" | + "BitSet" | + "Calendar" | + "Calendar.Builder" | + "Collections" | + "Currency" | + "Date" | + "Dictionary" | + "DoubleSummaryStatistics" | + "EnumMap" | + "EnumSet" | + "EventListenerProxy" | + "EventObject" | + "FormattableFlags" | + "Formatter" | + "GregorianCalendar" | + "HashMap" | + "HashSet" | + "Hashtable" | + "IdentityHashMap" | + "IntSummaryStatistics" | + "LinkedHashMap" | + "LinkedHashSet" | + "LinkedList" | + "ListResourceBundle" | + "Locale" | + "Locale.Builder" | + "Locale.LanguageRange" | + "LongSummaryStatistics" | + "Objects" | + "Observable" | + "Optional" | + "OptionalDouble" | + "OptionalInt" | + "OptionalLong" | + "PriorityQueue" | + "Properties" | + "PropertyPermission" | + "PropertyResourceBundle" | + "Random" | + "ResourceBundle" | + "ResourceBundle.Control" | + "Scanner" | + "ServiceLoader" | + "SimpleTimeZone" | + "Spliterators" | + "Spliterators.AbstractDoubleSpliterator" | + "Spliterators.AbstractIntSpliterator" | + "Spliterators.AbstractLongSpliterator" | + "Spliterators.AbstractSpliterator" | + "SpliteratorRandom" | + "Stack" | + "StringJoiner" | + "StringTokenizer" | + "Timer" | + "TimerTask" | + "TimeZone" | + "TreeMap" | + "TreeSet" | + "UUID" | + "Vector" | + "WeakHashMap" | + + "Formatter.BigDecimalLayoutForm" | + "Locale.Category" | + "Locale.FilteringMode" | + + "ConcurrentModificationException" | + "DuplicateFormatFlagsException" | + "EmptyStackException" | + "FormatFlagsConversionMismatchException" | + "FormatterClosedException" | + "IllegalFormatCodePointException" | + "IllegalFormatConversionException" | + "IllegalFormatException" | + "IllegalFormatFlagsException" | + "IllegalFormatPrecisionException" | + "IllegalFormatWidthException" | + "IllformedLocaleException" | + "InputMismatchException" | + "InvalidPropertiesFormatException" | + "MissingFormatArgumentException" | + "MissingFormatWidthException" | + "MissingResourceException" | + "NoSuchElementException" | + "TooManyListenersException" | + "UnknownFormatConversionException" | + "UnknownFormatFlagsException" | + + "ServiceConfigurationError" { addToken(Token.FUNCTION); } /* Commonly used methods added to Object class */ "addShutdownHook" | @@ -534,18 +793,41 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } - {StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } - {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } - {ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + \" { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } - {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } - {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } + {DocCommentBegin} { start = zzMarkedPos-3; yybegin(DOCCOMMENT); } + {LineCommentBegin} { start = zzMarkedPos-2; yybegin(EOL_COMMENT); } + + /* Regular expressions. */ + {Regex} { + boolean highlightedAsRegex = false; + if (zzBuffer[zzStartRead]=='~' || firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } /* Annotations. */ - {Annotation} { addToken(Token.VARIABLE); /* FIXME: Add token type to Token? */ } + {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } @@ -556,6 +838,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } @@ -605,12 +888,23 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) } + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + { - [^\"\\\n]* {} + [^\"\\\$\n]* {} \\.? { /* Skip escaped chars, handles case: '\"""'. */ } \"\"\" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} \" {} - \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } } @@ -620,6 +914,17 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) \\.? { /* Skip escaped chars, handles case: "\'''". */ } \'\'\' { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); } \' {} - \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } } + + { + [^\n\\\$\"]+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } + \\.? { /* Skip escaped chars. */ } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } +} + diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java old mode 100644 new mode 100755 index e2f68b118..592c4cd5e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/GroovyTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 3/20/10 12:46 AM */ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 6:49 PM */ /* * 09/28/2007 * * GroovyTokenMaker.java - Scanner for the Groovy programming language. - * Copyright (C) 2007 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,3261 +15,5568 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for the Groovy programming language. - *

                      - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                      - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                      - * + * Scanner for the Groovy programming language.

                      + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                      + * * If you wish to regenerate this file yourself, keep in mind the following: *

                        - *
                      • The generated GroovyTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                      • - *
                      • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                      • - *
                      • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                      • + *
                      • The generated GroovyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                      • + *
                      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                      • + *
                      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                      • *
                      - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class GroovyTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int MULTILINE_STRING_DOUBLE = 3; - public static final int DOCCOMMENT = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 1; - public static final int MULTILINE_STRING_SINGLE = 4; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\21\1\10\1\0\1\21\1\16\22\0\1\21\1\50\1\15" + - "\1\17\1\20\1\50\1\52\1\7\2\75\1\23\1\43\1\42\1\31" + - "\1\32\1\22\1\4\3\6\4\6\2\3\1\53\1\42\1\44\1\45" + - "\1\47\1\51\1\74\1\77\1\5\1\100\1\65\1\30\1\26\1\113" + - "\1\115\1\103\2\1\1\25\1\106\1\107\1\110\1\112\1\1\1\72" + - "\1\101\1\105\1\104\1\114\1\116\1\24\2\1\1\75\1\11\1\75" + - "\1\46\1\2\1\0\1\36\1\14\1\61\1\57\1\35\1\27\1\70" + - "\1\55\1\63\1\111\1\73\1\37\1\64\1\13\1\56\1\60\1\102" + - "\1\34\1\40\1\33\1\12\1\67\1\66\1\62\1\71\1\76\1\117" + - "\1\46\1\41\1\54\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\2\1\1\2\1\3\2\4\1\3\1\5\1\6" + - "\3\3\1\7\1\2\1\10\2\11\4\3\1\11\7\3" + - "\1\12\1\3\6\11\13\3\1\13\13\3\1\1\1\14" + - "\5\1\1\15\10\1\1\16\1\17\3\1\1\20\1\21" + - "\1\2\1\22\1\4\1\23\1\22\1\23\1\22\1\24" + - "\1\22\2\3\1\5\1\25\1\0\1\5\7\3\3\7" + - "\1\26\1\27\1\30\25\3\1\31\12\3\1\0\1\11" + - "\3\3\1\31\7\3\3\31\1\32\14\3\1\13\33\3" + - "\1\33\4\0\1\34\4\0\1\35\16\0\1\17\2\0" + - "\1\21\1\2\1\23\1\0\2\24\2\3\1\25\1\36" + - "\1\0\1\5\1\37\1\5\1\32\6\3\1\26\1\7" + - "\1\40\1\7\1\41\1\42\46\3\1\31\13\3\1\43" + - "\21\3\1\2\44\3\33\0\1\44\1\45\1\2\1\3" + - "\1\0\1\37\1\5\4\3\1\7\1\46\4\3\2\32" + - "\2\3\1\47\5\3\1\32\43\3\1\2\43\3\2\0" + - "\1\50\2\0\1\51\10\0\1\52\15\0\1\2\1\3" + - "\1\0\1\5\1\3\1\7\1\3\1\31\6\3\1\31" + - "\16\3\1\32\14\3\1\2\4\3\1\32\37\3\33\0" + - "\1\2\1\3\1\0\1\5\1\3\1\7\33\3\1\2" + - "\14\3\1\32\16\3\1\32\2\3\1\32\7\3\23\0" + - "\22\3\1\32\1\2\33\3\1\0\12\3\1\32\2\3" + - "\2\0\1\52\6\0\54\3\1\0\13\3\11\0\3\3" + - "\1\32\22\3\1\32\23\3\1\0\13\3\5\0\20\3" + - "\1\0\20\3\1\0\10\3\5\0\16\3\2\0\15\3" + - "\1\0\5\3\2\0\13\3\2\0\15\3\1\32\16\3" + - "\2\0\20\3\2\0\12\3\2\0\10\3\1\0\5\3" + - "\1\0\5\3\1\0\4\3\1\0\4\3\1\0\2\3" + - "\1\0"; - - private static int[] zzUnpackAction() { - int[] result = new int[1099]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } + /** This character denotes the end of file */ + public static final int YYEOF = -1; - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } + /** lexical states */ + public static final int EOL_COMMENT = 3; + public static final int MULTILINE_STRING_DOUBLE = 4; + public static final int DOCCOMMENT = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 1; + public static final int STRING_DOUBLE = 6; + public static final int MULTILINE_STRING_SINGLE = 5; - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\120\0\240\0\360\0\u0140\0\u0190\0\u01e0\0\u0230" + - "\0\u0280\0\u02d0\0\u0320\0\u0370\0\u03c0\0\u0410\0\u0460\0\u04b0" + - "\0\u0370\0\u0500\0\u0550\0\u05a0\0\u05f0\0\u0640\0\u0690\0\u06e0" + - "\0\u0730\0\u0780\0\u07d0\0\u0820\0\u0870\0\u08c0\0\u0910\0\u0960" + - "\0\u0370\0\u0370\0\u09b0\0\u0a00\0\u0a50\0\u0aa0\0\u0370\0\u0af0" + - "\0\u0b40\0\u0b90\0\u0be0\0\u0c30\0\u0c80\0\u0cd0\0\u0d20\0\u0d70" + - "\0\u0dc0\0\u0e10\0\u0e60\0\u0eb0\0\u0f00\0\u0f50\0\u0fa0\0\u0ff0" + - "\0\u1040\0\u1090\0\u10e0\0\u1130\0\u1180\0\u11d0\0\u1220\0\u1270" + - "\0\u0370\0\u12c0\0\u1310\0\u1360\0\u13b0\0\u1400\0\u0370\0\u1450" + - "\0\u14a0\0\u14f0\0\u1540\0\u1590\0\u15e0\0\u1630\0\u1680\0\u0370" + - "\0\u16d0\0\u1720\0\u1770\0\u17c0\0\u0370\0\u1810\0\u1860\0\u18b0" + - "\0\u18b0\0\u18b0\0\u1900\0\u1950\0\u19a0\0\u19f0\0\u1a40\0\u1a90" + - "\0\u1ae0\0\u1b30\0\u1b80\0\u1bd0\0\u1c20\0\u1c70\0\u1cc0\0\u1d10" + - "\0\u1d60\0\u1db0\0\u1e00\0\u1e50\0\u1ea0\0\u1ef0\0\u1f40\0\u1f90" + - "\0\u1fe0\0\u2030\0\u2080\0\u20d0\0\u2120\0\u2170\0\u21c0\0\u2210" + - "\0\u2260\0\u22b0\0\u2300\0\u2350\0\u23a0\0\u23f0\0\u2440\0\u2490" + - "\0\u24e0\0\u2530\0\u2580\0\u25d0\0\u2620\0\u2670\0\u26c0\0\u2710" + - "\0\u2760\0\u27b0\0\u2800\0\u2850\0\u28a0\0\u28f0\0\u2940\0\u2990" + - "\0\u29e0\0\u2a30\0\u05a0\0\u2a80\0\u2ad0\0\u2b20\0\u2b70\0\u2bc0" + - "\0\u2c10\0\u2c60\0\u2cb0\0\u2d00\0\u2d50\0\u2da0\0\u2df0\0\u2e40" + - "\0\u01e0\0\u2e90\0\u2ee0\0\u2f30\0\u2f80\0\u2fd0\0\u3020\0\u3070" + - "\0\u30c0\0\u3110\0\u3160\0\u31b0\0\u3200\0\u3250\0\u32a0\0\u32f0" + - "\0\u3340\0\u3390\0\u33e0\0\u3430\0\u3480\0\u34d0\0\u3520\0\u3570" + - "\0\u35c0\0\u3610\0\u3660\0\u36b0\0\u3700\0\u3750\0\u37a0\0\u37f0" + - "\0\u3840\0\u3890\0\u38e0\0\u3930\0\u3980\0\u39d0\0\u3a20\0\u3a70" + - "\0\u3ac0\0\u3b10\0\u3b60\0\u0370\0\u3bb0\0\u3c00\0\u3c50\0\u3ca0" + - "\0\u0370\0\u3cf0\0\u3d40\0\u3d90\0\u3de0\0\u0370\0\u3e30\0\u3e80" + - "\0\u3ed0\0\u3f20\0\u3f70\0\u3fc0\0\u4010\0\u4060\0\u40b0\0\u4100" + - "\0\u4150\0\u41a0\0\u41f0\0\u4240\0\u0370\0\u4290\0\u42e0\0\u0370" + - "\0\u4330\0\u4380\0\u43d0\0\u18b0\0\u4420\0\u4470\0\u44c0\0\u0370" + - "\0\u0370\0\u4510\0\u4560\0\u1bd0\0\u45b0\0\u01e0\0\u4600\0\u4650" + - "\0\u46a0\0\u46f0\0\u4740\0\u4790\0\u0370\0\u47e0\0\u0370\0\u4830" + - "\0\u0370\0\u4880\0\u48d0\0\u4920\0\u4970\0\u49c0\0\u4a10\0\u4a60" + - "\0\u4ab0\0\u4b00\0\u4b50\0\u4ba0\0\u4bf0\0\u4c40\0\u4c90\0\u4ce0" + - "\0\u4d30\0\u4d80\0\u4dd0\0\u4e20\0\u4e70\0\u4ec0\0\u4f10\0\u4f60" + - "\0\u4fb0\0\u5000\0\u5050\0\u50a0\0\u50f0\0\u5140\0\u5190\0\u51e0" + - "\0\u5230\0\u5280\0\u52d0\0\u5320\0\u5370\0\u53c0\0\u5410\0\u5460" + - "\0\u54b0\0\u5500\0\u5550\0\u55a0\0\u55f0\0\u5640\0\u5690\0\u56e0" + - "\0\u5730\0\u5780\0\u57d0\0\u5820\0\u01e0\0\u5870\0\u58c0\0\u5910" + - "\0\u5960\0\u59b0\0\u5a00\0\u5a50\0\u5aa0\0\u5af0\0\u5b40\0\u5b90" + - "\0\u5be0\0\u5c30\0\u5c80\0\u5cd0\0\u5d20\0\u5d70\0\u5dc0\0\u5e10" + - "\0\u5e60\0\u5eb0\0\u5f00\0\u5f50\0\u5fa0\0\u5ff0\0\u6040\0\u6090" + - "\0\u60e0\0\u6130\0\u6180\0\u61d0\0\u6220\0\u6270\0\u62c0\0\u6310" + - "\0\u6360\0\u63b0\0\u6400\0\u6450\0\u64a0\0\u64f0\0\u6540\0\u6590" + - "\0\u65e0\0\u6630\0\u6680\0\u66d0\0\u6720\0\u6770\0\u67c0\0\u6810" + - "\0\u6860\0\u68b0\0\u6900\0\u6950\0\u69a0\0\u69f0\0\u6a40\0\u6a90" + - "\0\u6ae0\0\u6b30\0\u6b80\0\u6bd0\0\u6c20\0\u6c70\0\u6cc0\0\u6d10" + - "\0\u6d60\0\u6db0\0\u6e00\0\u6e50\0\u6ea0\0\u6ef0\0\u6f40\0\u6f90" + - "\0\u6fe0\0\u7030\0\u7080\0\u70d0\0\u7120\0\u7170\0\u0370\0\u0370" + - "\0\u71c0\0\u7210\0\u7260\0\u0370\0\u72b0\0\u7300\0\u7350\0\u73a0" + - "\0\u73f0\0\u7440\0\u0370\0\u7490\0\u74e0\0\u7530\0\u7580\0\u75d0" + - "\0\u7620\0\u7670\0\u76c0\0\u01e0\0\u7710\0\u7760\0\u77b0\0\u7800" + - "\0\u7850\0\u78a0\0\u78f0\0\u7940\0\u7990\0\u79e0\0\u7a30\0\u7a80" + - "\0\u7ad0\0\u7b20\0\u7b70\0\u7bc0\0\u7c10\0\u7c60\0\u7cb0\0\u7d00" + - "\0\u7d50\0\u7da0\0\u7df0\0\u7e40\0\u7e90\0\u7ee0\0\u7f30\0\u7f80" + - "\0\u7fd0\0\u8020\0\u8070\0\u80c0\0\u8110\0\u8160\0\u81b0\0\u8200" + - "\0\u8250\0\u82a0\0\u82f0\0\u8340\0\u8390\0\u83e0\0\u8430\0\u8480" + - "\0\u84d0\0\u8520\0\u8570\0\u85c0\0\u8610\0\u8660\0\u86b0\0\u8700" + - "\0\u8750\0\u87a0\0\u87f0\0\u8840\0\u8890\0\u88e0\0\u8930\0\u8980" + - "\0\u89d0\0\u8a20\0\u8a70\0\u8ac0\0\u8b10\0\u8b60\0\u8bb0\0\u8c00" + - "\0\u8c50\0\u8ca0\0\u8cf0\0\u8d40\0\u8d90\0\u8de0\0\u8e30\0\u8e80" + - "\0\u8ed0\0\u8f20\0\u8f70\0\u8fc0\0\u9010\0\u9060\0\u90b0\0\u9100" + - "\0\u9150\0\u91a0\0\u91f0\0\u9240\0\u9290\0\u92e0\0\u9330\0\u0370" + - "\0\u9380\0\u93d0\0\u9420\0\u9470\0\u94c0\0\u9510\0\u9560\0\u95b0" + - "\0\u9600\0\u9650\0\u96a0\0\u96f0\0\u9740\0\u9790\0\u97e0\0\u9830" + - "\0\u9880\0\u98d0\0\u9920\0\u9970\0\u99c0\0\u9a10\0\u9a60\0\u9ab0" + - "\0\u9b00\0\u9b50\0\u9ba0\0\u4ce0\0\u9bf0\0\u9c40\0\u9c90\0\u9ce0" + - "\0\u9d30\0\u9d80\0\u9dd0\0\u9e20\0\u9e70\0\u9ec0\0\u9f10\0\u9f60" + - "\0\u9fb0\0\ua000\0\ua050\0\ua0a0\0\ua0f0\0\ua140\0\ua190\0\ua1e0" + - "\0\ua230\0\ua280\0\ua2d0\0\ua320\0\ua370\0\ua3c0\0\ua410\0\ua460" + - "\0\ua4b0\0\ua500\0\ua550\0\ua5a0\0\ua5f0\0\ua640\0\ua690\0\ua6e0" + - "\0\ua730\0\ua780\0\ua7d0\0\ua820\0\ua870\0\ua8c0\0\ua910\0\ua960" + - "\0\ua9b0\0\uaa00\0\uaa50\0\uaaa0\0\uaaf0\0\uab40\0\uab90\0\uabe0" + - "\0\uac30\0\uac80\0\uacd0\0\uad20\0\uad70\0\uadc0\0\uae10\0\uae60" + - "\0\uaeb0\0\uaf00\0\uaf50\0\uafa0\0\uaff0\0\u8fc0\0\ub040\0\u90b0" + - "\0\ub090\0\ub0e0\0\ub130\0\ub180\0\ub1d0\0\ub220\0\ub270\0\ub2c0" + - "\0\ub310\0\ub360\0\ub3b0\0\ub400\0\ub450\0\ub4a0\0\ub4f0\0\ub540" + - "\0\ub590\0\ub5e0\0\ub630\0\ub680\0\ub6d0\0\ub720\0\ub770\0\ub7c0" + - "\0\ub810\0\ub860\0\ub8b0\0\ub900\0\ub950\0\ub9a0\0\ub9f0\0\uba40" + - "\0\uba90\0\ubae0\0\ubb30\0\ubb80\0\ubbd0\0\ubc20\0\ubc70\0\ubcc0" + - "\0\ubd10\0\ubd60\0\ubdb0\0\ube00\0\ube50\0\ubea0\0\ubef0\0\ubf40" + - "\0\ubf90\0\ubfe0\0\uc030\0\uc080\0\uc0d0\0\uc120\0\uc170\0\uc1c0" + - "\0\uc210\0\uc260\0\uc2b0\0\uc300\0\uc350\0\uc3a0\0\uc3f0\0\uc440" + - "\0\uc490\0\uc4e0\0\uc530\0\uc580\0\uc5d0\0\uc620\0\uc670\0\uc6c0" + - "\0\uc710\0\uc760\0\uc7b0\0\uc800\0\uc850\0\uc8a0\0\uc8f0\0\uc940" + - "\0\uc990\0\uc9e0\0\uca30\0\uca80\0\ucad0\0\ucb20\0\ucb70\0\ucbc0" + - "\0\ucc10\0\ucc60\0\uccb0\0\ucd00\0\ucd50\0\ucda0\0\ucdf0\0\uce40" + - "\0\uce90\0\ucee0\0\ucf30\0\ucf80\0\ucfd0\0\ud020\0\ud070\0\ud0c0" + - "\0\ud110\0\ud160\0\ud1b0\0\ud200\0\ud250\0\ud2a0\0\ud2f0\0\ud340" + - "\0\ud390\0\ud3e0\0\ud430\0\ud480\0\ud4d0\0\ud520\0\ud570\0\ud5c0" + - "\0\ud610\0\ud660\0\ud6b0\0\ud700\0\ud750\0\ud7a0\0\ud7f0\0\ud840" + - "\0\ud890\0\ud8e0\0\ud930\0\ud980\0\ud9d0\0\uda20\0\uda70\0\udac0" + - "\0\udb10\0\udb60\0\udbb0\0\udc00\0\udc50\0\udca0\0\udcf0\0\udd40" + - "\0\udd90\0\udde0\0\ude30\0\ude80\0\uded0\0\udf20\0\udf70\0\udfc0" + - "\0\ue010\0\ue060\0\ue0b0\0\ue100\0\ue150\0\ue1a0\0\ue1f0\0\ue240" + - "\0\ue290\0\ue2e0\0\ue330\0\ue380\0\ue3d0\0\ue420\0\ue470\0\ue4c0" + - "\0\ue510\0\ue560\0\ue5b0\0\ue600\0\ue650\0\ue6a0\0\ue6f0\0\ue740" + - "\0\ue790\0\ue7e0\0\ue830\0\ue880\0\ue8d0\0\ue920\0\ue970\0\ue9c0" + - "\0\uea10\0\uea60\0\ueab0\0\ueb00\0\ueb50\0\ueba0\0\uebf0\0\uec40" + - "\0\uec90\0\uece0\0\ued30\0\ued80\0\uedd0\0\uee20\0\uee70\0\ueec0" + - "\0\uef10\0\uef60\0\uefb0\0\uf000\0\uf050\0\uf0a0\0\uf0f0\0\uf140" + - "\0\uf190\0\uf1e0\0\uf230\0\uf280\0\uf2d0\0\uf320\0\uf370\0\uf3c0" + - "\0\uf410\0\uf460\0\uf4b0\0\uf500\0\uf550\0\uf5a0\0\uf5f0\0\uf640" + - "\0\uf690\0\uf6e0\0\uf730\0\uf780\0\uf7d0\0\uf820\0\uf870\0\uf8c0" + - "\0\uf910\0\uf960\0\uf9b0\0\ufa00\0\ufa50\0\ufaa0\0\ufaf0\0\ufb40" + - "\0\ufb90\0\ufbe0\0\ufc30\0\ufc80\0\ufcd0\0\ufd20\0\ufd70\0\ufdc0" + - "\0\ufe10\0\ufe60\0\ufeb0\0\uff00\0\uff50\0\uffa0\0\ufff0\1\100" + - "\1\220\1\340\1\u0130\1\u0180\1\u01d0\1\u0220\1\u0270\1\u02c0" + - "\1\u0310\1\u0360\1\u03b0\1\u0400\1\u0450\1\u04a0\1\u04f0\1\u0540" + - "\1\u0590\1\u05e0\1\u0630\1\u0680\1\u06d0\1\u0720\1\u0770\1\u07c0" + - "\1\u0810\1\u0860\1\u08b0\1\u0900\1\u0950\1\u09a0\1\u09f0\1\u0a40" + - "\1\u0a90\1\u0ae0\1\u0b30\1\u0b80\1\u0bd0\1\u0c20\1\u0c70\1\u0cc0" + - "\1\u0d10\1\u0d60\1\u0db0\1\u0e00\1\u0e50\1\u0ea0\1\u0ef0\1\u0f40" + - "\1\u0f90\1\u0fe0\1\u1030\1\u1080\1\u10d0\1\u1120\1\u1170\1\u11c0" + - "\1\u1210\1\u1260\1\u12b0\1\u1300\1\u1350\1\u13a0\1\u13f0\1\u1440" + - "\1\u1490\1\u14e0\1\u1530\1\u1580\1\u15d0\1\u1620\1\u1670\1\u16c0" + - "\1\u1710\1\u1760\1\u17b0\1\u1800\1\u1850\1\u18a0\1\u18f0\1\u1940" + - "\1\u1990\1\u19e0\1\u1a30\1\u1a80\1\u1ad0\1\u1b20\1\u1b70\1\u1bc0" + - "\1\u1c10\1\u1c60\1\u1cb0\1\u1d00\1\u1d50\1\u1da0\1\u1df0\1\u1e40" + - "\1\u1e90\1\u1ee0\1\u1f30\1\u1f80\1\u1fd0\1\u2020\1\u2070\1\u20c0" + - "\1\u2110\1\u2160\1\u21b0\1\u2200\1\u2250\1\u22a0\1\u22f0\1\u2340" + - "\1\u2390\1\u23e0\1\u2430\1\u2480\1\u24d0\1\u2520\1\u2570\1\u25c0" + - "\1\u2610\1\u2660\1\u26b0\1\u2700\1\u2750\1\u27a0\1\u27f0\1\u2840" + - "\1\u2890\1\u28e0\1\u2930\1\u2980\1\u29d0\1\u2a20\1\u2a70\1\u2ac0" + - "\1\u2b10\1\u2b60\1\u2bb0\1\u2c00\1\u2c50\1\u2ca0\1\u2cf0\1\u2d40" + - "\1\u2d90\1\u2de0\1\u2e30\1\u2e80\1\u2ed0\1\u2f20\1\u2f70\1\u2fc0" + - "\1\u3010\1\u3060\1\u30b0\1\u3100\1\u3150\1\u31a0\1\u31f0\1\u3240" + - "\1\u3290\1\u32e0\0\u0370\1\u3330\1\u3380\1\u33d0\1\u3420\1\u3470" + - "\1\u34c0\1\u3510\1\u3560\1\u35b0\1\u3600\1\u3650\1\u36a0\1\u36f0" + - "\1\u3740\1\u3790\1\u37e0\1\u3830\1\u3880\1\u38d0\1\u3920\1\u3970" + - "\1\u39c0\1\u3a10\1\u3a60\1\u3ab0\1\u3b00\1\u3b50\1\u3ba0\1\u3bf0" + - "\1\u3c40\1\u3c90\1\u3ce0\1\u3d30\1\u3d80\1\u3dd0\1\u3e20\1\u3e70" + - "\1\u3ec0\1\u3f10\1\u3f60\1\u3fb0\1\u4000\1\u4050\1\u40a0\1\u40f0" + - "\1\u4140\1\u4190\1\u41e0\1\u4230\1\u4280\1\u42d0\1\u4320\1\u4370" + - "\1\u43c0\1\u4410\1\u4460\1\u44b0\1\u4500\1\u4550\1\u45a0\1\u45f0" + - "\1\u4640\1\u4690\1\u46e0\1\u4730\1\u4780\1\u47d0\1\u4820\1\u4870" + - "\1\u48c0\1\u4910\1\u4960\1\u49b0\1\u4a00\1\u4a50\1\u4aa0\1\u4af0" + - "\1\u4b40\1\u4b90\1\u4be0"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[1099]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\22\1\21\1\0\1\22\1\16\22\0\1\22\1\53\1\13"+ + "\1\17\1\20\1\53\1\55\1\10\2\44\1\24\1\46\1\45\1\33"+ + "\1\34\1\23\1\4\1\5\2\7\1\123\1\7\1\122\1\7\2\3"+ + "\1\56\1\45\1\47\1\50\1\52\1\54\1\100\1\102\1\26\1\6"+ + "\1\67\1\32\1\31\1\117\1\110\1\105\1\125\1\1\1\25\1\112"+ + "\1\113\1\114\1\116\1\121\1\74\1\103\1\106\1\107\1\111\1\120"+ + "\1\30\1\1\1\124\1\44\1\12\1\44\1\51\1\2\1\0\1\40"+ + "\1\27\1\63\1\61\1\37\1\15\1\72\1\57\1\65\1\115\1\75"+ + "\1\41\1\66\1\14\1\60\1\62\1\104\1\36\1\42\1\35\1\11"+ + "\1\71\1\70\1\64\1\73\1\101\1\76\1\51\1\77\1\43\uff81\0"; - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\4\0\2\1\1\0\1\2\1\3\2\4\1\3\1\5"+ + "\1\3\1\6\2\3\1\2\1\7\1\10\2\11\5\3"+ + "\1\11\7\3\1\11\1\12\1\3\6\11\13\3\1\13"+ + "\16\3\2\1\1\14\5\1\1\15\10\1\1\16\3\1"+ + "\1\17\2\1\1\20\2\1\1\21\1\22\1\23\1\24"+ + "\1\25\1\2\2\26\1\27\1\4\1\26\1\27\2\26"+ + "\1\30\2\26\5\3\1\5\1\31\1\5\1\0\1\3"+ + "\1\0\7\3\2\0\1\32\1\33\1\11\37\3\1\34"+ + "\12\3\2\0\1\11\3\3\1\34\7\3\3\34\1\35"+ + "\22\3\1\13\57\3\2\0\1\36\4\0\1\37\2\0"+ + "\1\40\22\0\1\17\1\0\1\41\2\0\1\21\1\23"+ + "\1\2\1\4\1\27\1\0\2\30\1\4\1\30\10\3"+ + "\1\31\1\42\1\5\1\43\1\5\1\0\1\35\1\3"+ + "\1\44\5\3\1\45\1\46\65\3\1\34\13\3\1\47"+ + "\30\3\1\2\54\3\1\35\24\3\37\0\1\50\2\0"+ + "\1\51\1\2\2\26\12\3\1\43\1\5\1\0\4\3"+ + "\1\35\1\52\1\35\3\3\1\35\5\3\1\35\2\3"+ + "\1\47\4\3\2\35\6\3\1\53\5\3\1\35\54\3"+ + "\1\2\56\3\1\0\31\3\2\0\1\54\2\0\1\55"+ + "\15\0\1\56\12\0\1\57\1\0\1\41\1\2\2\3"+ + "\1\35\11\3\1\5\1\0\1\34\42\3\1\34\20\3"+ + "\1\35\24\3\1\2\11\3\1\35\31\3\1\35\11\3"+ + "\1\0\31\3\36\0\1\2\15\3\1\5\1\0\4\3"+ + "\1\35\5\3\1\35\27\3\1\60\31\3\1\35\1\2"+ + "\11\3\1\35\30\3\1\35\13\3\1\0\2\3\1\35"+ + "\10\3\1\35\12\3\23\0\14\3\1\0\2\3\1\0"+ + "\3\3\1\0\45\3\1\35\2\3\1\2\43\3\1\0"+ + "\14\3\1\0\23\3\1\35\6\3\5\0\1\56\4\0"+ + "\1\35\14\3\4\0\3\3\2\0\102\3\2\0\11\3"+ + "\1\0\20\3\1\35\12\3\12\0\4\3\1\35\6\3"+ + "\4\0\3\3\1\0\3\3\1\35\10\3\1\35\11\3"+ + "\1\35\47\3\2\0\10\3\1\35\27\3\5\0\4\3"+ + "\1\0\2\3\1\35\2\3\4\0\1\3\1\0\3\3"+ + "\1\0\57\3\2\0\32\3\5\0\3\3\2\0\3\3"+ + "\4\0\3\3\1\0\1\35\14\3\1\35\10\3\1\35"+ + "\5\3\1\35\12\3\2\0\15\3\1\35\5\3\2\0"+ + "\2\3\2\0\3\3\4\0\3\3\1\0\10\3\1\35"+ + "\3\3\1\0\1\3\1\35\2\3\1\35\2\3\1\0"+ + "\1\35\15\3\1\0\14\3\1\35\3\3\1\35\5\3"+ + "\2\0\2\3\3\0\2\3\1\0\2\3\1\35\10\3"+ + "\1\0\2\3\2\0\12\3\1\0\23\3\2\0\1\3"+ + "\2\0\2\3\1\0\5\3\1\35\1\3\1\0\2\3"+ + "\2\0\12\3\1\0\14\3\1\35\2\3\2\0\1\3"+ + "\2\0\2\3\1\0\4\3\1\0\1\3\1\0\1\3"+ + "\5\0\11\3\1\0\11\3\1\0\2\3\1\0\1\3"+ + "\2\0\1\3\1\0\2\3\1\0\1\3\5\0\10\3"+ + "\1\0\6\3\1\0\1\3\3\0\1\3\1\0\1\3"+ + "\1\0\1\3\5\0\5\3\1\0\3\3\1\35\1\3"+ + "\1\0\1\35\4\0\1\3\1\0\1\3\1\0\1\3"+ + "\4\0\3\3\1\0\3\3\1\0\1\35\4\0\1\3"+ + "\1\0\1\3\4\0\2\3\1\0\2\3\6\0\1\3"+ + "\1\0\1\3\4\0\1\3\7\0\1\3\1\0\1\3"+ + "\30\0\1\35\37\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[2058]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\2\7\1\10\1\11\1\12\1\10\1\13\1\14" + - "\1\6\1\15\1\16\1\17\1\20\1\21\1\6\1\7" + - "\1\22\1\23\1\24\1\7\1\25\1\26\1\27\1\30" + - "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40" + - "\1\41\1\42\1\43\1\44\1\45\1\24\1\46\1\24" + - "\1\47\1\50\2\47\1\51\1\7\1\52\1\53\1\54" + - "\1\7\1\55\1\56\1\57\1\60\1\61\1\62\1\7" + - "\1\63\1\7\1\64\1\41\1\7\1\65\1\66\1\67" + - "\1\7\1\70\1\71\1\72\1\73\1\74\1\75\1\7" + - "\1\76\1\7\1\77\2\7\1\41\10\100\1\101\12\100" + - "\1\102\3\100\1\103\25\100\1\104\10\100\1\105\31\100" + - "\10\106\1\107\12\106\1\110\3\106\1\111\14\106\1\112" + - "\10\106\1\113\10\106\1\114\5\106\1\115\22\106\1\116" + - "\10\117\1\120\1\121\3\117\1\122\102\117\7\123\1\124" + - "\1\125\1\126\106\123\7\6\2\0\4\6\2\0\2\6" + - "\3\0\5\6\2\0\6\6\14\0\20\6\1\0\21\6" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\3\130\2\10\1\130\1\10\2\0" + - "\4\130\2\0\2\130\3\0\1\130\1\131\2\132\1\133" + - "\1\0\1\134\2\130\1\133\1\130\1\131\1\130\14\0" + - "\2\130\1\132\5\130\1\132\7\130\1\0\21\130\1\0" + - "\3\130\1\135\1\136\1\130\1\136\2\0\4\130\2\0" + - "\2\130\3\0\1\137\1\131\2\132\1\133\1\0\1\134" + - "\2\130\1\133\1\130\1\131\1\130\14\0\2\130\1\132" + - "\2\130\1\137\2\130\1\132\7\130\1\0\21\130\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\7\1\140\12\7" + - "\1\141\2\7\1\6\1\0\21\7\1\0\7\142\1\143" + - "\1\144\1\145\106\142\120\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\146\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\147\2\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\150\1\151\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\152\4\7\14\0\1\7\1\153\12\7\1\154" + - "\2\7\1\6\1\0\21\7\1\0\10\155\1\156\1\157" + - "\3\155\1\160\102\155\21\0\1\22\120\0\1\161\1\162" + - "\21\0\1\47\117\0\1\47\52\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\163\4\7\1\164\10\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\165" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\166\1\167\1\7\14\0\1\7" + - "\1\170\4\7\1\171\10\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\1\7\1\172\1\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\173\4\7" + - "\14\0\5\7\1\174\11\7\1\6\1\0\21\7\32\0" + - "\1\47\13\0\1\47\55\0\2\134\1\0\1\134\111\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\175\1\176\3\7\14\0" + - "\1\177\1\200\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\201\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\202" + - "\1\203\1\7\14\0\5\7\1\204\4\7\1\205\4\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\206\1\207\2\0\1\6\1\7\3\0\5\7" + - "\2\0\5\7\1\210\14\0\2\7\1\211\14\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\212\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\213\2\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\214\1\7\1\215\1\7\1\216" + - "\1\7\14\0\1\217\2\7\1\220\5\7\1\221\2\7" + - "\1\222\2\7\1\6\1\0\21\7\44\0\1\47\1\0" + - "\1\47\116\0\1\223\1\47\117\0\1\47\6\0\1\47" + - "\110\0\1\47\1\0\1\224\115\0\1\47\4\0\1\47" + - "\45\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\225\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\226\2\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\227\3\7\14\0\1\7\1\230\15\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\231\2\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\232\1\7\1\233\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\234" + - "\1\235\1\7\14\0\1\236\1\237\15\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\1\7\1\240" + - "\1\7\2\0\1\6\1\7\3\0\3\7\1\241\1\7" + - "\2\0\1\242\4\7\1\243\14\0\2\7\1\244\4\7" + - "\1\245\7\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\246\3\7\14\0\6\7\1\247\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\250\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\251\5\7\1\252" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\253\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\254\1\255\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\256\2\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\257\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\2\260\2\6\1\260\1\6" + - "\2\0\1\6\3\260\2\0\1\6\1\260\3\0\5\260" + - "\2\0\6\260\14\0\17\260\1\6\1\0\21\260\1\0" + - "\1\6\6\7\2\0\1\127\2\7\1\261\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\262\3\7\1\263" + - "\14\0\3\7\1\264\13\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\4\7\1\265\1\7\14\0\1\266" + - "\1\267\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\270\1\7\1\271\3\7\14\0\1\272\13\7" + - "\1\273\2\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\274\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\275\3\7\1\276\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\277\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\300\13\7" + - "\1\301\2\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\252\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\1\302\2\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\303" + - "\3\7\14\0\1\7\1\304\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\305\1\7\1\306" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\307\1\7\1\310\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\311" + - "\3\7\14\0\1\7\1\312\4\7\1\313\10\7\1\6" + - "\1\0\21\7\1\0\10\100\1\0\12\100\1\0\3\100" + - "\1\0\25\100\1\0\10\100\1\0\31\100\22\0\1\314" + - "\130\0\1\315\27\0\1\316\67\0\1\317\152\0\1\320" + - "\31\0\10\106\1\0\12\106\1\0\3\106\1\0\14\106" + - "\1\0\10\106\1\0\10\106\1\0\5\106\1\0\22\106" + - "\23\0\1\321\130\0\1\322\27\0\1\323\35\0\1\324" + - "\3\0\1\324\4\0\3\324\5\0\1\325\1\0\5\324" + - "\2\0\6\324\6\0\1\326\5\0\17\324\2\0\21\324" + - "\34\0\1\327\152\0\1\330\64\0\1\331\1\332\1\333" + - "\1\334\1\0\1\335\15\0\1\336\1\337\1\340\1\341" + - "\1\0\1\342\3\0\1\343\124\0\1\344\23\0\10\117" + - "\2\0\3\117\1\0\102\117\10\345\1\0\107\345\15\0" + - "\1\346\102\0\7\123\3\0\106\123\7\0\1\347\110\0" + - "\10\350\1\0\107\350\7\6\2\0\1\6\1\351\2\6" + - "\2\0\2\6\3\0\5\6\2\0\6\6\14\0\20\6" + - "\1\0\21\6\1\0\7\130\2\0\4\130\2\0\2\130" + - "\3\0\5\130\2\0\6\130\14\0\20\130\1\0\21\130" + - "\1\0\3\130\2\352\1\130\1\352\2\0\4\130\2\0" + - "\2\130\3\0\5\130\1\353\1\0\6\130\2\0\1\353" + - "\11\0\20\130\1\0\21\130\1\0\3\130\2\134\1\130" + - "\1\134\2\0\4\130\2\0\2\130\3\0\2\130\2\132" + - "\1\133\2\0\2\130\1\133\3\130\14\0\2\130\1\132" + - "\5\130\1\132\7\130\1\0\21\130\1\0\3\130\2\135" + - "\1\130\1\135\2\0\4\130\2\0\2\130\3\0\2\130" + - "\2\132\1\133\1\0\1\134\2\130\1\133\3\130\14\0" + - "\2\130\1\132\5\130\1\132\7\130\1\0\21\130\1\0" + - "\3\130\1\135\1\136\1\130\1\136\2\0\4\130\2\0" + - "\2\130\3\0\1\130\1\354\2\132\1\133\1\0\1\134" + - "\2\130\1\133\1\130\1\354\1\130\14\0\2\130\1\132" + - "\5\130\1\132\7\130\1\0\21\130\1\0\3\130\4\355" + - "\2\0\3\130\1\355\2\0\2\130\3\0\2\130\3\355" + - "\2\0\2\130\2\355\2\130\14\0\2\130\1\355\1\130" + - "\1\355\3\130\1\355\7\130\1\0\1\130\2\355\16\130" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\356" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\357\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\7\142\1\360\1\144\1\145\106\142\7\0\1\361\110\0" + - "\7\144\1\360\1\144\1\362\106\144\4\363\1\142\1\363" + - "\1\142\1\364\1\0\1\142\1\365\3\142\11\363\1\142" + - "\3\363\2\142\63\363\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\366" + - "\3\7\14\0\6\7\1\367\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\4\7\1\370\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\11\7\1\241\5\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\371\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\372\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\7\1\373\15\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\374" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\10\155" + - "\1\156\1\157\3\155\1\375\102\155\11\156\1\376\3\156" + - "\1\377\106\156\1\155\1\156\2\155\1\0\1\155\1\u0100" + - "\3\155\11\156\1\155\3\156\2\155\63\156\15\0\1\u0101" + - "\102\0\10\161\1\0\107\161\23\0\1\u0102\74\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0103\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u0104\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u0105\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u0106" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u0107\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\241" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0108\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\u0109" + - "\2\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u010a\4\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\4\7" + - "\1\u010b\12\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\u010c\2\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u010d\2\7\14\0\14\7\1\241" + - "\2\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\u010e\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u010f\4\7\14\0\6\7" + - "\1\u0110\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\3\7\1\u0111" + - "\15\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u0112\4\7\1\u0113" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\4\7\1\u0114\12\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\5\7\1\u0115\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0116\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u0117\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\14\7\1\366\2\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u0118\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\4\7\1\u0119\1\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\u011a\14\0\17\7\1\6\1\0\7\7\1\u011b" + - "\11\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\2\7" + - "\1\u011c\14\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\u011d\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\3\7" + - "\1\u011e\13\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u011f\1\7\1\u0120\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\u0121" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\254\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0122\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u0123\2\7\1\u0124\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u0125\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u0126\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\46\0\1\47\1\0\1\24" + - "\50\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u0127\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\7\7\1\u0128\7\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\3\7\1\u0129\1\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\u012a\2\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\2\7\1\u012b\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u012c\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u012d\4\7\1\u012e\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\4\7\1\u012f" + - "\12\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0130\4\7\1\u0115\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u0131\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u0132\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u0133\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u0134" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u0135\4\7\1\u0136\14\0\12\7\1\u0137" + - "\4\7\1\6\1\0\13\7\1\u0138\5\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u0139\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\2\7\1\u013a\16\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u013b\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\3\7\1\u013c\13\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u013d\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\5\7" + - "\1\u013e\11\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\u013f\2\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u0140" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0141\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\4\7\1\u0142\1\7\14\0\6\7" + - "\1\u0143\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u0128\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u0144\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\u0145\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u0146\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\260\2\0" + - "\1\u0147\3\260\2\0\1\6\1\260\3\0\5\260\2\0" + - "\6\260\14\0\17\260\1\6\1\0\21\260\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\5\7\1\u0148\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u0149\4\7" + - "\14\0\6\7\1\u014a\10\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u014b\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\3\7\1\u014c\13\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u014d\2\7\14\0\1\7\1\u014e" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u014f\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\7\7\1\u0150" + - "\7\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u0151\1\7\1\u0152\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\4\7\1\u0153\12\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u0154\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\u0155" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u0156\4\7\1\u0157\14\0\1\u0158\1\7\1\u0159" + - "\1\7\1\u015a\12\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u015b\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u015c" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\5\7\1\u015d\14\0\16\7\1\u015e\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u015f" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\3\7\1\u0160\13\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u0161" + - "\1\7\14\0\7\7\1\u0162\7\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\13\7\1\u0163" + - "\3\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\2\7\1\u0164\1\u0165" + - "\15\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u0166\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\13\7\1\u0138\5\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u0167" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\4\7\1\u0168\12\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u0169\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u016a\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u016b\4\7\14\0" + - "\17\7\1\6\1\0\21\7\61\0\1\u016c\76\0\1\u016d" + - "\113\0\1\u016e\152\0\1\u016f\111\0\1\u0170\76\0\1\u0171" + - "\60\0\47\324\1\326\50\324\1\0\1\324\3\0\1\324" + - "\4\0\3\324\7\0\5\324\2\0\6\324\6\0\1\326" + - "\5\0\17\324\2\0\21\324\34\0\1\u0172\152\0\1\u0173" + - "\43\0\1\u0174\42\0\1\u0175\1\u0176\76\0\1\u0177\144\0" + - "\1\u0178\47\0\1\u0179\142\0\1\u017a\25\0\1\u017b\50\0" + - "\1\u017c\140\0\1\u017d\120\0\1\u017e\117\0\1\u017f\74\0" + - "\1\u0180\141\0\1\u0181\121\0\1\u0182\17\0\1\u0183\1\0" + - "\1\u0184\1\0\1\u0185\3\0\1\u0186\45\0\1\u0187\111\0" + - "\1\u0188\110\0\3\6\4\u0189\2\0\3\6\1\u0189\2\0" + - "\2\6\3\0\2\6\3\u0189\2\0\2\6\2\u0189\2\6" + - "\14\0\2\6\1\u0189\1\6\1\u0189\3\6\1\u0189\7\6" + - "\1\0\1\6\2\u0189\16\6\1\0\3\130\2\352\1\130" + - "\1\352\2\0\4\130\2\0\2\130\3\0\2\130\2\132" + - "\1\130\2\0\6\130\14\0\2\130\1\132\5\130\1\132" + - "\7\130\1\0\21\130\4\0\2\352\1\0\1\352\111\0" + - "\3\130\4\355\2\0\3\130\1\355\2\0\2\130\3\0" + - "\1\130\1\354\3\355\2\0\2\130\2\355\1\354\1\130" + - "\14\0\2\130\1\355\1\130\1\355\3\130\1\355\7\130" + - "\1\0\1\130\2\355\16\130\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\4\7\1\u018a\1\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\2\7\1\366\3\7\14\0" + - "\17\7\1\6\1\0\21\7\5\0\1\144\1\0\2\144" + - "\1\0\1\144\1\u018b\3\144\11\0\1\144\3\0\2\144" + - "\63\0\7\363\1\u018c\1\0\112\363\4\u018d\1\u018c\1\0" + - "\3\363\1\u018d\11\363\3\u018d\4\363\2\u018d\20\363\1\u018d" + - "\1\363\1\u018d\3\363\1\u018d\11\363\2\u018d\17\363\1\6" + - "\6\7\2\0\1\127\1\7\1\u018e\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\241" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\6\7\1\u018f\10\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u0190" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u0191\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u0135" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\10\156" + - "\1\0\112\156\4\u0192\2\156\1\376\2\156\1\u0192\1\377" + - "\10\156\3\u0192\4\156\2\u0192\20\156\1\u0192\1\156\1\u0192" + - "\3\156\1\u0192\11\156\2\u0192\17\156\22\0\1\u0193\75\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\13\7\1\366\3\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\16\7\1\u0194\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u0195\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\u010c" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0196\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0197\2\7" + - "\14\0\2\7\1\u0198\14\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\7\7\1\u0199\7\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\u019a\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u019b\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u019c\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\1\7\1\u019d\1\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\241" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u019e\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\241" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u019f\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\u01a0\2\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\3\7\1\u01a1\13\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\u01a2\16\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\241" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u01a3\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\206" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u01a4\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\7" + - "\1\140\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u01a5\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\14\7" + - "\1\u01a6\2\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\3\7\1\u01a7" + - "\15\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\13\7" + - "\1\u0135\3\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\170\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\6\7" + - "\1\u01a8\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u01a9\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\10\7\1\u01aa\10\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u0196\4\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u01ab" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u0195\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u0130\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\4\7\1\u01ac\12\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\14\7\1\u01ad\4\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\3\7\1\366\13\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u01ae\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\2\7\1\u01af\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u01a9\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\1\7\1\u0195\17\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u01b0\5\7\14\0\3\7\1\u01b1\13\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\u01b2\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\12\7\1\u01b3\4\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\16\7" + - "\1\u01b4\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\4\7\1\u01b5\12\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u0110\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u0135\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u01b6\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u0138" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u01b7\5\7\14\0\3\7\1\u0138\13\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\u01b8\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u01b9\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u01ba\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u01bb\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\u01bc\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\4\7\1\u01bd\1\7\14\0\1\7" + - "\1\u01a5\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u01be\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\6\7" + - "\1\u01bf\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\2\7\1\u01c0\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\4\7\1\u0115\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\366\16\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u01c1\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\2\7\1\241\14\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\1\7\1\u0195\6\7\1\u01c2\3\7\1\u01c3\4\7\1\0" + - "\1\6\6\7\2\0\1\127\1\7\1\u01c4\1\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u01c5\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\2\7\1\u01c4\14\7\1\6\1\0\21\7" + - "\1\0\7\6\2\0\1\6\1\u01c6\2\6\2\0\2\6" + - "\3\0\5\6\2\0\6\6\14\0\20\6\1\0\21\6" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u01c7\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\3\7" + - "\1\u01c8\2\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u01c9\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u01ca" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u01cb\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\u01cc" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\u01cd\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u01ce\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\3\7\1\u01cf\13\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\6\7" + - "\1\u01d0\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\4\7\1\u01d1\12\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\1\u01d2\2\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u0195\4\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u01d3\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u01d4\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u01d5\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u01d6" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u01d7\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u01d8\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u01c4\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u01d9" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\u01da\2\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u01db\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\u01dc\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u01dd\3\7\14\0\1\7" + - "\1\u01de\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u01df\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\4\7\1\u01e0\1\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\2\7\1\u01e1\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u01e2\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\4\7\1\u01e3\1\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\u01e4\2\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\12\7\1\u01e5\6\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\4\7\1\u01e6\12\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\16\7\1\u01e7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\6\7\1\u01e8\10\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\2\7\1\366\14\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u01e9\5\7\14\0\17\7\1\6\1\0" + - "\21\7\54\0\1\u01ea\101\0\1\u016c\142\0\1\u01eb\71\0" + - "\1\u01ec\140\0\1\u01ed\101\0\1\u0170\142\0\1\u01ee\71\0" + - "\1\u01ef\120\0\1\u01f0\120\0\1\u01f1\142\0\1\u01f2\73\0" + - "\1\u01f3\122\0\1\u01f4\22\0\1\u01f5\71\0\1\u01f6\120\0" + - "\1\u01f7\1\u01f8\75\0\1\u01f9\144\0\1\u01fa\137\0\1\u01fb" + - "\73\0\1\u01fc\116\0\1\u01fd\117\0\1\u01fe\23\0\1\u01ff" + - "\74\0\1\u0200\146\0\1\u0201\112\0\1\u0202\117\0\1\u0203" + - "\54\0\1\u0204\142\0\1\u0205\61\0\3\6\4\u0206\2\0" + - "\3\6\1\u0206\2\0\2\6\3\0\2\6\3\u0206\2\0" + - "\2\6\2\u0206\2\6\14\0\2\6\1\u0206\1\6\1\u0206" + - "\3\6\1\u0206\7\6\1\0\1\6\2\u0206\16\6\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u0207\3\7\14\0\17\7" + - "\1\6\1\0\21\7\4\0\4\u0208\5\0\1\u0208\11\0" + - "\3\u0208\4\0\2\u0208\20\0\1\u0208\1\0\1\u0208\3\0" + - "\1\u0208\11\0\2\u0208\17\0\3\363\4\u0209\1\u018c\1\0" + - "\3\363\1\u0209\11\363\3\u0209\4\363\2\u0209\20\363\1\u0209" + - "\1\363\1\u0209\3\363\1\u0209\11\363\2\u0209\17\363\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\13\7\1\241\3\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\12\7\1\u0115\4\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\16\7\1\241\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\2\7\1\u020a\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\3\156\4\u020b" + - "\2\156\1\376\2\156\1\u020b\1\377\10\156\3\u020b\4\156" + - "\2\u020b\20\156\1\u020b\1\156\1\u020b\3\156\1\u020b\11\156" + - "\2\u020b\17\156\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u020c\2\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\366\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u0135\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\4\7" + - "\1\u020d\1\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\1\7\1\u020e\3\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\1\7\1\u020f\3\7\1\u0210\13\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\2\7\1\u0211\16\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\366\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\3\7\1\u0212\13\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\u0213\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\11\7\1\u0214\5\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0215" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u01bf\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0216\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\20\7" + - "\1\u0217\1\0\1\6\6\7\2\0\1\127\1\7\1\u0218" + - "\1\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u0219\4\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u010e\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\3\7\1\357\13\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\u021a" + - "\16\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\4\7\1\u021b\12\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u021c" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\246\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u021d\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\u021e\16\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u021f\4\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\u0220\2\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\374\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u0221" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u0222\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u0223\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0224\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0225\2\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\1\241\16\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u0226" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u0227\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\16\7\1\u0228" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\4\7\1\u0195\12\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u0229\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\357\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u022a\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\2\7\1\u022b\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\2\7\1\u022c" + - "\16\7\1\0\1\6\6\7\2\0\1\127\1\7\1\241" + - "\1\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\4\7\1\357\1\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\251\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u022d\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u022e\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u013f\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u022f" + - "\10\7\1\6\1\0\21\7\1\0\3\6\4\u0230\2\0" + - "\3\6\1\u0230\2\0\2\6\3\0\2\6\3\u0230\2\0" + - "\2\6\2\u0230\2\6\14\0\2\6\1\u0230\1\6\1\u0230" + - "\3\6\1\u0230\7\6\1\0\1\6\2\u0230\16\6\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u0231\4\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\14\7\1\u0232\2\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\u0233\16\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0234" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0146\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\u0235" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u0236\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0237\2\7" + - "\14\0\17\7\1\6\1\0\3\7\1\u0238\15\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u015b\2\7\14\0\6\7" + - "\1\u0239\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\u023a\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\4\7\1\u023b\12\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\16\7\1\u023c\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u023d\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u023e" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u023f\4\7\14\0\13\7\1\u0240" + - "\3\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u0241\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u0242\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\5\7\1\u0243\11\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\7\7\1\u0244" + - "\7\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\13\7\1\u0245\3\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\3\7\1\u0246" + - "\13\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0247\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\7\1\u0248\15\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\3\7" + - "\1\u0249\2\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\11\7\1\u01c4\5\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\11\7\1\u024a\7\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\14\7\1\u024b\4\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u024c\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u024d\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u024e" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\u024f\12\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\3\7\1\u0250\1\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u0251\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u0252" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\3\7\1\u0253\1\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\u0254" + - "\2\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\23\0\1\u0255\135\0" + - "\1\u016c\12\0\1\u01ea\45\0\1\u01ec\1\u0256\4\u01ec\1\u0256" + - "\2\0\3\u01ec\2\0\1\u0256\1\u01ec\1\0\1\u01ec\1\u0256" + - "\5\u01ec\2\u0256\6\u01ec\1\0\2\u0256\1\0\1\u0256\2\0" + - "\5\u0256\17\u01ec\2\u0256\21\u01ec\23\0\1\u0257\135\0\1\u0170" + - "\12\0\1\u01ed\45\0\1\u01ef\1\u0258\4\u01ef\1\u0258\2\0" + - "\3\u01ef\2\0\1\u0258\1\u01ef\1\0\1\u01ef\1\u0258\5\u01ef" + - "\2\u0258\6\u01ef\1\0\2\u0258\1\0\1\u0258\2\0\5\u0258" + - "\17\u01ef\2\u0258\21\u01ef\57\0\1\u0259\76\0\1\u025a\20\0" + - "\1\u025b\117\0\1\u01f8\53\0\1\u025c\171\0\1\u025d\70\0" + - "\1\u025e\1\0\1\u025f\135\0\1\u0260\125\0\1\u0261\115\0" + - "\1\u0262\114\0\1\u0263\75\0\1\u0264\121\0\1\u0265\116\0" + - "\1\u0266\117\0\1\u0267\117\0\1\u0268\122\0\1\u0269\72\0" + - "\1\u026a\17\0\1\u026b\145\0\1\u026c\115\0\1\u026d\115\0" + - "\1\u026e\101\0\1\u026f\60\0\3\6\4\u0270\2\0\3\6" + - "\1\u0270\2\0\2\6\3\0\2\6\3\u0270\2\0\2\6" + - "\2\u0270\2\6\14\0\2\6\1\u0270\1\6\1\u0270\3\6" + - "\1\u0270\7\6\1\0\1\6\2\u0270\16\6\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u0271\2\7\14\0\17\7\1\6" + - "\1\0\21\7\4\0\4\u0272\5\0\1\u0272\11\0\3\u0272" + - "\4\0\2\u0272\20\0\1\u0272\1\0\1\u0272\3\0\1\u0272" + - "\11\0\2\u0272\17\0\3\363\4\u0273\1\u018c\1\0\3\363" + - "\1\u0273\11\363\3\u0273\4\363\2\u0273\20\363\1\u0273\1\363" + - "\1\u0273\3\363\1\u0273\11\363\2\u0273\17\363\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0274\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\3\156\4\u0275\2\156\1\376\2\156\1\u0275" + - "\1\377\10\156\3\u0275\4\156\2\u0275\20\156\1\u0275\1\156" + - "\1\u0275\3\156\1\u0275\11\156\2\u0275\17\156\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\13\7\1\u0276\3\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\4\7\1\u0277\1\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0278\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\4\7\1\u0279\1\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\u027a\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\7" + - "\1\u027b\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u027c\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u027d" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\163\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u027e\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u027f\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\2\7\1\u0110" + - "\14\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u0280\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\u0281\2\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\u0282" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\241\12\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u0283\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u0284\4\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\7" + - "\1\u0285\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\4\7\1\u010e\1\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\4\7" + - "\1\u0286\12\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u0287\4\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\3\7\1\366\1\7\2\0\4\7" + - "\1\u0271\1\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u0115\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\13\7\1\u0115\3\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0288\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u0289\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u028a\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u010a\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\6\7\1\u028b\10\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\7\7" + - "\1\u028c\7\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\4\7\1\u028d\1\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u028e\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u028f\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\7\7\1\u0290" + - "\7\7\1\6\1\0\21\7\1\0\3\6\4\u0291\2\0" + - "\3\6\1\u0291\2\0\2\6\3\0\2\6\3\u0291\2\0" + - "\2\6\2\u0291\2\6\14\0\2\6\1\u0291\1\6\1\u0291" + - "\3\6\1\u0291\7\6\1\0\1\6\2\u0291\16\6\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u0292\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\3\7\1\u0293\1\7\1\u0294" + - "\13\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\7\7" + - "\1\u0295\7\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u0296\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\1\7\1\u0297\1\u0298\2\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\2\7\1\u0299\6\7\1\u029a" + - "\7\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u013f\2\7" + - "\14\0\17\7\1\6\1\0\11\7\1\u029b\7\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\4\7\1\u029c\12\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u029d\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\4\7\1\u0240\1\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\13\7\1\u029e\3\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u029f\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\7\7\1\u02a0\2\7\1\u02a1\6\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u02a2" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\7\7\1\366\7\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u02a3\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u02a4" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u019a\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u02a5\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\6\7\1\u02a6\10\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\12\7\1\u02a7\6\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\3\7\1\u02a8\13\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u02a9" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\3\7\1\u02aa\13\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u02ab\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\11\7\1\u02ac\5\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\2\7\1\u02ad\14\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u02ae\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u02af\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u02b0\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u02b1\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\5\7\1\u02b2\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\u02b3" + - "\16\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\10\7\1\u02b4\10\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u02b5\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\13\7\1\357\3\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\14\7\1\u02b6\2\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\3\7" + - "\1\u02b7\2\7\14\0\17\7\1\6\1\0\21\7\23\0" + - "\1\u01ec\117\0\1\u01ef\131\0\1\u02b8\121\0\1\u02b9\147\0" + - "\1\u02ba\65\0\1\u02bb\143\0\1\u02bc\117\0\1\u02bd\51\0" + - "\1\u02be\163\0\1\u02bf\77\0\1\u02c0\116\0\1\u01f8\121\0" + - "\1\u02c1\115\0\1\u02c2\146\0\1\u01f8\123\0\1\u02c3\63\0" + - "\1\u02c4\145\0\1\u01f8\120\0\1\u02c5\127\0\1\u02c6\61\0" + - "\1\u02c7\154\0\1\u02c8\62\0\1\u02c6\117\0\1\u02c9\74\0" + - "\1\u026d\105\0\3\6\4\7\2\0\3\6\1\7\2\0" + - "\2\6\3\0\2\6\3\7\2\0\2\6\2\7\2\6" + - "\14\0\2\6\1\7\1\6\1\7\3\6\1\7\7\6" + - "\1\0\1\6\2\7\16\6\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\366\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\4\0\4\u02ca\5\0\1\u02ca\11\0\3\u02ca\4\0\2\u02ca" + - "\20\0\1\u02ca\1\0\1\u02ca\3\0\1\u02ca\11\0\2\u02ca" + - "\17\0\3\363\4\142\1\u018c\1\0\3\363\1\142\11\363" + - "\3\142\4\363\2\142\20\363\1\142\1\363\1\142\3\363" + - "\1\142\11\363\2\142\17\363\1\6\6\7\2\0\1\127" + - "\1\7\1\u0135\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\3\156\4\155\2\156\1\376\2\156\1\155\1\377\10\156" + - "\3\155\4\156\2\155\20\156\1\155\1\156\1\155\3\156" + - "\1\155\11\156\2\155\17\156\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u02b6\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\14\7\1\241\2\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\u02cb\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\366\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\2\7\1\u02cc\14\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u02cd\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u02ce\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u02cf\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\2\7\1\u02d0\14\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u02d1\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\4\7" + - "\1\u010e\12\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u02d2\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\3\7\1\u02d3\1\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\3\7\1\366" + - "\1\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u02d4" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\3\7\1\u02d5\13\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u02d6\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\u0277" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\u0115\2\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\4\7" + - "\1\u02d7\12\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\10\7\1\u02d8" + - "\10\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\206\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u02d9\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u02da\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u02db\2\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\3\7\1\u02dc" + - "\13\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u02dd\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\3\6\4\u02de\2\0\3\6\1\u02de\2\0\2\6" + - "\3\0\2\6\3\u02de\2\0\2\6\2\u02de\2\6\14\0" + - "\2\6\1\u02de\1\6\1\u02de\3\6\1\u02de\7\6\1\0" + - "\1\6\2\u02de\16\6\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\4\7\1\u02df\12\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u02e0\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u02e1\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u02e2\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u02e3\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u02e4\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u02e5\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u02e6\2\7\14\0\6\7\1\u02e7" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u02e8\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u02e9" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u02ea\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\4\7\1\u02eb\14\7\1\0\1\6\4\7\1\u02ec\1\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\5\7\1\u0294" + - "\13\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\10\7\1\73\10\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\7\1\u02ed\4\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\12\7" + - "\1\u02ee\4\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u02ef\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u02f0\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\u02f1\2\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u02f2\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u02f3\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\u02f4\2\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u02f5\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\4\7\1\u02f6\1\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u02f7" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\u02f8\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\1\7\1\u02b6\1\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\1\7\1\u02f9\3\7" + - "\1\0\1\u02fa\6\7\14\0\10\7\1\u02fb\6\7\1\6" + - "\1\0\15\7\1\u02fc\3\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u02fd\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\6\7\1\u02fe\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\2\7\1\u02ff\2\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\12\7\1\u0300\4\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\u0301\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\2\7\1\u0302\2\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\10\7\1\u0303\10\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u0304\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u0305\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\4\7\1\u0306\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u0307\1\7\14\0\17\7\1\6" + - "\1\0\21\7\64\0\1\u0308\113\0\1\u0309\100\0\1\u01f8" + - "\72\0\1\u01f8\143\0\1\u0262\113\0\1\u0269\143\0\1\u0262" + - "\74\0\1\u01f8\122\0\1\u030a\115\0\1\u030b\143\0\1\u030c" + - "\114\0\1\u030d\54\0\1\u0308\162\0\1\u02bb\41\0\41\u02c6" + - "\1\u01f8\56\u02c6\34\0\1\u030e\141\0\1\u030f\75\0\1\u0310" + - "\66\0\4\144\5\0\1\144\11\0\3\144\4\0\2\144" + - "\20\0\1\144\1\0\1\144\3\0\1\144\11\0\2\144" + - "\17\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u0311\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u0312\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u0313\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0314\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u010e\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\5\7\1\u0315" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\1\u0316\16\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\2\7\1\u0317" + - "\14\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\3\7\1\241\13\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u0318\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u0319\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\2\7\1\u0143\3\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u031a\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\2\7\1\u031b\3\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\u031c\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u031d\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\2\7\1\u022c\11\7\1\u031e" + - "\4\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\2\7\1\u031f\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\4\7" + - "\1\u0320\2\0\6\7\14\0\17\7\1\6\1\0\14\7" + - "\1\u0321\4\7\1\0\3\6\4\260\2\0\3\6\1\260" + - "\2\0\2\6\3\0\2\6\3\260\2\0\2\6\2\260" + - "\2\6\14\0\2\6\1\260\1\6\1\260\3\6\1\260" + - "\7\6\1\0\1\6\2\260\16\6\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u0322\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u0323" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\2\7\1\u0159\14\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u0324\5\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\u02ac\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\3\7\1\u0325\2\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u0326\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u0327\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0328" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u0329\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u032a\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u032b\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\u032c\2\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\u032d\2\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u032e\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u032f" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\14\7\1\u0330\2\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u02b6" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\3\7\1\u0331\13\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u0332\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u0333\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u0334\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u0335\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\1\7\1\u0336\1\7\1\u0337\3\7\1\u0338\1\u0339" + - "\10\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u033a\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\3\7" + - "\1\u033b\1\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\7" + - "\1\u033c\15\7\1\6\1\0\21\7\102\0\1\u033d\16\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\73\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u033e\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\14\7\1\u033f\4\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\u0340\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\7\1\u0341\15\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u0342\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\10\7\1\u0343\6\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\6\7\1\u0344\10\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u0345\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\7\7\1\u0346\7\7\1\6\1\0\21\7\1\0" + - "\1\6\4\7\1\u0347\1\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\173\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\10\7\1\u0348\10\7\37\0\1\u0349\121\0\1\u034a\105\0" + - "\1\u034b\36\0\1\u034c\65\0\1\u0262\122\0\1\u034d\115\0" + - "\1\u034e\121\0\1\u034f\137\0\1\u0350\124\0\1\u0351\34\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\5\7\1\u0352\13\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\5\7\1\u0353\11\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u0354\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u0355\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\7\7" + - "\1\u0356\11\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\5\7\1\u0357\13\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u0358\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u0359\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u028b\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u035a\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u035b\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u0110\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\366\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u035c\4\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u035d\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\5\7\1\u035e\11\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u035f\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\10\7\1\u0360\10\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\7" + - "\1\u0361\4\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\6\7\1\u0362\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\2\7\1\u0240\14\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\7\7\1\u0363\7\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\u0364" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\u0365\12\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\2\7\1\u0366\2\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\3\7" + - "\1\u0367\15\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0368" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u0369\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\3\7\1\u036a\1\7\2\0" + - "\6\7\14\0\6\7\1\u036b\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\4\7\1\u036c" + - "\12\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u036d\4\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\4\7\1\u0320\2\0\6\7\14\0\17\7" + - "\1\6\1\0\10\7\1\u036e\10\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u036f\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u0370\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\2\7\1\u0371\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\12\7\1\u0372\6\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\6\7\1\u0373\10\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u0374\4\7\14\0\4\7" + - "\1\u0375\12\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u0376\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\u0377\16\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\u0378\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u0379\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u037a\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\u037b\12\7\1\6" + - "\1\0\21\7\34\0\1\u037c\64\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u037d\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u037e\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u037f\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\7\1\u0380\4\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\1\7\1\u0381\17\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u0382\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u0383\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u0384\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0385\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\u0386\2\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0387\2\7" + - "\14\0\17\7\1\6\1\0\21\7\40\0\1\u01f8\116\0" + - "\1\u0388\144\0\1\u0389\72\0\1\u038a\114\0\1\u038b\155\0" + - "\1\u01f8\65\0\1\u02c6\113\0\1\u02c6\117\0\1\u038c\64\0" + - "\1\6\6\7\2\0\1\127\1\7\1\u038d\1\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\12\7\1\u0283\3\7\1\u038e" + - "\2\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u038f\2\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\5\7\1\u0390" + - "\13\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\7" + - "\1\366\15\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\7\1\u0391\1\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\11\7" + - "\1\u0392\5\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\1\u02d6\20\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\3\7\1\241\1\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\u0393\16\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\1\7\1\u0394\15\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\1\u0395" + - "\5\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\u0396\12\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0397" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u0398\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u0364" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\4\7\1\u0364\12\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u0399" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\4\7\1\u0320\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\1\u039a\2\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u039b\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\u039c\2\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\1\0\1\u039d" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u039e\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\3\7\1\u0240\1\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u0325\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u039f" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\3\7\1\u03a0\1\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u03a1" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u03a2\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u03a3\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\4\7\1\u03a4\1\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\3\7\1\u03a5\1\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\2\7\1\u03a6\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\13\7\1\u03a7" + - "\3\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\4\7\1\u03a8\12\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u03a9\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u03aa\4\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u03ab\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u03ac\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\2\7\1\u03ad\3\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\3\7\1\u0279\2\7\14\0\17\7\1\6\1\0\21\7" + - "\37\0\1\u03ae\61\0\1\6\6\7\2\0\1\127\1\u0128" + - "\2\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u03af\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\2\7\1\u03b0\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\7\7\1\u03b1\7\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u03b2\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\3\7" + - "\1\u03b3\1\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\4\7\1\u03b4\1\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\1\u03b5\16\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u0253\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u036b\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\4\7\1\u03b6" + - "\12\7\1\6\1\0\21\7\30\0\1\u03b7\125\0\1\u03b8" + - "\115\0\1\u03b9\121\0\1\u03ba\147\0\1\u03bb\32\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\2\7\1\u03bc\14\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u03bd" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u03be\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u03bf\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\2\7\1\u03c0\14\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u03c1\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u016a\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\3\7\1\u03c2\13\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\6\7\1\u03c3\10\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u03c4" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\7\7\1\u03c5\7\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u03c6\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\1\u02b6\5\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\4\7\1\u03c7\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\u03c8\2\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\3\7\1\u03c9\13\7" + - "\1\6\1\0\21\7\102\0\1\u03ca\2\0\1\u03cb\13\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\4\7\1\357\12\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\4\7\1\u03cc\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u03cd\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u03ce\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\2\7\1\u0364\14\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u03cf\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u03d0\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\4\7\1\u03d1\1\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\4\7\1\u03d2\1\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\1\u03d3" + - "\2\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u03d4\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\u0361\5\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u03d5\3\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\6\7\1\u03d6" + - "\10\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\2\7\1\u03d7\14\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\2\7\1\u03d8" + - "\14\7\1\6\1\0\21\7\34\0\1\u03d9\64\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\5\7\1\u03da\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u0364\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0327\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\1\7\1\u03db\4\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\2\7" + - "\1\u03dc\2\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\2\7" + - "\1\u03dd\14\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\1\7\1\u03b4\15\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\u03de" + - "\16\7\1\6\1\0\21\7\36\0\1\u03df\121\0\1\u03ba" + - "\116\0\1\u01f8\140\0\1\u01f8\116\0\1\u03e0\41\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u03e1\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u03e2" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\u01df\5\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\5\7\1\u03e3\13\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u03e4\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\17\7\1\u03e5\1\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\2\7\1\u03e6\3\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\2\7\1\u031d\3\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\3\7\1\u03e7\13\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\6\7" + - "\1\u03e8\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\1\u03e9\16\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u03ea\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\u03a2\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\3\7\1\u03eb" + - "\13\7\1\6\1\0\21\7\13\0\1\u03ec\120\0\1\u03ed" + - "\104\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\4\7\1\u03ee\1\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u03ef\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\3\7\1\u03f0\2\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u03f1\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\7\7\1\u03f2\11\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u03f3\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\2\7\1\u03f4\3\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\7\7\1\u03da\7\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\5\7\1\u03f5\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\3\7" + - "\1\u03f6\2\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\1\u03f7\5\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\2\7\1\u03f8\7\7\1\u03f9\6\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\1\7\1\u03fa\3\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\36\0\1\u03fb\62\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\2\7\1\u03fc\3\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u03fd" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\1\7\1\u03fe\15\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\4\7\1\u03ff\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\6\7\1\u0400\10\7\1\6\1\0" + - "\21\7\34\0\1\u034e\145\0\1\u02c6\36\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\5\7\1\u0401\11\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\1\u03c3\2\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\u0402\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\5\7\1\366" + - "\11\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u0403\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\7\1\u0404\4\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0405\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u0406\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0407\15\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u0408\4\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\7\1\u0409\15\7\1\6\1\0\21\7\15\0\1\u040a" + - "\166\0\1\u040b\34\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u040c" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\11\7\1\u02b6\5\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\13\7\1\u0240\3\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u03dd\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\1\u040d\16\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\1\u040e\2\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\2\7\1\u040f\16\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\u03dd\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\2\7\1\u0410\14\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\1\7\1\u0411\15\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\4\7\1\u0412\1\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\3\7\1\u0413\13\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\6\7\1\u0414\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\7\1\u0327\1\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\14\7\1\u0415\2\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\1\u0416\2\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\173\4\7\14\0\5\7\1\u035e" + - "\11\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\1\7\1\u0276\1\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\12\7\1\u0283\6\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\6\7\1\u0417\10\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u0418" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\u0419\5\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\6\7\1\u041a\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\u0405\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\2\7\1\u02b6\14\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\6\7\1\u041b\10\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u0331\4\7\14\0\17\7\1\6" + - "\1\0\21\7\41\0\1\u041c\140\0\1\u041d\36\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\7\7\1\u041e\7\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u041f" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0420\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\4\7\1\u0421" + - "\1\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\3\7" + - "\1\u0337\15\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u0410" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\3\7\1\u0422\2\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\2\7\1\u0423" + - "\3\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0424\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\3\7\1\u0425\15\7\1\0\1\6" + - "\6\7\2\0\1\127\1\7\1\u0407\1\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u0426\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\16\7\1\366\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\14\7\1\u0427" + - "\2\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\1\7\1\u0271\15\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\1\u0253\5\7\14\0\17\7" + - "\1\6\1\0\21\7\36\0\1\u0428\140\0\1\u0429\41\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\2\7\1\u042a\3\7\14\0\17\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u042b\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\2\7\1\u042c\14\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\3\7" + - "\1\u042d\2\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u042e\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\7\1\u042f" + - "\4\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\16\7\1\u02b6\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\6\7" + - "\1\u0430\10\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\6\7\14\0\6\7\1\u0431\10\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\17\7" + - "\1\6\1\0\16\7\1\u038e\2\7\34\0\1\u03fb\143\0" + - "\1\u0432\40\0\1\6\6\7\2\0\1\127\1\7\1\u0195" + - "\1\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\3\7\1\u0433\2\7\14\0\17\7\1\6\1\0" + - "\21\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\5\7\1\u0364\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\5\7\1\u0434\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\5\7\1\u0435\14\0\17\7\1\6" + - "\1\0\21\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\3\7\1\u0436" + - "\2\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\1\u0361" + - "\20\7\1\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0437\2\7" + - "\14\0\17\7\1\6\1\0\21\7\36\0\1\u0438\62\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\2\7\1\u0439\14\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\5\7" + - "\1\u043a\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\6\7\14\0\17\7\1\6\1\0\16\7" + - "\1\u043b\2\7\1\0\1\6\6\7\2\0\1\127\3\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\1\u043c\5\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\4\7\1\u043d\1\7\14\0\17\7\1\6\1\0" + - "\21\7\6\0\1\u043e\112\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\1\7\1\u02f9\3\7" + - "\2\0\6\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\17\7\1\6\1\0" + - "\2\7\1\u043f\16\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\2\7" + - "\1\u0440\3\7\14\0\17\7\1\6\1\0\21\7\1\0" + - "\1\6\6\7\2\0\1\127\3\7\2\0\1\6\1\7" + - "\3\0\5\7\2\0\6\7\14\0\6\7\1\u0441\10\7" + - "\1\6\1\0\21\7\1\0\1\6\6\7\2\0\1\127" + - "\3\7\2\0\1\6\1\7\3\0\5\7\2\0\6\7" + - "\14\0\6\7\1\u0442\10\7\1\6\1\0\21\7\40\0" + - "\1\u0443\60\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\6\7\14\0\1\u0444" + - "\16\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\1\7\1\u0445\4\7\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\3\7\2\0\1\6" + - "\1\7\3\0\5\7\2\0\6\7\14\0\1\7\1\u0446" + - "\15\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\1\u0447\20\7\57\0" + - "\1\u0448\41\0\1\6\6\7\2\0\1\127\3\7\2\0" + - "\1\6\1\7\3\0\5\7\2\0\3\7\1\u0449\2\7" + - "\14\0\17\7\1\6\1\0\21\7\1\0\1\6\6\7" + - "\2\0\1\127\3\7\2\0\1\6\1\7\3\0\5\7" + - "\2\0\5\7\1\u0296\14\0\17\7\1\6\1\0\21\7" + - "\1\0\1\6\6\7\2\0\1\127\1\7\1\u0364\1\7" + - "\2\0\1\6\1\7\3\0\5\7\2\0\6\7\14\0" + - "\17\7\1\6\1\0\21\7\1\0\1\6\6\7\2\0" + - "\1\127\3\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\2\7\1\u044a\3\7\14\0\17\7\1\6\1\0\21\7" + - "\62\0\1\u044b\36\0\1\6\6\7\2\0\1\127\1\7" + - "\1\u020c\1\7\2\0\1\6\1\7\3\0\5\7\2\0" + - "\6\7\14\0\17\7\1\6\1\0\21\7\1\0\1\6" + - "\6\7\2\0\1\127\3\7\2\0\1\6\1\7\3\0" + - "\5\7\2\0\1\7\1\u02b6\4\7\14\0\17\7\1\6" + - "\1\0\21\7\74\0\1\u03fb\24\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[85040]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\126\0\254\0\u0102\0\u0158\0\u01ae\0\u0204\0\u025a"+ + "\0\u02b0\0\u0306\0\u035c\0\u03b2\0\u0408\0\u045e\0\u04b4\0\u050a"+ + "\0\u0560\0\u05b6\0\u05b6\0\u060c\0\u0662\0\u06b8\0\u070e\0\u0764"+ + "\0\u07ba\0\u0810\0\u0866\0\u08bc\0\u0912\0\u0968\0\u09be\0\u0a14"+ + "\0\u0a6a\0\u0ac0\0\u0b16\0\u0b6c\0\u05b6\0\u05b6\0\u0bc2\0\u0c18"+ + "\0\u0c6e\0\u0cc4\0\u05b6\0\u0d1a\0\u0d70\0\u0dc6\0\u0e1c\0\u0e72"+ + "\0\u0ec8\0\u0f1e\0\u0f74\0\u0fca\0\u1020\0\u1076\0\u10cc\0\u1122"+ + "\0\u1178\0\u11ce\0\u1224\0\u127a\0\u12d0\0\u1326\0\u137c\0\u13d2"+ + "\0\u1428\0\u147e\0\u14d4\0\u152a\0\u1580\0\u15d6\0\u162c\0\u1682"+ + "\0\u05b6\0\u16d8\0\u172e\0\u1784\0\u17da\0\u1830\0\u05b6\0\u1886"+ + "\0\u18dc\0\u1932\0\u1988\0\u19de\0\u1a34\0\u1a8a\0\u1ae0\0\u05b6"+ + "\0\u1b36\0\u1b8c\0\u1be2\0\u1c38\0\u1c8e\0\u1ce4\0\u05b6\0\u1d3a"+ + "\0\u1d90\0\u1de6\0\u05b6\0\u1e3c\0\u05b6\0\u05b6\0\u1e92\0\u1ee8"+ + "\0\u1f3e\0\u1ee8\0\u1ee8\0\u1f94\0\u1fea\0\u2040\0\u2096\0\u20ec"+ + "\0\u2142\0\u2198\0\u21ee\0\u2244\0\u229a\0\u22f0\0\u2346\0\u239c"+ + "\0\u23f2\0\u2448\0\u249e\0\u24f4\0\u254a\0\u25a0\0\u25f6\0\u264c"+ + "\0\u26a2\0\u26f8\0\u274e\0\u27a4\0\u27fa\0\u2850\0\u05b6\0\u28a6"+ + "\0\u27fa\0\u28fc\0\u2952\0\u29a8\0\u29fe\0\u2a54\0\u2aaa\0\u2b00"+ + "\0\u2b56\0\u2bac\0\u2c02\0\u2c58\0\u2cae\0\u2d04\0\u2d5a\0\u2db0"+ + "\0\u2e06\0\u2e5c\0\u2eb2\0\u2f08\0\u2f5e\0\u2fb4\0\u300a\0\u3060"+ + "\0\u30b6\0\u310c\0\u3162\0\u31b8\0\u320e\0\u3264\0\u32ba\0\u3310"+ + "\0\u3366\0\u33bc\0\u3412\0\u3468\0\u34be\0\u3514\0\u356a\0\u35c0"+ + "\0\u3616\0\u366c\0\u36c2\0\u3718\0\u06b8\0\u376e\0\u37c4\0\u381a"+ + "\0\u3870\0\u38c6\0\u391c\0\u3972\0\u39c8\0\u3a1e\0\u3a74\0\u3aca"+ + "\0\u3b20\0\u3b76\0\u02b0\0\u3bcc\0\u3c22\0\u3c78\0\u3cce\0\u3d24"+ + "\0\u3d7a\0\u3dd0\0\u3e26\0\u3e7c\0\u3ed2\0\u3f28\0\u3f7e\0\u3fd4"+ + "\0\u402a\0\u4080\0\u40d6\0\u412c\0\u4182\0\u41d8\0\u422e\0\u4284"+ + "\0\u42da\0\u4330\0\u4386\0\u43dc\0\u4432\0\u4488\0\u44de\0\u4534"+ + "\0\u458a\0\u45e0\0\u4636\0\u468c\0\u46e2\0\u4738\0\u478e\0\u47e4"+ + "\0\u483a\0\u4890\0\u48e6\0\u493c\0\u4992\0\u49e8\0\u4a3e\0\u4a94"+ + "\0\u4aea\0\u4b40\0\u4b96\0\u4bec\0\u4c42\0\u4c98\0\u4cee\0\u4d44"+ + "\0\u4d9a\0\u4df0\0\u4e46\0\u4e9c\0\u4ef2\0\u4f48\0\u4f9e\0\u4ff4"+ + "\0\u504a\0\u50a0\0\u50f6\0\u514c\0\u51a2\0\u51f8\0\u524e\0\u52a4"+ + "\0\u52fa\0\u05b6\0\u5350\0\u53a6\0\u53fc\0\u5452\0\u05b6\0\u54a8"+ + "\0\u54fe\0\u05b6\0\u5554\0\u55aa\0\u5600\0\u5656\0\u56ac\0\u5702"+ + "\0\u5758\0\u57ae\0\u5804\0\u585a\0\u58b0\0\u5906\0\u595c\0\u59b2"+ + "\0\u5a08\0\u5a5e\0\u5ab4\0\u5b0a\0\u05b6\0\u5b60\0\u5bb6\0\u5c0c"+ + "\0\u5c62\0\u05b6\0\u05b6\0\u5cb8\0\u5d0e\0\u5d64\0\u5dba\0\u5e10"+ + "\0\u1ee8\0\u5e66\0\u5ebc\0\u5f12\0\u5f68\0\u5fbe\0\u6014\0\u606a"+ + "\0\u60c0\0\u6116\0\u616c\0\u05b6\0\u05b6\0\u61c2\0\u249e\0\u6218"+ + "\0\u626e\0\u02b0\0\u62c4\0\u05b6\0\u631a\0\u6370\0\u63c6\0\u641c"+ + "\0\u6472\0\u05b6\0\u64c8\0\u651e\0\u6574\0\u65ca\0\u6620\0\u6676"+ + "\0\u66cc\0\u6722\0\u6778\0\u67ce\0\u6824\0\u687a\0\u68d0\0\u6926"+ + "\0\u697c\0\u69d2\0\u6a28\0\u6a7e\0\u6ad4\0\u6b2a\0\u6b80\0\u6bd6"+ + "\0\u6c2c\0\u6c82\0\u6cd8\0\u6d2e\0\u6d84\0\u6dda\0\u6e30\0\u6e86"+ + "\0\u6edc\0\u6f32\0\u6f88\0\u6fde\0\u7034\0\u708a\0\u70e0\0\u7136"+ + "\0\u718c\0\u71e2\0\u7238\0\u728e\0\u72e4\0\u733a\0\u7390\0\u73e6"+ + "\0\u743c\0\u7492\0\u74e8\0\u753e\0\u7594\0\u75ea\0\u7640\0\u7696"+ + "\0\u76ec\0\u7742\0\u7798\0\u77ee\0\u7844\0\u789a\0\u78f0\0\u7946"+ + "\0\u799c\0\u79f2\0\u7a48\0\u7a9e\0\u7af4\0\u7b4a\0\u7ba0\0\u7bf6"+ + "\0\u7c4c\0\u7ca2\0\u7cf8\0\u7d4e\0\u7da4\0\u7dfa\0\u7e50\0\u7ea6"+ + "\0\u7efc\0\u7f52\0\u7fa8\0\u7ffe\0\u8054\0\u80aa\0\u8100\0\u8156"+ + "\0\u81ac\0\u8202\0\u8258\0\u82ae\0\u8304\0\u835a\0\u83b0\0\u8406"+ + "\0\u845c\0\u84b2\0\u8508\0\u855e\0\u85b4\0\u860a\0\u8660\0\u86b6"+ + "\0\u870c\0\u8762\0\u87b8\0\u880e\0\u8864\0\u88ba\0\u8910\0\u8966"+ + "\0\u89bc\0\u8a12\0\u8a68\0\u8abe\0\u8b14\0\u8b6a\0\u8bc0\0\u8c16"+ + "\0\u8c6c\0\u8cc2\0\u8d18\0\u8d6e\0\u8dc4\0\u8e1a\0\u8e70\0\u8ec6"+ + "\0\u8f1c\0\u8f72\0\u8fc8\0\u901e\0\u9074\0\u90ca\0\u9120\0\u9176"+ + "\0\u91cc\0\u9222\0\u9278\0\u92ce\0\u9324\0\u937a\0\u93d0\0\u9426"+ + "\0\u947c\0\u94d2\0\u9528\0\u957e\0\u95d4\0\u962a\0\u9680\0\u96d6"+ + "\0\u972c\0\u9782\0\u97d8\0\u982e\0\u9884\0\u98da\0\u9930\0\u9986"+ + "\0\u99dc\0\u9a32\0\u9a88\0\u9ade\0\u9b34\0\u9b8a\0\u9be0\0\u9c36"+ + "\0\u9c8c\0\u9ce2\0\u9d38\0\u9d8e\0\u9de4\0\u9e3a\0\u9e90\0\u9ee6"+ + "\0\u9f3c\0\u9f92\0\u9fe8\0\ua03e\0\ua094\0\ua0ea\0\ua140\0\ua196"+ + "\0\ua1ec\0\ua242\0\ua298\0\ua2ee\0\ua344\0\ua39a\0\u05b6\0\ua3f0"+ + "\0\ua446\0\u05b6\0\ua49c\0\u5e66\0\ua4f2\0\ua548\0\ua59e\0\ua5f4"+ + "\0\ua64a\0\ua6a0\0\ua6f6\0\ua74c\0\ua7a2\0\ua7f8\0\ua84e\0\u05b6"+ + "\0\ua8a4\0\ua8fa\0\ua950\0\ua9a6\0\ua9fc\0\uaa52\0\uaaa8\0\u05b6"+ + "\0\uaafe\0\uab54\0\uabaa\0\uac00\0\uac56\0\uacac\0\uad02\0\uad58"+ + "\0\uadae\0\uae04\0\uae5a\0\uaeb0\0\uaf06\0\u02b0\0\uaf5c\0\uafb2"+ + "\0\ub008\0\ub05e\0\ub0b4\0\ub10a\0\ub160\0\ub1b6\0\ub20c\0\ub262"+ + "\0\ub2b8\0\ub30e\0\u02b0\0\ub364\0\ub3ba\0\ub410\0\ub466\0\ub4bc"+ + "\0\ub512\0\ub568\0\ub5be\0\ub614\0\ub66a\0\ub6c0\0\ub716\0\ub76c"+ + "\0\ub7c2\0\ub818\0\ub86e\0\ub8c4\0\ub91a\0\ub970\0\ub9c6\0\uba1c"+ + "\0\uba72\0\ubac8\0\ubb1e\0\ubb74\0\ubbca\0\ubc20\0\ubc76\0\ubccc"+ + "\0\ubd22\0\ubd78\0\ubdce\0\ube24\0\ube7a\0\ubed0\0\ubf26\0\ubf7c"+ + "\0\ubfd2\0\uc028\0\uc07e\0\uc0d4\0\uc12a\0\uc180\0\uc1d6\0\uc22c"+ + "\0\uc282\0\uc2d8\0\uc32e\0\uc384\0\uc3da\0\uc430\0\uc486\0\uc4dc"+ + "\0\uc532\0\uc588\0\uc5de\0\uc634\0\uc68a\0\uc6e0\0\uc736\0\uc78c"+ + "\0\uc7e2\0\uc838\0\uc88e\0\uc8e4\0\uc93a\0\uc990\0\uc9e6\0\uca3c"+ + "\0\uca92\0\ucae8\0\ucb3e\0\ucb94\0\ucbea\0\ucc40\0\ucc96\0\uccec"+ + "\0\ucd42\0\ucd98\0\ucdee\0\uce44\0\uce9a\0\ucef0\0\ucf46\0\ucf9c"+ + "\0\ucff2\0\ud048\0\ud09e\0\ud0f4\0\ud14a\0\ud1a0\0\ud1f6\0\ud24c"+ + "\0\ud2a2\0\ud2f8\0\ud34e\0\ud3a4\0\ud3fa\0\ud450\0\ud4a6\0\ud4fc"+ + "\0\ud552\0\ud5a8\0\ud5fe\0\ud654\0\ud6aa\0\ud700\0\ud756\0\ud7ac"+ + "\0\ud802\0\ud858\0\ud8ae\0\ud904\0\ud95a\0\ud9b0\0\uda06\0\uda5c"+ + "\0\udab2\0\udb08\0\udb5e\0\udbb4\0\udc0a\0\udc60\0\udcb6\0\udd0c"+ + "\0\udd62\0\uddb8\0\ude0e\0\ude64\0\udeba\0\udf10\0\udf66\0\udfbc"+ + "\0\ue012\0\ue068\0\ue0be\0\ue114\0\ue16a\0\ue1c0\0\ue216\0\ue26c"+ + "\0\ue2c2\0\u05b6\0\ue318\0\ue36e\0\ue3c4\0\ue41a\0\ue470\0\ue4c6"+ + "\0\ue51c\0\ue572\0\ue5c8\0\ue61e\0\ue674\0\ue6ca\0\u05b6\0\ue720"+ + "\0\ue776\0\ue7cc\0\ue822\0\ue878\0\ue8ce\0\ue924\0\ue97a\0\ue9d0"+ + "\0\uea26\0\uea7c\0\uead2\0\ueb28\0\ueb7e\0\uebd4\0\uec2a\0\uec80"+ + "\0\uecd6\0\ued2c\0\ued82\0\uedd8\0\uee2e\0\uee84\0\ueeda\0\uef30"+ + "\0\uef86\0\uefdc\0\uf032\0\uf088\0\uf0de\0\uf134\0\uf18a\0\uf1e0"+ + "\0\uf236\0\uf28c\0\uf2e2\0\uf338\0\uf38e\0\uf3e4\0\uf43a\0\uf490"+ + "\0\uf4e6\0\uf53c\0\uf592\0\uf5e8\0\uf63e\0\uf694\0\uf6ea\0\uf740"+ + "\0\uf796\0\u6e30\0\uf7ec\0\uf842\0\uf898\0\uf8ee\0\uf944\0\uf99a"+ + "\0\uf9f0\0\ufa46\0\ufa9c\0\ufaf2\0\ufb48\0\ufb9e\0\ufbf4\0\ufc4a"+ + "\0\ufca0\0\ufcf6\0\ufd4c\0\ufda2\0\ufdf8\0\ufe4e\0\ufea4\0\ufefa"+ + "\0\uff50\0\uffa6\0\ufffc\1\122\1\250\1\376\1\u0154\1\u01aa"+ + "\1\u0200\1\u0256\1\u02ac\1\u0302\1\u0358\1\u03ae\1\u0404\1\u045a"+ + "\1\u04b0\1\u0506\1\u055c\1\u05b2\1\u0608\1\u065e\1\u06b4\1\u070a"+ + "\1\u0760\1\u07b6\1\u080c\1\u0862\1\u08b8\1\u090e\1\u0964\1\u09ba"+ + "\1\u0a10\1\u0a66\1\u0abc\1\u0b12\1\u0b68\1\u0bbe\1\u0c14\1\u0c6a"+ + "\1\u0cc0\1\u0d16\1\u0d6c\1\u0dc2\1\u0e18\1\u0e6e\1\u0ec4\1\u0f1a"+ + "\1\u0f70\1\u0fc6\1\u101c\1\u1072\1\u10c8\1\u111e\1\u1174\1\u11ca"+ + "\1\u1220\1\u1276\1\u12cc\1\u1322\1\u1378\1\u13ce\1\u1424\1\u147a"+ + "\1\u14d0\1\u1526\1\u157c\1\u15d2\1\u1628\1\u167e\1\u16d4\1\u172a"+ + "\1\u1780\1\u17d6\1\u182c\1\u1882\1\u18d8\1\u192e\1\u1984\1\u19da"+ + "\1\u1a30\1\u1a86\1\u1adc\1\u1b32\1\u1b88\1\u1bde\1\u1c34\1\u1c8a"+ + "\0\udd62\1\u1ce0\0\ude64\1\u1d36\1\u1d8c\1\u1de2\1\u1e38\1\u1e8e"+ + "\1\u1ee4\1\u1f3a\1\u1f90\1\u1fe6\1\u203c\1\u2092\1\u20e8\1\u213e"+ + "\1\u2194\1\u21ea\1\u2240\1\u2296\1\u22ec\1\u2342\1\u2398\1\u23ee"+ + "\1\u2444\1\u249a\1\u24f0\0\ue674\1\u2546\1\u259c\1\u25f2\1\u2648"+ + "\1\u269e\1\u26f4\1\u274a\1\u27a0\1\u27f6\1\u284c\1\u28a2\1\u28f8"+ + "\1\u294e\1\u29a4\1\u29fa\1\u2a50\1\u2aa6\1\u2afc\1\u2b52\1\u2ba8"+ + "\1\u2bfe\1\u2c54\1\u2caa\1\u2d00\1\u2d56\1\u2dac\0\u3bcc\1\u2e02"+ + "\1\u2e58\1\u2eae\1\u2f04\1\u2f5a\1\u2fb0\1\u3006\1\u305c\1\u30b2"+ + "\1\u3108\1\u315e\1\u31b4\1\u320a\1\u3260\1\u32b6\1\u330c\1\u3362"+ + "\1\u33b8\1\u340e\1\u3464\1\u34ba\1\u3510\1\u3566\1\u35bc\0\u02b0"+ + "\1\u3612\1\u3668\1\u36be\1\u3714\1\u376a\1\u37c0\1\u3816\1\u386c"+ + "\1\u38c2\1\u3918\1\u396e\1\u39c4\1\u3a1a\1\u3a70\1\u3ac6\1\u3b1c"+ + "\1\u3b72\1\u3bc8\1\u3c1e\1\u3c74\1\u3cca\1\u3d20\1\u3d76\1\u3dcc"+ + "\1\u3e22\1\u3e78\1\u3ece\1\u3f24\1\u3f7a\1\u3fd0\1\u4026\1\u407c"+ + "\1\u40d2\1\u4128\1\u417e\1\u41d4\1\u422a\1\u4280\1\u42d6\1\u432c"+ + "\1\u4382\1\u43d8\1\u442e\1\u4484\1\u44da\1\u4530\1\u4586\1\u45dc"+ + "\1\u4632\1\u4688\1\u46de\1\u4734\1\u478a\1\u47e0\1\u4836\1\u488c"+ + "\1\u48e2\1\u4938\1\u498e\1\u49e4\1\u4a3a\1\u4a90\1\u4ae6\1\u4b3c"+ + "\1\u4b92\1\u4be8\1\u4c3e\1\u4c94\1\u4cea\1\u4d40\1\u4d96\1\u4dec"+ + "\1\u4e42\1\u4e98\1\u4eee\1\u4f44\1\u4f9a\1\u4ff0\1\u5046\1\u509c"+ + "\1\u50f2\1\u5148\1\u519e\1\u51f4\1\u524a\1\u52a0\1\u52f6\1\u534c"+ + "\1\u53a2\1\u53f8\1\u544e\1\u54a4\1\u54fa\1\u5550\1\u55a6\1\u55fc"+ + "\1\u5652\1\u56a8\1\u56fe\1\u5754\1\u57aa\1\u5800\1\u5856\1\u58ac"+ + "\1\u5902\1\u5958\1\u59ae\1\u5a04\1\u5a5a\1\u5ab0\1\u5b06\1\u5b5c"+ + "\1\u5bb2\1\u5c08\1\u5c5e\1\u5cb4\1\u5d0a\1\u5d60\1\u5db6\1\u5e0c"+ + "\1\u5e62\1\u5eb8\1\u5f0e\1\u5f64\1\u5fba\1\u6010\1\u6066\1\u60bc"+ + "\1\u6112\1\u6168\1\u61be\1\u6214\1\u626a\1\u62c0\1\u6316\1\u636c"+ + "\1\u63c2\1\u6418\1\u646e\1\u64c4\1\u651a\1\u6570\1\u65c6\1\u661c"+ + "\1\u6672\1\u66c8\1\u671e\1\u6774\1\u67ca\1\u6820\1\u6876\1\u68cc"+ + "\1\u6922\1\u6978\1\u69ce\1\u6a24\1\u6a7a\1\u6ad0\1\u6b26\1\u6b7c"+ + "\1\u6bd2\1\u6c28\1\u6c7e\1\u6cd4\1\u6d2a\1\u6d80\1\u6dd6\1\u6e2c"+ + "\1\u6e82\1\u6ed8\1\u6f2e\1\u6f84\1\u6fda\1\u7030\1\u7086\1\u70dc"+ + "\1\u7132\1\u7188\1\u71de\1\u7234\1\u728a\1\u72e0\1\u7336\1\u738c"+ + "\1\u73e2\1\u7438\1\u748e\1\u74e4\1\u753a\1\u7590\1\u75e6\1\u763c"+ + "\1\u7692\1\u76e8\1\u773e\1\u7794\1\u77ea\1\u7840\1\u7896\1\u78ec"+ + "\1\u7942\1\u7998\1\u79ee\1\u7a44\1\u7a9a\1\u7af0\1\u7b46\1\u7b9c"+ + "\1\u7bf2\1\u7c48\1\u7c9e\1\u7cf4\1\u7d4a\1\u7da0\1\u7df6\1\u7e4c"+ + "\1\u7ea2\1\u7ef8\1\u7f4e\1\u7fa4\1\u7ffa\1\u4f9a\1\u8050\1\u80a6"+ + "\1\u80fc\1\u8152\1\u81a8\1\u81fe\1\u8254\1\u82aa\1\u8300\1\u8356"+ + "\1\u83ac\1\u8402\1\u8458\1\u84ae\1\u8504\1\u855a\1\u85b0\1\u8606"+ + "\1\u865c\1\u86b2\1\u8708\1\u875e\1\u87b4\1\u880a\1\u8860\1\u88b6"+ + "\1\u890c\1\u8962\1\u89b8\1\u8a0e\1\u8a64\1\u8aba\1\u8b10\1\u8b66"+ + "\1\u8bbc\1\u8c12\1\u8c68\1\u8cbe\1\u8d14\1\u8d6a\1\u8dc0\1\u8e16"+ + "\1\u8e6c\1\u8ec2\1\u8f18\1\u8f6e\1\u8fc4\1\u901a\1\u9070\1\u90c6"+ + "\1\u911c\1\u9172\1\u91c8\1\u921e\1\u9274\1\u92ca\1\u9320\1\u9376"+ + "\1\u93cc\1\u9422\1\u9478\1\u94ce\1\u9524\1\u957a\1\u95d0\1\u9626"+ + "\1\u967c\1\u96d2\1\u9728\1\u977e\1\u97d4\1\u982a\1\u9880\1\u98d6"+ + "\1\u992c\1\u9982\1\u99d8\1\u9a2e\1\u9a84\1\u9ada\1\u9b30\1\u9b86"+ + "\1\u9bdc\1\u9c32\1\u9c88\1\u9cde\1\u9d34\1\u9d8a\1\u9de0\1\u9e36"+ + "\1\u9e8c\1\u9ee2\1\u9f38\1\u9f8e\1\u9fe4\1\ua03a\1\ua090\1\ua0e6"+ + "\1\ua13c\1\ua192\1\ua1e8\1\ua23e\1\ua294\1\ua2ea\1\ua340\1\ua396"+ + "\1\ua3ec\1\ua442\1\ua498\1\ua4ee\1\ua544\1\ua59a\1\ua5f0\1\ua646"+ + "\1\ua69c\1\ua6f2\1\ua748\1\ua79e\1\ua7f4\1\ua84a\1\ua8a0\1\ua8f6"+ + "\1\ua94c\1\ua9a2\1\ua9f8\1\uaa4e\1\uaaa4\1\uaafa\1\uab50\1\uaba6"+ + "\1\uabfc\1\uac52\1\uaca8\1\uacfe\1\uad54\1\uadaa\1\uae00\1\uae56"+ + "\1\uaeac\1\uaf02\1\uaf58\1\uafae\1\ub004\1\ub05a\1\ub0b0\1\ub106"+ + "\1\ub15c\1\ub1b2\1\ub208\1\ub25e\1\ub2b4\1\ub30a\1\ub360\1\ub3b6"+ + "\1\ub40c\1\ub462\1\ub4b8\1\ub50e\1\ub564\1\ub5ba\1\ub610\1\ub666"+ + "\1\ub6bc\1\ub712\1\ub768\1\ub7be\1\ub814\1\ub86a\1\ub8c0\1\ub916"+ + "\1\ub96c\1\ub9c2\1\uba18\1\uba6e\1\ubac4\1\ubb1a\1\ubb70\1\ubbc6"+ + "\1\ubc1c\1\ubc72\1\ubcc8\1\ubd1e\1\ubd74\1\ubdca\1\ube20\1\ube76"+ + "\1\ubecc\1\ubf22\1\ubf78\1\ubfce\1\uc024\1\uc07a\1\uc0d0\1\uc126"+ + "\1\uc17c\1\uc1d2\1\uc228\1\uc27e\1\uc2d4\1\uc32a\1\uc380\1\uc3d6"+ + "\1\uc42c\1\uc482\1\uc4d8\1\uc52e\1\uc584\1\uc5da\1\uc630\1\uc686"+ + "\1\uc6dc\1\uc732\1\uc788\1\uc7de\1\uc834\1\uc88a\1\uc8e0\1\uc3d6"+ + "\1\uc936\1\uc98c\1\uc9e2\1\uca38\1\uca8e\1\ucae4\1\ucb3a\1\ucb90"+ + "\1\ucbe6\1\ucc3c\1\ucc92\1\ucce8\1\ucd3e\1\ucd94\1\ucdea\1\uce40"+ + "\1\uce96\1\uceec\1\ucf42\1\ucf98\1\ucfee\1\ud044\1\ud09a\1\ud0f0"+ + "\1\ud146\1\ud19c\1\ud1f2\1\ud248\1\ud29e\1\ud2f4\1\ud34a\1\ud3a0"+ + "\1\ud3f6\1\ud44c\1\ud4a2\1\ud4f8\1\ud54e\1\ud5a4\1\ud5fa\1\ud650"+ + "\1\ud6a6\1\ud6fc\1\ud752\1\ud7a8\1\ud7fe\1\ud854\1\ud8aa\1\ud900"+ + "\1\ud956\0\u05b6\1\ud9ac\1\uda02\1\uda58\1\udaae\1\udb04\1\udb5a"+ + "\1\udbb0\1\udc06\1\udc5c\1\udcb2\1\udd08\1\udd5e\1\uddb4\1\ude0a"+ + "\1\ude60\1\udeb6\1\udf0c\1\udf62\1\udfb8\1\ue00e\1\ue064\1\ue0ba"+ + "\1\ue110\1\ue166\1\ue1bc\1\ue212\1\ue268\1\ue2be\1\ue314\1\ue36a"+ + "\1\ue3c0\1\ue416\1\ue46c\1\ue4c2\1\ue518\1\u9cde\1\ue56e\1\ue5c4"+ + "\1\ue61a\1\ue670\1\ue6c6\1\ue71c\1\ue772\1\ue7c8\1\ue81e\1\ue874"+ + "\1\ue8ca\1\ue920\1\ue976\1\ue9cc\1\uea22\1\uea78\1\ueace\1\ueb24"+ + "\1\ueb7a\1\uebd0\1\uec26\1\uec7c\1\uecd2\1\ued28\1\ued7e\1\uedd4"+ + "\1\uee2a\1\uee80\1\ueed6\1\uef2c\1\uef82\1\uefd8\1\uf02e\1\uf084"+ + "\1\uf0da\1\uf130\1\uf186\1\uf1dc\1\uf232\1\uf288\1\uf2de\1\uf334"+ + "\1\uf38a\1\uf3e0\1\uf436\1\uf48c\1\uf4e2\1\uf538\1\uf58e\1\uf5e4"+ + "\1\uf63a\1\uf690\1\uf6e6\1\uf73c\1\uf792\1\uf7e8\1\uf83e\1\uf894"+ + "\1\uf8ea\1\uf940\1\uf996\1\uf9ec\1\ufa42\1\ufa98\1\ufaee\1\ufb44"+ + "\1\ufb9a\1\ufbf0\1\ufc46\1\ufc9c\1\ufcf2\1\ufd48\1\ufd9e\1\ufdf4"+ + "\1\ufe4a\1\ufea0\1\ufef6\1\uff4c\1\uffa2\1\ufff8\2\116\2\244"+ + "\2\372\2\u0150\2\u01a6\2\u01fc\2\u0252\2\u02a8\2\u02fe\2\u0354"+ + "\2\u03aa\2\u0400\2\u0456\2\u04ac\2\u0502\2\u0558\2\u05ae\2\u0604"+ + "\2\u065a\2\u06b0\2\u0706\2\u075c\2\u07b2\2\u0808\2\u085e\2\u08b4"+ + "\2\u090a\2\u0960\2\u09b6\2\u0a0c\2\u0a62\2\u0ab8\2\u0b0e\2\u0b64"+ + "\2\u0bba\2\u0c10\2\u0c66\2\u0cbc\2\u0d12\2\u0d68\2\u0dbe\2\u0e14"+ + "\2\u0e6a\2\u0ec0\2\u0f16\2\u0f6c\2\u0fc2\2\u1018\2\u106e\2\u10c4"+ + "\2\u111a\2\u1170\2\u11c6\2\u121c\2\u1272\2\u12c8\2\u131e\2\u1374"+ + "\2\u13ca\2\u1420\2\u1476\2\u14cc\2\u1522\2\u1578\2\u15ce\2\u1624"+ + "\2\u167a\2\u16d0\2\u1726\2\u177c\2\u17d2\2\u1828\2\u187e\2\u18d4"+ + "\2\u192a\2\u1980\2\u19d6\2\u1a2c\2\u1a82\2\u1ad8\2\u1b2e\2\u1b84"+ + "\2\u1bda\2\u1c30\2\u1c86\2\u1cdc\2\u1d32\2\u1d88\2\u1dde\2\u1e34"+ + "\2\u1e8a\2\u1ee0\2\u1f36\2\u1f8c\2\u1fe2\2\u2038\2\u208e\2\u20e4"+ + "\2\u213a\2\u2190\2\u21e6\2\u223c\2\u2292\2\u22e8\2\u233e\2\u2394"+ + "\2\u23ea\2\u2440\2\u2496\2\u24ec\2\u2542\2\u2598\2\u25ee\2\u2644"+ + "\2\u269a\2\u26f0\2\u2746\2\u279c\2\u27f2\1\ua396\2\u2848\2\u289e"+ + "\2\u28f4\2\u294a\2\u29a0\2\u29f6\2\u2a4c\2\u2aa2\2\u2af8\2\u2b4e"+ + "\2\u2ba4\2\u2bfa\2\u2c50\2\u2ca6\2\u2cfc\2\u2d52\2\u2da8\2\u2dfe"+ + "\2\u2e54\2\u2eaa\2\u2f00\2\u2f56\2\u2fac\2\u3002\2\u3058\2\u30ae"+ + "\2\u3104\2\u315a\2\u31b0\2\u3206\2\u325c\2\u32b2\2\u3308\2\u335e"+ + "\2\u33b4\2\u340a\2\u3460\2\u34b6\2\u350c\2\u3562\2\u35b8\2\u360e"+ + "\2\u3664\2\u36ba\2\u3710\2\u3766\2\u37bc\2\u3812\2\u3868\2\u38be"+ + "\2\u3914\2\u396a\2\u39c0\2\u3a16\2\u3a6c\2\u3ac2\2\u3b18\2\u3b6e"+ + "\2\u3bc4\2\u3c1a\2\u3c70\2\u3cc6\2\u3d1c\2\u3d72\2\u3dc8\2\u3e1e"+ + "\2\u3e74\2\u3eca\2\u3f20\2\u3f76\2\u3fcc\2\u4022\2\u4078\2\u40ce"+ + "\2\u4124\2\u417a\2\u41d0\2\u4226\2\u427c\2\u42d2\2\u4328\2\u437e"+ + "\2\u43d4\2\u442a\2\u4480\2\u44d6\2\u452c\2\u4582\2\u45d8\2\u462e"+ + "\2\u4684\2\u46da\2\u4730\2\u4786\2\u47dc\2\u4832\2\u4888\2\u48de"+ + "\2\u4934\2\u498a\2\u49e0\2\u4a36\2\u4a8c\2\u4ae2\2\u4b38\2\u4b8e"+ + "\2\u4be4\2\u4c3a\2\u4c90\2\u4ce6\2\u4d3c\2\u4d92\2\u4de8\2\u4e3e"+ + "\2\u4e94\2\u4eea\2\u4f40\2\u4f96\2\u4fec\2\u5042\2\u5098\2\u50ee"+ + "\2\u5144\2\u519a\2\u51f0\2\u5246\2\u529c\2\u52f2\2\u5348\2\u539e"+ + "\2\u53f4\2\u544a\2\u54a0\2\u54f6\2\u554c\2\u55a2\2\u55f8\2\u564e"+ + "\2\u56a4\2\u56fa\2\u5750\2\u57a6\2\u57fc\2\u5852\2\u58a8\2\u58fe"+ + "\2\u5954\2\u59aa\2\u5a00\2\u5a56\2\u5aac\2\u5b02\2\u5b58\2\u5bae"+ + "\2\u5c04\2\u5c5a\2\u5cb0\2\u5d06\2\u5d5c\2\u5db2\2\u5e08\2\u5e5e"+ + "\2\u5eb4\2\u5f0a\2\u5f60\2\u5fb6\2\u600c\2\u6062\2\u60b8\2\u610e"+ + "\2\u6164\2\u61ba\2\u6210\2\u6266\2\u62bc\2\u6312\2\u6368\2\u63be"+ + "\2\u6414\2\u646a\2\u64c0\2\u6516\2\u656c\2\u65c2\2\u6618\2\u666e"+ + "\2\u66c4\2\u671a\2\u6770\2\u67c6\2\u681c\2\u6872\2\u68c8\2\u691e"+ + "\2\u6974\2\u69ca\2\u6a20\2\u6a76\2\u6acc\2\u6b22\2\u6b78\2\u6bce"+ + "\2\u6c24\2\u6c7a\2\u6cd0\2\u6d26\2\u6d7c\2\u6dd2\2\u6e28\2\u6e7e"+ + "\2\u6ed4\2\u6f2a\2\u6f80\2\u6fd6\2\u702c\2\u7082\2\u70d8\2\u712e"+ + "\2\u7184\2\u71da\2\u7230\2\u7286\2\u72dc\2\u7332\2\u7388\2\u73de"+ + "\2\u7434\2\u748a\2\u74e0\2\u7536\2\u758c\2\u75e2\2\u7638\2\u768e"+ + "\2\u76e4\2\u773a\2\u7790\2\u77e6\2\u783c\2\u7892\2\u78e8\2\u793e"+ + "\2\u7994\2\u79ea\2\u7a40\2\u7a96\2\u7aec\2\u7b42\2\u7b98\2\u7bee"+ + "\2\u7c44\2\u7c9a\2\u7cf0\2\u7d46\2\u7d9c\2\u7df2\2\u7e48\2\u7e9e"+ + "\2\u7ef4\2\u7f4a\2\u7fa0\2\u7ff6\2\u804c\2\u80a2\2\u80f8\2\u814e"+ + "\2\u81a4\2\u81fa\2\u8250\2\u82a6\2\u82fc\2\u8352\2\u83a8\2\u83fe"+ + "\2\u8454\2\u84aa\2\u8500\2\u8556\2\u85ac\2\u8602\2\u8658\2\u86ae"+ + "\2\u8704\2\u875a\2\u87b0\2\u8806\2\u885c\2\u88b2\2\u8908\2\u895e"+ + "\2\u89b4\2\u8a0a\2\u8a60\2\u8ab6\2\u8b0c\2\u8b62\2\u8bb8\2\u8c0e"+ + "\2\u8c64\2\u8cba\2\u8d10\2\u8d66\2\u8dbc\2\u8e12\2\u8e68\2\u8ebe"+ + "\2\u8f14\2\u8f6a\2\u8fc0\2\u9016\2\u906c\2\u90c2\2\u9118\2\u916e"+ + "\2\u91c4\2\u921a\2\u9270\2\u92c6\2\u931c\2\u9372\2\u93c8\2\u941e"+ + "\2\u9474\2\u94ca\2\u9520\2\u9576\2\u95cc\2\u9622\2\u9678\2\u96ce"+ + "\2\u9724\2\u977a\2\u97d0\2\u9826\2\u987c\2\u98d2\2\u9928\2\u997e"+ + "\2\u99d4\2\u9a2a\2\u9a80\2\u9ad6\2\u9b2c\2\u9b82\2\u9bd8\2\u9c2e"+ + "\2\u9c84\2\u9cda\2\u9d30\2\u9d86\2\u9ddc\2\u9e32\2\u9e88\2\u9ede"+ + "\2\u9f34\2\u9f8a\2\u9fe0\2\ua036\2\ua08c\2\ua0e2\2\ua138\2\ua18e"+ + "\2\ua1e4\2\ua23a"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[2058]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\10\2\11\1\12\1\13\1\12\1\14\1\12\1\15"+ + "\1\16\1\10\1\17\1\20\1\21\1\22\1\10\1\11"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\11"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\44\1\45\1\46\1\47\1\50\1\51"+ + "\1\26\1\52\1\26\1\53\1\54\1\53\1\55\1\11"+ + "\1\56\1\57\1\60\1\11\1\61\1\62\1\63\1\64"+ + "\1\65\1\66\1\11\1\67\1\11\2\45\1\70\1\11"+ + "\1\71\1\72\1\11\1\73\1\74\1\75\1\76\1\77"+ + "\1\100\1\101\1\102\1\11\1\103\1\104\1\105\1\106"+ + "\2\12\2\11\15\107\1\110\3\107\1\111\2\107\1\112"+ + "\32\107\1\113\10\107\1\114\35\107\15\115\1\116\3\115"+ + "\1\117\2\115\1\120\22\115\1\121\7\115\1\122\10\115"+ + "\1\123\5\115\1\124\1\115\1\125\25\115\15\126\1\127"+ + "\3\126\1\130\35\126\1\131\10\126\1\132\35\126\12\133"+ + "\1\134\1\135\4\133\1\136\1\137\104\133\10\140\1\141"+ + "\1\140\1\142\6\140\1\143\104\140\12\133\1\144\1\145"+ + "\4\133\1\136\1\146\104\133\10\10\1\0\2\10\1\0"+ + "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ + "\17\10\2\0\27\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\2\150\1\151\3\12"+ + "\1\150\1\12\1\0\2\150\1\0\1\150\1\152\1\0"+ + "\2\150\4\0\1\153\3\150\1\152\1\154\1\0\1\155"+ + "\2\150\1\154\1\150\1\153\1\150\14\0\2\150\1\152"+ + "\5\150\1\152\6\150\2\0\22\150\2\12\4\150\1\156"+ + "\1\157\2\160\1\150\1\160\1\0\2\150\1\0\1\150"+ + "\1\152\1\0\2\150\4\0\1\153\2\161\1\162\1\152"+ + "\1\154\1\0\1\155\2\150\1\154\1\150\1\153\1\150"+ + "\14\0\2\150\1\152\2\150\1\162\2\150\1\152\6\150"+ + "\2\0\22\150\2\160\2\150\1\10\7\11\1\0\1\163"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\164\1\165\1\11\14\0\1\166\1\167"+ + "\15\11\2\0\1\10\25\11\10\170\1\171\1\170\1\172"+ + "\6\170\1\173\104\170\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\174\14\0\17\11\2\0\1\10\25\11\13\0"+ + "\1\175\112\0\1\10\7\11\1\0\1\176\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\177\1\200\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\201\1\202"+ + "\1\11\14\0\1\11\1\203\4\11\1\204\10\11\2\0"+ + "\1\10\25\11\150\0\1\24\103\0\12\205\1\206\10\205"+ + "\1\207\1\210\23\205\1\211\55\205\50\0\1\53\55\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\212\4\11\1\213\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\214\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\215\2\11\14\0"+ + "\1\11\1\216\4\11\1\217\5\11\1\220\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\221\4\11\14\0\1\11\1\222\12\11\1\223\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\224\1\11\14\0\1\11\1\225\4\11\1\226"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\227\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\230\4\11\14\0\5\11\1\231"+ + "\1\11\1\232\2\11\1\233\4\11\2\0\1\10\13\11"+ + "\1\234\11\11\33\0\1\53\14\0\1\53\60\0\3\155"+ + "\1\0\1\155\112\0\2\155\2\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\235\1\236\3\11\14\0\1\237"+ + "\1\240\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\241\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\242\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\243\1\244\1\11\14\0\5\11\1\245\4\11"+ + "\1\246\4\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\247\1\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\250\3\11\2\0\5\11\1\251\14\0"+ + "\2\11\1\252\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\253\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\254\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\255\1\11\1\256\1\11\1\257\1\11\14\0\1\260"+ + "\2\11\1\261\5\11\1\262\2\11\1\263\2\11\2\0"+ + "\1\10\25\11\23\0\1\264\150\0\1\53\1\0\1\53"+ + "\124\0\1\265\1\53\120\0\1\53\4\0\1\53\125\0"+ + "\1\53\1\0\1\266\123\0\1\53\4\0\1\53\50\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\267\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\270\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\271\3\11\14\0\1\11\1\272"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\273"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\274\1\11\1\275\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\276\1\277\1\11\14\0\1\300\1\301\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\302\1\303\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\304\4\11\1\305\14\0\2\11\1\306\4\11"+ + "\1\307\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\310\3\11\14\0\6\11\1\311"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\312"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\313\1\314\2\11\14\0\1\11\1\315"+ + "\4\11\1\316\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\317\5\11\1\320"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\321\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\322"+ + "\1\323\3\11\14\0\1\11\1\324\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\325\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\326"+ + "\1\327\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\2\330\3\10\1\330\1\10\1\0\1\330\1\10\1\0"+ + "\2\330\1\0\1\10\1\330\4\0\6\330\2\0\6\330"+ + "\14\0\17\330\2\0\1\10\21\330\2\10\2\330\1\10"+ + "\7\11\1\0\1\331\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\2\11\1\332\3\11\2\0\1\11\1\333"+ + "\3\11\1\334\14\0\3\11\1\335\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\336\1\11"+ + "\1\337\3\11\14\0\1\340\1\341\1\11\1\342\1\343"+ + "\1\11\1\344\5\11\1\345\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\346\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\347\3\11"+ + "\1\350\1\11\14\0\2\11\1\351\14\11\2\0\1\10"+ + "\13\11\1\352\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\353\4\11\14\0\1\354\1\355\4\11\1\356"+ + "\5\11\1\357\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\360\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\5\11\1\361\1\362\16\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\363\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\364\3\11\14\0\1\11\1\365\4\11\1\366\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\367\2\11\14\0\6\11\1\370\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\371\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\372\1\373\2\11\14\0\1\11\1\374\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\375\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\2\11\1\376\3\11"+ + "\2\0\6\11\14\0\3\11\1\377\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0100\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0101"+ + "\1\11\1\u0102\2\11\14\0\6\11\1\u0103\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0104\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0105\1\u0106\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\u0107\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\15\107\1\0\3\107\1\0\2\107\1\0\32\107\1\0"+ + "\10\107\1\0\35\107\35\0\1\u0108\27\0\1\u0109\63\0"+ + "\1\u010a\137\0\1\u010b\160\0\1\u010c\35\0\15\115\1\0"+ + "\3\115\1\0\2\115\1\0\22\115\1\0\7\115\1\0"+ + "\10\115\1\0\5\115\1\0\1\115\1\0\25\115\35\0"+ + "\1\u010d\27\0\1\u010e\63\0\1\u010f\103\0\1\u0110\4\0"+ + "\1\u0110\2\0\1\u0110\2\0\2\u0110\5\0\1\u0111\1\0"+ + "\6\u0110\2\0\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0"+ + "\21\u0110\2\0\2\u0110\35\0\1\u0113\160\0\1\u0114\135\0"+ + "\1\u0115\62\0\1\u0116\1\u0117\1\u0118\1\u0119\1\0\1\u011a"+ + "\15\0\1\u011b\1\u011c\1\u011d\1\u011e\1\0\1\u011f\3\0"+ + "\1\u0120\34\0\15\126\1\0\3\126\1\0\35\126\1\0"+ + "\10\126\1\0\35\126\35\0\1\u0121\27\0\1\u0122\75\0"+ + "\1\u0123\160\0\1\u0124\35\0\12\133\2\0\4\133\2\0"+ + "\104\133\21\u0125\1\0\104\u0125\13\0\1\u0126\113\0\2\u0127"+ + "\3\0\1\u0127\2\0\1\u0127\2\0\2\u0127\2\0\1\u0127"+ + "\4\0\6\u0127\2\0\6\u0127\14\0\17\u0127\1\u0128\2\0"+ + "\21\u0127\2\0\2\u0127\10\140\1\0\1\140\1\0\6\140"+ + "\1\0\104\140\10\0\1\u0129\115\0\21\u012a\1\0\104\u012a"+ + "\21\u012b\1\0\104\u012b\10\10\1\0\1\u012c\1\10\1\0"+ + "\2\10\1\0\2\10\4\0\6\10\2\0\6\10\14\0"+ + "\17\10\2\0\26\10\10\150\1\0\2\150\1\0\2\150"+ + "\1\0\2\150\4\0\6\150\2\0\6\150\14\0\17\150"+ + "\2\0\30\150\1\151\3\u012d\1\150\1\u012d\1\0\2\150"+ + "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ + "\14\0\17\150\2\0\22\150\2\u012d\5\150\3\u012e\1\150"+ + "\1\u012e\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ + "\6\150\1\u012f\1\0\6\150\3\0\1\u012f\10\0\17\150"+ + "\2\0\22\150\2\u012e\5\150\3\155\1\150\1\155\1\0"+ + "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\4\150"+ + "\1\152\1\154\2\0\2\150\1\154\3\150\14\0\2\150"+ + "\1\152\5\150\1\152\6\150\2\0\22\150\2\155\4\150"+ + "\1\156\1\150\2\u0130\1\150\1\u0130\1\0\2\150\1\0"+ + "\2\150\1\0\2\150\4\0\6\150\2\0\6\150\14\0"+ + "\17\150\2\0\22\150\2\u0130\5\150\3\157\1\150\1\157"+ + "\1\0\2\150\1\0\1\150\1\152\1\0\2\150\4\0"+ + "\4\150\1\152\1\154\1\0\1\155\2\150\1\154\3\150"+ + "\14\0\2\150\1\152\5\150\1\152\6\150\2\0\22\150"+ + "\2\157\4\150\1\156\1\157\2\160\1\150\1\160\1\0"+ + "\2\150\1\0\1\150\1\152\1\0\2\150\4\0\1\u0131"+ + "\3\150\1\152\1\154\1\0\1\155\2\150\1\154\1\150"+ + "\1\u0131\1\150\14\0\2\150\1\152\5\150\1\152\6\150"+ + "\2\0\22\150\2\160\6\150\2\u0132\2\150\1\0\2\150"+ + "\1\0\2\150\1\0\2\150\4\0\6\150\2\0\6\150"+ + "\14\0\17\150\2\0\31\150\5\u0133\1\0\2\150\1\0"+ + "\1\150\1\u0133\1\0\2\150\4\0\1\150\2\u0133\1\150"+ + "\2\u0133\2\0\2\150\2\u0133\2\150\14\0\2\150\1\u0133"+ + "\1\150\1\u0133\3\150\1\u0133\6\150\2\0\2\150\1\u0133"+ + "\17\150\2\u0133\2\150\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0134\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0135\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0136\2\11\14\0\1\11\1\u0137"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0138\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0139"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u013a\1\11\14\0\7\11\1\u013b\7\11\2\0\1\10"+ + "\25\11\10\170\1\u013c\1\170\1\172\6\170\1\173\104\170"+ + "\10\0\1\u013d\115\0\4\u013e\2\170\1\u013e\1\170\1\u013f"+ + "\1\u0140\4\170\3\u013e\1\0\5\u013e\1\170\5\u013e\2\170"+ + "\63\u013e\2\170\2\u013e\10\173\1\u013c\1\173\1\u0141\113\173"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0142\3\11"+ + "\14\0\6\11\1\u0143\10\11\2\0\1\10\25\11\13\0"+ + "\1\u0144\112\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0145\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\303"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0146\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0147\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0148\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\303\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0149\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\12\205\1\206\10\205\1\u014a\123\205"+ + "\1\0\104\205\24\0\1\u014b\101\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u014c\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u014d\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u014e\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u014f\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0150"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0151\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0152\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0153\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0154\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0155\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0156\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0157\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0158\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0159\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u015a\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u015b\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u015c\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u015d\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u015e"+ + "\5\11\14\0\4\11\1\u015f\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u0160\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0161\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\4\11\1\u0162\1\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0163\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0164\2\11\14\0"+ + "\14\11\1\303\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0165\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0166\4\11\14\0\6\11\1\u0167\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\2\11\1\u0168\22\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0169\4\11\1\u016a\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u016b\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u016c\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u016d\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u016e\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u016f\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u0142\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0170\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\11\1\u0171\4\11\2\0"+ + "\5\11\1\u0172\14\0\17\11\2\0\1\10\5\11\1\u0173"+ + "\17\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0174\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0175\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0176\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0177\1\11\1\u0178"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0179\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\322\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u017a"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u017b\2\11\1\u017c\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u017d\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u017e\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\12\205\1\206\10\205\2\0"+ + "\101\205\50\0\1\53\1\0\1\26\53\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u017f\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u0180\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0181\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0182\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u0183\3\11\2\0\1\u0184\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u0185\4\11\1\u0186\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0187\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0188\4\11\1\u016d"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0189\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u018a\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u018b\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u018c\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u018d\4\11\1\u018e\14\0\12\11\1\u018f"+ + "\4\11\2\0\1\10\14\11\1\u0190\10\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0191\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0192\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0193\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\u0194\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0195"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\5\11\1\u0196\11\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0197\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\3\11\1\u0198\21\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0199\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u019a\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u019b\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u019c\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u019d\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u019e\1\11\14\0\6\11\1\u019f\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0180"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u01a0\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u01a1"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u01a2\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u01a3\1\11\1\u01a4\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01a5\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\330\1\0\1\330"+ + "\1\u01a6\1\0\2\330\1\0\1\10\1\330\4\0\6\330"+ + "\2\0\6\330\14\0\17\330\2\0\1\10\25\330\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u01a7\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u01a8\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u01a9\4\11\14\0"+ + "\6\11\1\u01aa\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u01ab\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u01ac\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u01ad\1\11\1\u01ae"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0142\1\u01af\4\11\14\0\4\11"+ + "\1\u01b0\12\11\2\0\1\10\3\11\1\u01b1\21\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u01b2"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u01b3\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u01b4"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u01b5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u01b6\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u01b7\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01b8"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u01b9\4\11\1\u01ba\14\0\1\u01bb\1\11"+ + "\1\u01bc\1\u01bd\1\u01be\5\11\1\u01bf\4\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01c0"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u01c1\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u01c2\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\5\11\1\u01c3\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u01c4\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01c5"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01c6\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u01c7\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u01c8\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u01c9\14\0\4\11\1\u01ca\11\11"+ + "\1\u01cb\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ + "\1\u01cc\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\4\11\1\u01cd\20\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u01ce\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u01cf\4\11\14\0\4\11\1\u01d0\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u01d1\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u01d2\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u019d\5\11\14\0\3\11\1\u01d3\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u01d4"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u01d5\1\11\14\0\7\11\1\u01d6"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u01d7\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\12\11\1\u01d8\4\11\2\0\1\10\25\11\1\10\5\11"+ + "\1\u01d9\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u01da\5\11\14\0"+ + "\17\11\2\0\1\10\2\11\1\u01db\22\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u01dc\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u01dd\14\0\17\11\2\0\1\10\14\11\1\u01de\10\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u01df\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u01e0\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u01e1\4\11\1\u01e2\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u01e3"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u01e4\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u01e5"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u01e6\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u01e7\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0198\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\62\0\1\u01e8\104\0"+ + "\1\u01e9\121\0\1\u01ea\160\0\1\u01eb\117\0\1\u01ec\104\0"+ + "\1\u01ed\64\0\52\u0110\1\u0112\53\u0110\1\0\1\u0110\4\0"+ + "\1\u0110\2\0\1\u0110\2\0\2\u0110\7\0\6\u0110\2\0"+ + "\6\u0110\7\0\1\u0112\4\0\17\u0110\3\0\21\u0110\2\0"+ + "\2\u0110\35\0\1\u01ee\160\0\1\u01ef\76\0\1\u01f0\17\0"+ + "\1\u01f1\1\0\1\u01f2\1\0\1\u01f3\3\0\1\u01f4\45\0"+ + "\1\u01f5\45\0\1\u01f6\1\u01f7\104\0\1\u01f8\152\0\1\u01f9"+ + "\52\0\1\u01fa\153\0\1\u01fb\25\0\1\u01fc\67\0\1\u01fd"+ + "\135\0\1\u01fe\126\0\1\u01ff\125\0\1\u0200\101\0\1\u0201"+ + "\150\0\1\u0202\150\0\1\u0203\104\0\1\u0204\121\0\1\u0205"+ + "\160\0\1\u0206\50\0\1\u0207\113\0\7\u0127\1\0\1\u0127"+ + "\1\u0208\1\0\2\u0127\2\0\1\u0127\4\0\6\u0127\2\0"+ + "\6\u0127\14\0\17\u0127\3\0\25\u0127\77\u0209\1\0\26\u0209"+ + "\10\0\1\u020a\115\0\3\10\5\u020b\1\0\2\10\1\0"+ + "\1\10\1\u020b\1\0\2\10\4\0\1\10\2\u020b\1\10"+ + "\2\u020b\2\0\2\10\2\u020b\2\10\14\0\2\10\1\u020b"+ + "\1\10\1\u020b\3\10\1\u020b\6\10\2\0\2\10\1\u020b"+ + "\17\10\2\u020b\2\10\2\150\1\151\3\u012d\1\150\1\u012d"+ + "\1\0\2\150\1\0\2\150\1\0\2\150\4\0\1\153"+ + "\5\150\2\0\4\150\1\153\1\150\14\0\17\150\2\0"+ + "\22\150\2\u012d\5\150\3\u012e\1\150\1\u012e\1\0\2\150"+ + "\1\0\1\150\1\152\1\0\2\150\4\0\4\150\1\152"+ + "\1\150\2\0\6\150\14\0\2\150\1\152\5\150\1\152"+ + "\6\150\2\0\22\150\2\u012e\2\150\3\0\3\u012e\1\0"+ + "\1\u012e\112\0\2\u012e\2\0\2\150\1\156\1\150\2\u0130"+ + "\1\150\1\u0130\1\0\2\150\1\0\2\150\1\0\2\150"+ + "\4\0\1\u0131\5\150\2\0\4\150\1\u0131\1\150\14\0"+ + "\17\150\2\0\22\150\2\u0130\4\150\1\u020c\1\150\2\u0132"+ + "\2\150\1\0\2\150\1\0\2\150\1\0\2\150\4\0"+ + "\6\150\2\0\6\150\14\0\17\150\2\0\30\150\1\u020d"+ + "\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0\2\150"+ + "\4\0\1\u0131\2\u0133\1\150\2\u0133\2\0\2\150\2\u0133"+ + "\1\u0131\1\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ + "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u020e\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u020f\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u0210\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0211\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0213\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0214\14\0"+ + "\4\11\1\u0215\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0216\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0217\13\11\2\0\1\10\25\11"+ + "\10\u013e\1\u0218\10\u013e\1\0\107\u013e\5\u0219\1\u0218\4\u013e"+ + "\1\u0219\3\u013e\1\0\4\u013e\2\u0219\1\u013e\2\u0219\4\u013e"+ + "\2\u0219\20\u013e\1\u0219\1\u013e\1\u0219\3\u013e\1\u0219\12\u013e"+ + "\1\u0219\17\u013e\2\u0219\2\u013e\4\0\2\173\1\0\2\173"+ + "\1\u021a\4\173\11\0\1\173\5\0\2\173\63\0\2\173"+ + "\2\0\1\10\7\11\1\0\1\11\1\147\1\0\1\u021b"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\303\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u021c\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0163\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u021d\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u021e\2\11"+ + "\14\0\2\11\1\u021f\14\11\2\0\1\10\25\11\23\0"+ + "\1\u0220\102\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0221\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0222\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0223\3\11\14\0\16\11\1\u0224\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0225"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\11\1\u0226\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0227\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0228\3\11\1\u0229\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u022a\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u022b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u022c\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u022d\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u022e"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u022f\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0230\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0231"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0232\1\11\1\u0233\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u0234\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0235"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0236\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0237"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0238\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0239\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u023b\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u023c\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\303\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u023d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\303\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u023e\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u023f"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\3\11\1\u0240"+ + "\13\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\303\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u0241\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\303\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0242\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\247\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0243\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0244\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0245\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\14\11\1\u0246\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\2\11\1\u0247\22\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u022e\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\203"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0248\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0249\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\11\11\1\u024a\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u021d\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u024b\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0230\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0188\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u024c"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\15\11\1\u024d"+ + "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0142\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u024e\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u024f"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u0249\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ + "\1\u0230\23\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0250"+ + "\5\11\14\0\3\11\1\u0251\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0252\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\12\11\1\u0253\4\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\u0254\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0255\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0167\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u022e\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0256\4\11\1\u0165"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u0190\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0257\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0258\5\11\14\0\3\11"+ + "\1\u0190\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0259\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u025a\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u025b\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u025c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u025d"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u025e\1\11\14\0\1\11\1\u0245"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u025f\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0260\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0261\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0262\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0142\1\u0263\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ + "\1\u0264\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0265\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u016d\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\u0142\16\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0266\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\303\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\1\11\1\u0230\7\11\1\u0267\3\11\1\u0268"+ + "\7\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\303\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0269\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u026a\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u026b\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u026c\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u026d\14\11\2\0"+ + "\1\10\25\11\10\10\1\0\1\u026e\1\10\1\0\2\10"+ + "\1\0\2\10\4\0\6\10\2\0\6\10\14\0\17\10"+ + "\2\0\27\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u026f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0270\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0271\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0272\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0273\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0274\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0275\3\11\14\0\6\11\1\u0276"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u0277\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0278\3\11\1\u0279\4\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\u027a\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u027b\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0230\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u027c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u027d"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u027e\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u027f\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0280\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0281"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0282\3\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u0283\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0284\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0285"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0286\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u0287\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0288\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0289\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u028a\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u028b\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u028c\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u028d\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\230\4\11\14\0"+ + "\5\11\1\u028e\11\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u028f\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0290\3\11\14\0\1\11\1\u0291\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\11\11\1\u0292\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0293\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0294\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0295\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0296"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u0297\16\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0298\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\10\11\1\u0299\6\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\10\11\1\u0142\6\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u029a"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u029b\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u015d\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0142\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u029c"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\1\0\1\u029d\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u029e\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u029f\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u02a0"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u02a1\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u02a2\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u02a3\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\1\11\1\u02a4\1\u02a5\22\11\1\10\7\11\1\0"+ + "\1\u02a6\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u02a7\13\11\2\0\1\10\13\11\1\u02a8\11\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u02a9\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02aa\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u02ab\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u02ac\16\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u02ad\1\u02ae\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u02af\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u02b0\5\11\1\u02b1\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ + "\1\u02b2\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02b3\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u02b4\3\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u02b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\16\11\1\u02b6\2\0\1\10\25\11\56\0\1\u02b7"+ + "\106\0\1\u01e8\150\0\1\u02b8\77\0\1\u02b9\147\0\1\u02ba"+ + "\106\0\1\u01ec\150\0\1\u02bb\77\0\1\u02bc\156\0\1\u02bd"+ + "\120\0\1\u02be\125\0\1\u02bf\61\0\1\u02c0\151\0\1\u02c1"+ + "\122\0\1\u02c2\126\0\1\u02c3\150\0\1\u02c4\101\0\1\u02c5"+ + "\130\0\1\u02c6\22\0\1\u02c7\77\0\1\u02c8\126\0\1\u02c9"+ + "\1\u02ca\102\0\1\u02cb\153\0\1\u02cc\145\0\1\u02cd\101\0"+ + "\1\u02ce\124\0\1\u02cf\125\0\1\u02d0\23\0\1\u02d1\102\0"+ + "\1\u02d2\145\0\1\u02d3\106\0\1\u0203\150\0\1\u02d4\77\0"+ + "\1\u02d5\102\0\1\u02d6\114\0\77\u0209\1\u02d7\26\u0209\3\10"+ + "\5\u02d8\1\0\2\10\1\0\1\10\1\u02d8\1\0\2\10"+ + "\4\0\1\10\2\u02d8\1\10\2\u02d8\2\0\2\10\2\u02d8"+ + "\2\10\14\0\2\10\1\u02d8\1\10\1\u02d8\3\10\1\u02d8"+ + "\6\10\2\0\2\10\1\u02d8\17\10\2\u02d8\2\10\2\150"+ + "\1\u020d\5\u0133\1\0\2\150\1\0\1\150\1\u0133\1\0"+ + "\2\150\4\0\1\150\2\u0133\1\150\2\u0133\2\0\2\150"+ + "\2\u0133\2\150\14\0\2\150\1\u0133\1\150\1\u0133\3\150"+ + "\1\u0133\6\150\2\0\2\150\1\u0133\17\150\2\u0133\2\150"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u02d9\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u02da\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u02db"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u02dc\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0269\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u02dd\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u02de"+ + "\2\11\14\0\17\11\2\0\1\10\1\11\1\u02df\1\u02e0"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u02e1\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u02e2\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02e3"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u01c0\2\11\14\0\6\11"+ + "\1\u02e4\10\11\2\0\1\10\25\11\3\u013e\5\u02e5\1\u0218"+ + "\4\u013e\1\u02e5\3\u013e\1\0\4\u013e\2\u02e5\1\u013e\2\u02e5"+ + "\4\u013e\2\u02e5\20\u013e\1\u02e5\1\u013e\1\u02e5\3\u013e\1\u02e5"+ + "\12\u013e\1\u02e5\17\u013e\2\u02e5\2\u013e\3\0\5\u02e6\5\0"+ + "\1\u02e6\10\0\2\u02e6\1\0\2\u02e6\4\0\2\u02e6\20\0"+ + "\1\u02e6\1\0\1\u02e6\3\0\1\u02e6\12\0\1\u02e6\17\0"+ + "\2\u02e6\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\303\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u016d"+ + "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u022e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u02e7\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u02e8\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\1\11\1\u02e9\2\11\1\u02ea\20\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u0283\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u02eb\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\12\11\1\u02ec\12\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02ed\1\u02ee\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\15\11\1\u02ef\1\11\2\0\1\10\4\11\1\u02f0"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u02f1"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\21\11\1\u02f2\3\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u02f3\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u02f4\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0230\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\1\11\1\u02f5\23\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\303\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u02f6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0269\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0142\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u02f7\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u02f8\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u02f9"+ + "\1\11\1\0\1\10\1\11\4\0\4\11\1\u02fa\1\11"+ + "\2\0\6\11\14\0\10\11\1\u02fb\4\11\1\u02fc\1\11"+ + "\2\0\1\10\4\11\1\u02fd\5\11\1\u02fe\1\u02ff\1\11"+ + "\1\u0300\1\11\1\u0301\5\11\1\10\5\11\1\u0302\1\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0303\3\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u022a\6\11\1\u0304\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0305\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0306\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\14\11\1\u0307\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0308\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u028e"+ + "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0309\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\11\11"+ + "\1\u030a\5\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u030b\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u030c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u030d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\17\11\1\u030e"+ + "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u030f"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0310\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0311\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0165\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0262\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u0312\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0313\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0314\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\310\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0315\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0316"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0317\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0318\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0157\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0319"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u031a\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u031b\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u031c\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u031d\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\303\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u031e\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u031f\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0320\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u0321\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0230\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u01d0\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u0262\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0322\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0323\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u0324\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\303\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0325\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0142\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u0326\6\11\1\u0327"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0328"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0329\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\317\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u032a\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u032b\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u032c"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u032d\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0235\1\u032c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u032e\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u032f\15\11\2\0\1\10"+ + "\25\11\3\10\5\u0330\1\0\2\10\1\0\1\10\1\u0330"+ + "\1\0\2\10\4\0\1\10\2\u0330\1\10\2\u0330\2\0"+ + "\2\10\2\u0330\2\10\14\0\2\10\1\u0330\1\10\1\u0330"+ + "\3\10\1\u0330\6\10\2\0\2\10\1\u0330\17\10\2\u0330"+ + "\3\10\5\11\1\u0331\1\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0332\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\14\11\1\u0333\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u0334\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0335\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0336\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0337\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0338"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0339\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\16\11\1\u033a"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u033b\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u033c\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u033d\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u033e\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u033f\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0340\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0341\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0342\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0343\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0344\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0345\4\11\14\0\13\11\1\u0341\3\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0346\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0347\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0348\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\5\11\1\u0349"+ + "\11\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u034a\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u034b\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u034c\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u034d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u034e"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u034f\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0350\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0351\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\2\11\1\u022a\6\11\1\u0304"+ + "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0352"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0269\5\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0353\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0354\4\11"+ + "\14\0\17\11\2\0\1\10\23\11\1\u0355\1\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\12\11\1\u0356\12\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0357\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0358\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0359\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u035a\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u035b\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0269\5\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u022a\6\11\1\u0304\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\11\1\u035c\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\u035d\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\32\0\1\u035e\73\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u035f\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0360\7\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0361\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0362\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u0363\3\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0364\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0365\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0366\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0367\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0368\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u0369\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u036a"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u036b\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u036c\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\2\11\1\u036d\3\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u036e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u036f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0370\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0371\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0372\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0373\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0374\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0375"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0376\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\7\11\1\u0377\15\11\23\0\1\u0378"+ + "\144\0\1\u01e8\13\0\1\u02b7\50\0\1\u02b9\1\u0379\5\u02b9"+ + "\1\u0379\1\u02b9\2\0\2\u02b9\1\0\1\u0379\1\u02b9\2\0"+ + "\1\u02b9\1\u0379\6\u02b9\2\u0379\6\u02b9\4\u0379\1\0\1\u0379"+ + "\2\0\4\u0379\17\u02b9\2\0\1\u0379\25\u02b9\23\0\1\u037a"+ + "\144\0\1\u01ec\13\0\1\u02ba\50\0\1\u02bc\1\u037b\5\u02bc"+ + "\1\u037b\1\u02bc\2\0\2\u02bc\1\0\1\u037b\1\u02bc\2\0"+ + "\1\u02bc\1\u037b\6\u02bc\2\u037b\6\u02bc\4\u037b\1\0\1\u037b"+ + "\2\0\4\u037b\17\u02bc\2\0\1\u037b\25\u02bc\14\0\1\u037c"+ + "\20\0\1\u037d\153\0\1\u037e\123\0\1\u037f\123\0\1\u0380"+ + "\107\0\1\u0381\144\0\1\u0382\104\0\1\u0383\20\0\1\u0384"+ + "\125\0\1\u02ca\56\0\1\u0385\202\0\1\u0386\76\0\1\u0387"+ + "\1\0\1\u0388\143\0\1\u0389\133\0\1\u038a\123\0\1\u038b"+ + "\122\0\1\u038c\103\0\1\u038d\127\0\1\u038e\124\0\1\u038f"+ + "\125\0\1\u0390\125\0\1\u0391\130\0\1\u0392\106\0\1\u0393"+ + "\144\0\1\u0203\13\0\1\u02d3\50\0\1\u02d5\1\u0394\5\u02d5"+ + "\1\u0394\1\u02d5\2\0\2\u02d5\1\0\1\u0394\1\u02d5\2\0"+ + "\1\u02d5\1\u0394\6\u02d5\2\u0394\6\u02d5\4\u0394\1\0\1\u0394"+ + "\2\0\4\u0394\17\u02d5\2\0\1\u0394\25\u02d5\3\0\5\u0395"+ + "\5\0\1\u0395\10\0\2\u0395\1\0\2\u0395\4\0\2\u0395"+ + "\20\0\1\u0395\1\0\1\u0395\3\0\1\u0395\12\0\1\u0395"+ + "\17\0\2\u0395\2\0\3\10\5\u0396\1\0\2\10\1\0"+ + "\1\10\1\u0396\1\0\2\10\4\0\1\10\2\u0396\1\10"+ + "\2\u0396\2\0\2\10\2\u0396\2\10\14\0\2\10\1\u0396"+ + "\1\10\1\u0396\3\10\1\u0396\6\10\2\0\2\10\1\u0396"+ + "\17\10\2\u0396\3\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0397\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u0398\14\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0399\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u039a\3\11\1\u039b\1\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\10\11\1\u039c\1\11\1\u02fe\12\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u032c\2\11\14\0"+ + "\17\11\2\0\1\10\12\11\1\u039d\12\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u039e\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u039f\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u03a0\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03a1\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0262\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u03a2\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u03a3\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0341"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\3\u013e\5\u03a4"+ + "\1\u0218\4\u013e\1\u03a4\3\u013e\1\0\4\u013e\2\u03a4\1\u013e"+ + "\2\u03a4\4\u013e\2\u03a4\20\u013e\1\u03a4\1\u013e\1\u03a4\3\u013e"+ + "\1\u03a4\12\u013e\1\u03a4\17\u013e\2\u03a4\2\u013e\3\0\5\u03a5"+ + "\5\0\1\u03a5\10\0\2\u03a5\1\0\2\u03a5\4\0\2\u03a5"+ + "\20\0\1\u03a5\1\0\1\u03a5\3\0\1\u03a5\12\0\1\u03a5"+ + "\17\0\2\u03a5\2\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03a6\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03a7\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u03a8\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u03a9\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u03aa\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u03ab\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u03ac\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u03ad\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u03ae\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03af\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u01e4"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\22\11\1\u03b0\2\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03b1\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03b2\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u03b3\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u03b4"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u03b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0374\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03b6\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u03b7\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u03b8"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u03b9\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u03ba\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03bb"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u03bc"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u03bd\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u03be\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u03bf\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u03c0\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0180\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c1\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u03c2\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u03c3\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03c4\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\13\11\1\u03c5\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u03c6\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u03c7\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u03c8\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03c9"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u03ca\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0167\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u03cb\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0229\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u03cc\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u03cd\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\303\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03ce\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u03cf"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u03d0\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0165\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u03d1\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u03d2\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\11\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03b2\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u016d\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\13\11\1\u016d\3\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d3"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u03d4\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03d5"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03d6\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u03d7\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03d8"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u03d9\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u03da\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u03db\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u03dc\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0221\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u03dd\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u03de\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u03df\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\2\11\1\u02e1\3\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u03e0\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u03e1\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u03e2"+ + "\7\11\2\0\1\10\25\11\3\10\5\u03e3\1\0\2\10"+ + "\1\0\1\10\1\u03e3\1\0\2\10\4\0\1\10\2\u03e3"+ + "\1\10\2\u03e3\2\0\2\10\2\u03e3\2\10\14\0\2\10"+ + "\1\u03e3\1\10\1\u03e3\3\10\1\u03e3\6\10\2\0\2\10"+ + "\1\u03e3\17\10\2\u03e3\3\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03e4\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u03e5\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03e6\5\11\2\0\5\11\1\u0142\14\0\10\11\1\u03e7"+ + "\6\11\2\0\1\10\2\11\1\u03e8\1\11\1\u03e9\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u03ea\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u03eb\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0269\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\7\11\1\u03ec\7\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u03ed\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u03ee\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\5\11\1\u03ef"+ + "\5\11\1\u03f0\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u03f1\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u03f2\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u03f3\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u03f4\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u028f\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u03f5\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0235\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u03f6\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u03f7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0142"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u03f8\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u03f9\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u03fa\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u03fb\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u03fc\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\13\11\1\u03fd\11\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u03fe\6\11\1\u03ff\13\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0400\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0401\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u02e1\3\11\2\0\1\u015d\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0402\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0403"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0404\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0405\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u0406\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0407\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\5\11\1\u0408\17\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0409\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u040a\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u040b\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u040c\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u040d\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u040e"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u040f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u0410\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0411\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\14\0\1\u0412\111\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0413\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0414\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0415\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0416\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0417\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0418\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0419\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u041a\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\u041b\16\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u041c\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\11\11\1\u041d\13\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\12\11\1\u026b"+ + "\4\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u041e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u041f\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0420\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0421"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0422\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\2\11\1\u0423\14\11\1\u0301"+ + "\5\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0424\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0425\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0262\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\15\11\1\u02fc"+ + "\1\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff\3\11"+ + "\1\u0301\5\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0426\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0142\4\11\14\0"+ + "\17\11\2\0\1\10\1\11\1\u0427\23\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0428\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\23\0\1\u02b9\125\0\1\u02bc\177\0"+ + "\1\u0429\67\0\1\u042a\162\0\1\u042b\70\0\1\u0429\125\0"+ + "\1\u042c\77\0\1\u037f\152\0\1\u042d\127\0\1\u042e\155\0"+ + "\1\u042f\73\0\1\u0430\151\0\1\u0431\125\0\1\u0432\54\0"+ + "\1\u0433\174\0\1\u0434\105\0\1\u0435\124\0\1\u02ca\127\0"+ + "\1\u0436\123\0\1\u0437\154\0\1\u02ca\131\0\1\u0438\71\0"+ + "\1\u0439\153\0\1\u02ca\126\0\1\u043a\63\0\1\u02d5\105\0"+ + "\5\u043b\5\0\1\u043b\10\0\2\u043b\1\0\2\u043b\4\0"+ + "\2\u043b\20\0\1\u043b\1\0\1\u043b\3\0\1\u043b\12\0"+ + "\1\u043b\17\0\2\u043b\2\0\3\10\5\11\1\0\2\10"+ + "\1\0\1\10\1\11\1\0\2\10\4\0\1\10\2\11"+ + "\1\10\2\11\2\0\2\10\2\11\2\10\14\0\2\10"+ + "\1\11\1\10\1\11\3\10\1\11\6\10\2\0\2\10"+ + "\1\11\17\10\2\11\3\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\247\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u043c\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u043d\2\11\14\0\6\11\1\u043e"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u03b9\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u043f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0440\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0441\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0443\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0444\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\3\11"+ + "\1\u0445\21\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0446\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0447\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\3\u013e\5\170\1\u0218\4\u013e\1\170"+ + "\3\u013e\1\0\4\u013e\2\170\1\u013e\2\170\4\u013e\2\170"+ + "\20\u013e\1\170\1\u013e\1\170\3\u013e\1\170\12\u013e\1\170"+ + "\17\u013e\2\170\2\u013e\3\0\5\u0448\5\0\1\u0448\10\0"+ + "\2\u0448\1\0\2\u0448\4\0\2\u0448\20\0\1\u0448\1\0"+ + "\1\u0448\3\0\1\u0448\12\0\1\u0448\17\0\2\u0448\2\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\303\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u0449\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0142"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u044a\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ + "\1\u044b\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u044c"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u03e6"+ + "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\7\11"+ + "\1\u044d\15\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0410\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u044e\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\1\0"+ + "\1\u044f\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0450\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0142\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0451\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u022e\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0452\1\11\2\0"+ + "\1\u0453\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0454"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0455\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0456"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0457\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0458\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0459\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03ba\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u045a\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0455\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u045b"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u045c\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u045d\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u045e"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u045f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0460\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u0461\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0462\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0463\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0464\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0465\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u0165\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0466\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u0467\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ + "\1\u0142\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0468\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0469\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u046a\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u03a6\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u016d\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u046b\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u046c"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\11\11\1\u046d"+ + "\13\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\247\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u046e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u046f\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0470\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u0471\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u03db\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0472\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0473"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0474\13\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0475\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0476\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\11"+ + "\1\u0477\23\11\3\10\5\u0478\1\0\2\10\1\0\1\10"+ + "\1\u0478\1\0\2\10\4\0\1\10\2\u0478\1\10\2\u0478"+ + "\2\0\2\10\2\u0478\2\10\14\0\2\10\1\u0478\1\10"+ + "\1\u0478\3\10\1\u0478\6\10\2\0\2\10\1\u0478\17\10"+ + "\2\u0478\3\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0479\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u047a\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u047b\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\313\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u047c\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u047d"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u047e\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u047f\10\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u0480\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\5\11\1\u0481\17\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u0482\4\11\2\0\6\11\14\0\15\11"+ + "\1\u02fc\1\11\2\0\1\10\4\11\1\u03e9\1\u0481\11\11"+ + "\1\u0301\4\11\1\u0483\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0484\13\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0485\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\12\11\1\u0486\4\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0487\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0488\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0489\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u048a\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u048b\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\5\11\1\u048c\17\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u048d"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u048e\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u048f\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0490\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0491\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0492\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u0493\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0494\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0495\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0496\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0497\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0498"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0499\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u049a\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\u045c\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\1\u049b\5\11\1\0"+ + "\1\u049c\6\11\14\0\10\11\1\u049d\6\11\2\0\1\10"+ + "\16\11\1\u049e\6\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\14\11\1\u049f\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u04a0\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0262\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04a1\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u04a2\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u04a3\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\16\11\1\u04a4\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u04a5\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u04a6\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u04a7"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u04a8\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\35\0\1\u04a9\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\13\11\1\u04aa"+ + "\3\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u04ab\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u04ac\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\12\11\1\u04ad\4\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\2\11\1\u04ae"+ + "\3\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04af\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u04b0\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u04b1\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\4\11\1\u04b2\1\u04b3\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\11\11\1\u04b4\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u04b5\22\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u04b6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0142\14\0\17\11"+ + "\2\0\1\10\2\11\1\u04b7\1\11\1\u04b8\6\11\1\u04b9"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04ba"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u04bb\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04bc\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u04bd\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04be\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u04bf\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u04c0\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u04c1\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u04c2\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u04c3\14\0\17\11\2\0\1\10\25\11\77\u0429\1\u02ca"+ + "\26\u0429\36\0\1\u04c4\147\0\1\u04c5\103\0\1\u04c6\154\0"+ + "\1\u04c7\121\0\1\u04c8\106\0\1\u02ca\77\0\1\u02ca\152\0"+ + "\1\u038b\121\0\1\u0392\151\0\1\u038b\102\0\1\u02ca\130\0"+ + "\1\u04c9\123\0\1\u04ca\151\0\1\u04cb\122\0\1\u04cc\61\0"+ + "\1\u04c7\171\0\1\u0430\50\0\5\u04cd\5\0\1\u04cd\10\0"+ + "\2\u04cd\1\0\2\u04cd\4\0\2\u04cd\20\0\1\u04cd\1\0"+ + "\1\u04cd\3\0\1\u04cd\12\0\1\u04cd\17\0\2\u04cd\2\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u04ce\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04cf\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u04d0"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u04d1\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0198\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u04d2\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\12\11\1\u04d3\4\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04d4"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u04d5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04d6\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u04d7\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u04d8\10\11\2\0\1\10\25\11"+ + "\3\0\5\173\5\0\1\173\10\0\2\173\1\0\2\173"+ + "\4\0\2\173\20\0\1\173\1\0\1\173\3\0\1\173"+ + "\12\0\1\173\17\0\2\173\2\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u04d9\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04da"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\6\0\1\u04db"+ + "\16\0\1\u04dc\1\u04dd\2\0\1\u04de\74\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u04df\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u04e0\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u04e1\15\11\2\0\1\10\25\11\32\0\1\u04e2\34\0"+ + "\1\u04e3\36\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u04e4\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u04e5\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u04e6\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u04e7"+ + "\1\u04e8\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u04e9\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0341\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u04ea\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0341\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u04eb\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\4\11\1\u04ec\1\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\7\11\1\u04ed\7\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u04ee\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u04ef\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u04f0\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u04f1\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u04f2"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u04f3\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\14\11\1\u0190\10\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0165\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u0142\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u04f4\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u04f5\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u04f6\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\3\11\1\303\13\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u04f7\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u04f8\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u019f\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u016d\12\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u04f9\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u04fa\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u04fb\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u04fc\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u04fd\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u04fe\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u016f\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u0324\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ + "\1\u04ff\7\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0500\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0501\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0502\12\11\2\0\1\10\25\11\3\10"+ + "\5\330\1\0\2\10\1\0\1\10\1\330\1\0\2\10"+ + "\4\0\1\10\2\330\1\10\2\330\2\0\2\10\2\330"+ + "\2\10\14\0\2\10\1\330\1\10\1\330\3\10\1\330"+ + "\6\10\2\0\2\10\1\330\17\10\2\330\3\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0212\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0503"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0230\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0504\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u01bc"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0505\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0506\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u0507\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0508\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0509\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u050a\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\320\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u050b\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u050c"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\1\u050d\24\11\1\10\5\11\1\u050e\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\1\u039a"+ + "\5\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\14\11"+ + "\1\u050f\2\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0510\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0511\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0512"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0513\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0410"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\3\11\1\u0514\13\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0515\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0516\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0517\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0518"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0519\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u051a\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u051b\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\5\11\1\u051c\1\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ + "\1\u051d\1\11\1\u051e\7\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u051f\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u0520\1\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\1\11\1\u0521\1\u0522"+ + "\2\11\1\u0523\3\11\1\u0524\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\14\11\1\u02b6\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0525\15\11\2\0\1\10\25\11\103\0"+ + "\1\u0526\3\0\1\u0527\16\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0484\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0528"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\u0529\5\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\5\11"+ + "\1\u052a\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\15\11\1\u052b\7\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u052c\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u052d"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u052e\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\4\11\1\u052f\1\u04a7\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\230\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\11\11\1\u0530\13\11"+ + "\36\0\1\u0531\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u0532"+ + "\1\11\2\0\6\11\14\0\15\11\1\u0533\1\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0534\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0535\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0536\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\4\11\1\u01c4\1\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\10\11\1\u0537\6\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\12\11\1\u0538\4\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u0539\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u053a\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u053b"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u053c\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u053d\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u053e"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u053f\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0540\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\u0541"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u0542\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u0543\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0544\5\11\1\u0545\2\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\1\11\1\u0546\4\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0547\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\14\11\1\u0548\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\12\11\1\u0549\4\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u054a\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u054b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\u054c\16\11\2\0\1\10"+ + "\25\11\40\0\1\u054d\145\0\1\u054e\132\0\1\u054f\100\0"+ + "\1\u0550\127\0\1\u0551\114\0\1\u0552\35\0\1\u0553\73\0"+ + "\1\u038b\130\0\1\u0554\123\0\1\u0555\72\0\5\u0127\5\0"+ + "\1\u0127\10\0\2\u0127\1\0\2\u0127\4\0\2\u0127\20\0"+ + "\1\u0127\1\0\1\u0127\3\0\1\u0127\12\0\1\u0127\17\0"+ + "\2\u0127\2\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u0556"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0162\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\4\11\1\u0557\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0558"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0559"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u055a"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u055b\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\14\11\1\u055c\2\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u055d\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u055e\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u055f\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\4\11\1\u0560\20\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\5\11\1\u0561\11\11\2\0\1\10\25\11"+ + "\40\0\1\u0562\125\0\1\u0563\76\0\1\u0564\201\0\1\u0565"+ + "\40\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0566"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u0567\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0568\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\14\0\1\u0569\150\0"+ + "\1\u0569\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u056a\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\14\11\1\u056b"+ + "\2\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u056c\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u056d"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u056e\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u02fa"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u056f\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0570\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0571\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0572\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0573\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0574"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0575\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0576"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\4\11\1\u0577\12\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0578"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\5\11\1\u0579\17\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\4\11\1\u057a\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u057b\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u057c\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u03d7\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u057d"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u057e\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0167\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0142\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u057f\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0580\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0581"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0582\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\1\11\1\u0583"+ + "\4\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\4\11"+ + "\1\u0584\12\11\2\0\1\10\25\11\1\10\5\11\1\u0585"+ + "\1\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\1\u03e6\5\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u0586\6\11\1\u0587\6\11\1\106"+ + "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0538"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0588\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u0410\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0589\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\16\11\1\u058a\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u058b"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u058c\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u027e\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u058d\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u058e\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u058f\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0590\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\5\11\1\u023a\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\11\11\1\u0591\13\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ + "\1\u02fd\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u0592"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\7\11\1\u0593\7\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0594\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0595\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0596\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0597"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u0598\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\13\11\1\u0599\11\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u059a\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u059b\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u059c\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u059d\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\2\11"+ + "\1\u059e\3\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u059f"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\u05a0\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u05a1\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u05a2\4\11"+ + "\14\0\4\11\1\u05a3\12\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u05a4\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\u05a5\16\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05a6"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u05a7\12\11\2\0\1\10"+ + "\25\11\35\0\1\u05a8\104\0\1\u05a9\111\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05aa\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u05ab\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\16\11"+ + "\1\u0142\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u05ac\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ad\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u05ae\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u05af\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u05b0"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u05b1\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\73\0\1\u05b2\32\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u05b3\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05b4"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u05b5\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u05b6\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\1\11\1\u05b7\23\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u05b8\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0162"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u05b9\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u05ba\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05bb\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u05bc\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u05bd"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05be\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u05bf\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u05c0\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u05c1\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\u05c2\5\11\2\0\6\11"+ + "\14\0\10\11\1\u05c3\6\11\2\0\1\10\4\11\1\u05c4"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\15\11\1\u02fc\1\11\2\0\1\10\4\11\1\u02fd\20\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u04fc\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\15\11\1\u02ef\1\11\2\0"+ + "\1\10\15\11\1\u0300\7\11\1\10\7\11\1\0\1\u05c5"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u05c6\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\20\11\1\106"+ + "\4\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05c7"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u05c8\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u05c9\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\11\11\1\u0304\13\11\41\0\1\u0429\121\0\1\u0429"+ + "\125\0\1\u05ca\131\0\1\u02ca\124\0\1\u05cb\152\0\1\u05cc"+ + "\100\0\1\u05cd\122\0\1\u05ce\163\0\1\u02ca\60\0\1\u04dd"+ + "\77\0\1\10\7\11\1\0\1\u05cf\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u05d0\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u05d1\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u05d2\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\1\0\1\u05d3\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0"+ + "\1\10\17\11\1\u0301\5\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05d4\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u05d5\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05d6\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u05d7\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\10\11\1\u05d8"+ + "\2\11\1\u03ce\11\11\35\0\1\u05d9\104\0\1\u05da\176\0"+ + "\1\u05db\101\0\1\u05dc\64\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0543\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u028f\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u05dd\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\63\0\1\u05de\42\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\11\11"+ + "\1\u05df\13\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u02fd\6\11\1\u02ff"+ + "\11\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\13\11\1\u05e0\3\11\2\0\1\10\25\11\1\10\5\11"+ + "\1\u05e1\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u05e2\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u05e3\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u05e4\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\2\11\1\u0423\22\11\1\10\7\11\1\0\1\u05e5\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u05e6\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u05e7\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03b2"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\1\u0269\24\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\4\11\1\u05e8\20\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\16\11\1\u0162\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05e9"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0142\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u05ea\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\11\11\1\u05eb"+ + "\5\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\1\u046a\24\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\303"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u05ec\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\4\11\1\u05ed\1\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u05ee\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u05ef"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u05f0\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f1"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u05f2\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u05f3\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f4\1\u05f5"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u0162\12\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u05f6\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u05f7\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\11\1\u05f8\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u0457"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u05f9\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\11\1\u05fa\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\2\11\1\u05fb\3\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u05fc\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u05fd\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u05fe\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u05ff\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0162"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0600\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\14\11\1\u0601\2\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0602\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0603\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\11\1\u0604\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0605\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0606\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\2\11\1\u0607\3\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0608\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\14\11\1\u0609\10\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u060a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\1\u060b\5\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u060c\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u060d\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u060e"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u060f\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0610"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0611\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u03a8\2\11\14\0\17\11\2\0\1\10\25\11\40\0"+ + "\1\u0612\150\0\1\u0613\42\0\1\10\7\11\1\0\1\u0180"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0614\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0615\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0616\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0617\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\4\11\1\u0618\20\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0619\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u061a\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u061b"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u061c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u061d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u061e"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u061f\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\11"+ + "\1\u0620\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0621\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0622\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u0623"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u0624\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0625\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u035c\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0626\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\u0627\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0628\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u03c7"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0629\2\11\14\0\1\11\1\u062a\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u0230\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u062b"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u0344\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\4\11\1\u062c\20\11\1\10\5\11"+ + "\1\u062d\1\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u0513\5\11\14\0\17\11\2\0\1\10\25\11\67\0"+ + "\1\u062e\53\0\1\u062f\147\0\1\u0630\123\0\1\u0631\127\0"+ + "\1\u0632\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u0633\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0410\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u0634\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0635\14\0"+ + "\17\11\2\0\1\10\25\11\103\0\1\u0636\3\0\1\u0637"+ + "\16\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u0262\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\11\11\1\u0638\13\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0639\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u063a\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\37\0\1\u063b\160\0"+ + "\1\u063c\74\0\1\u063d\121\0\1\u063e\70\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\4\11\1\u063f\12\11"+ + "\2\0\1\10\25\11\60\0\1\u063d\45\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u05f4\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u0640\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u0641\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\26\0\1\u0642\77\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0643\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u01d0\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0594"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04ef\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0644"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0645\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0646"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0647\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0648\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u01d1\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u0649\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\3\11"+ + "\1\u064a\13\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0544\10\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u064b\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u064c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u064d\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0142\5\11\14\0\17\11"+ + "\2\0\1\10\3\11\1\u064e\21\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u064f\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"; + + private static final String ZZ_TRANS_PACKED_1 = + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\3\11\1\u0650\13\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\u0651\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0652"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0653\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\5\11\1\u0654\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u0655\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u0656\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\11\1\u0657"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u0658\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0659\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\23\11"+ + "\1\u0355\1\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u065a\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\2\11\1\u065b\22\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u065c\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u065d"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u065e\4\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u065f\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0660\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0661\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0662"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0663\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\3\11\1\u0664\13\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u0665"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0666\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u05bb\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0667\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0538\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u0668\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0669\10\11\2\0\1\10\25\11\35\0"+ + "\1\u066a\130\0\1\u066b\65\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u066c\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0623\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u066d\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u066e\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\13\11\1\u0162\11\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u066f\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\u0670"+ + "\16\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\7\11\1\u0671\7\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\11\1\u0672\15\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0162\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u04cf\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u0673\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\4\11\1\u0674\1\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\1\u0675\24\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\2\11\1\352\14\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u0676\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0622\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u0677\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0678\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u0679\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u067a\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u067b\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u032c\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u067c\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\u067d"+ + "\5\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u067e\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\60\0\1\u067f\104\0\1\u0680\127\0"+ + "\1\u0632\124\0\1\u02ca\146\0\1\u02ca\44\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0681\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u04c2\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0682\10\11\2\0\1\10\25\11\11\0\1\u0683\130\0"+ + "\1\u0684\111\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u0685\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0686\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0687\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\72\0\1\u0688\44\0\1\u0689\175\0\1\u068a\103\0"+ + "\1\u068b\66\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u068c\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\5\11\1\u068d\1\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u068e\15\11\2\0\1\10"+ + "\25\11\65\0\1\u068f\40\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\4\11"+ + "\1\u0690\1\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0294\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\4\11"+ + "\1\u0691\20\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0692\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0693\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\7\11\1\u0694"+ + "\15\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u0695"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u0696\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0697\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0698\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0699\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\u069a\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\u069b\16\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u069c\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\3\11\1\u05c9\13\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u069d\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u069e\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u069f\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u06a0\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06a1\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u06a2\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u06a3\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\1\0\1\u06a4\5\11\1\u06a5\14\0\15\11\1\u06a6\1\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\5\11\1\u023a"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\4\11\1\u0618"+ + "\20\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06a7\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06a8\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\5\11\1\u06a9\17\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\11\1\u06aa"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\15\11\1\u02fc\1\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u06ab\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u06ac\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u0162\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u04cf"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u06ad\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u06ae\12\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06af\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\5\11\1\u06b0\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u06b1\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u06b2\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\37\0\1\u05b2\77\0\1\u06b3\114\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06b4\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\5\11\1\u06b5\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\5\11"+ + "\1\u06b6\2\0\6\11\14\0\17\11\2\0\1\10\13\11"+ + "\1\u06b7\11\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\1\u06b8\5\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06b9\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u06ba\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bb\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\u06bc\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u06bd\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06be\15\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u06bf\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u04cf\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\7\11\1\u06c0\7\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u06c1\7\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\2\11"+ + "\1\u06c2\5\11\1\u06c3\14\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u06c4\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0162\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u06c5\14\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u06c6\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u06c7\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\63\0\1\u0429\77\0\1\u0555"+ + "\70\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06c8"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06c9\15\11"+ + "\2\0\1\10\25\11\27\0\1\u06ca\163\0\1\u06cb\40\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u06cc\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\5\11\1\u06cd\11\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0544\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\60\0\1\u04a9\105\0"+ + "\1\u06ce\124\0\1\u06cf\124\0\1\u06d0\67\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\1\11\1\u06d1\4\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u06d2\15\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\5\11\1\u0513\14\0"+ + "\17\11\2\0\1\10\25\11\72\0\1\u06d3\33\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\4\11\1\u06d4\1\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\1\u06d5\1\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\11\1\u06d6\4\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\5\11\1\u0142\11\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\1\11\1\u06d7\15\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\7\11\1\u06d8"+ + "\7\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u06d9\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\4\11\1\u06da"+ + "\1\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\4\11\1\u06db\1\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\2\11\1\u06dc\3\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u06dd\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u06de\15\11\2\0"+ + "\1\10\25\11\103\0\1\u06df\22\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0341"+ + "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u06e0"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\11\11\1\u0410\5\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\15\11\1\u0300\7\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\13\11"+ + "\1\u06e1\3\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\13\11\1\u0341\3\11\2\0"+ + "\1\10\25\11\114\0\1\u06e2\11\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\1\0\1\u06e3\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u06e4"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u06e5\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\352\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\1\u06e6\16\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06e7\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\u0162\16\11\2\0"+ + "\1\10\25\11\1\10\5\11\1\u06e8\1\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u06e9\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u06ea\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u06eb\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\352\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u06ec\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u06ed\15\11"+ + "\2\0\1\10\25\11\72\0\1\u06ee\33\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u06ef\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\4\11"+ + "\1\u06f0\1\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u06f1\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\3\11\1\u06f2\13\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u06f3\10\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u06f4\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u03ad"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u06f5\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06f6"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\14\11\1\u06f7\2\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\u06f8\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\2\11\1\u06ea\3\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\17\11\1\u0301\5\11"+ + "\1\10\5\11\1\u06f9\1\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\4\11\1\u06fa\1\u023a"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\u06fb\5\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u06fc\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\2\11\1\u06fd\22\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u06fe\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u06ff\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\2\11\1\u0700\3\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0701\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0162"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\42\0\1\u0702\146\0"+ + "\1\u0703\42\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u0704\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\13\11\1\u03ce\11\11\72\0\1\u0705\71\0\1\u05b2"+ + "\154\0\1\u0706\40\0\1\10\7\11\1\0\1\u0707\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\u0708\1\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\67\0\1\u0709\36\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u070a\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u070b\10\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\15\11\1\u070c\7\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u052a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u070d"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u070e\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u070f\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u02e1"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u045c\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u0710"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\2\11\1\u0410\14\11\2\0"+ + "\1\10\25\11\65\0\1\u0711\40\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\7\11\1\u0712\7\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\u0713\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\15\0\1\u0714\212\0"+ + "\1\u0715\23\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u0716\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u0717\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u0718\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0719\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u071a\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u071b\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\4\11\1\u0538\1\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\5\11\1\u071c\1\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\u023a\2\0\6\11\14\0\17\11\2\0\1\10\15\11"+ + "\1\u071e\1\11\1\u071f\5\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0522"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u06ec"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\57\0\1\u0720"+ + "\46\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0721"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0722\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u0723\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\2\11\1\u0724\3\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\1\u0725\1\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\5\11\1\u02dd\1\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\1\11\1\u0726\15\11\1\u071f\5\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\4\11\1\u0538"+ + "\12\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\2\11\1\u0727"+ + "\22\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u06de"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u03d9\1\11\14\0\1\11\1\u0728"+ + "\15\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u0729\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\11\1\u072a"+ + "\4\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\4\11\1\u072b\1\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\u072c\5\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u072d\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\3\11\1\u072e\2\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\1\u072f"+ + "\1\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u035c\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\37\0\1\u0730\146\0\1\u0731\45\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\1\11\1\u0732\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\37\0\1\u0733\102\0\1\u0734\111\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0735\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\12\11\1\u0736\4\11\2\0\1\10\25\11"+ + "\37\0\1\u0737\66\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\13\11\1\u04fc\3\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0738\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\11\1\u0739\4\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u073a\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\14\11\1\u073b\2\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\1\0\1\u073c"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\u073d\5\11\14\0\17\11\2\0"+ + "\1\10\25\11\66\0\1\u073e\37\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\2\11\1\u05c4\3\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u073f\4\11\14\0\17\11\2\0\1\10\25\11\25\0"+ + "\1\u0740\41\0\1\u0741\15\0\1\u0742\10\0\1\u0743\36\0"+ + "\1\u0744\76\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\2\11\1\u0745\14\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u0746"+ + "\10\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0747\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\2\11\1\u0662\14\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0748\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0749\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u074a\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u074b\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\1\11"+ + "\1\u074c\4\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\6\11\1\u074d"+ + "\10\11\2\0\1\10\25\11\35\0\1\u074e\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\1\11\1\u0662\4\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u074f\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0750\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u0751\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\16\11\1\u0410\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u05a2\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u0752\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\1\u0753\1\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0754\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u0755"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u0756\10\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u0757\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u0758\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\1\u0759\5\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u075a\14\11\2\0\1\10\25\11\35\0\1\u05b2\151\0"+ + "\1\u075b\44\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\6\11\1\u075c\10\11\2\0\1\10\25\11\74\0"+ + "\1\u075d\123\0\1\u075e\33\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u02e1\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u075f"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\63\0\1\u0760"+ + "\42\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\6\11\1\u0761\10\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\1\11\1\u0762\15\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\4\11\1\u071d"+ + "\1\11\2\0\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\10\11\1\u05d8\14\11\6\0\1\u0763\117\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\6\11"+ + "\1\u0764\10\11\2\0\1\10\25\11\62\0\1\u0765\43\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0335\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\60\0\1\u0766\125\0"+ + "\1\u0767\61\0\1\u0730\147\0\1\u0768\131\0\1\u0769\63\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\1\11"+ + "\1\u0344\15\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u076a\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u076b"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\5\11\1\u076c\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u076d\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u0442\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\2\11"+ + "\1\u076e\14\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\3\11\1\u076f\2\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\2\11"+ + "\1\u0770\3\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u0771"+ + "\14\11\2\0\1\10\25\11\32\0\1\u0772\73\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\5\11\1\u0773\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\2\11\1\u0774\14\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0775\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\17\11\2\0\1\10\1\u0538"+ + "\24\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u0776"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\4\11\1\u01d1\1\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\3\11"+ + "\1\u0777\2\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\2\11\1\u03c0"+ + "\14\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\2\11\1\u0778\3\11\14\0\17\11\2\0\1\10"+ + "\25\11\74\0\1\u0779\31\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\1\11\1\u077a\15\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\3\11\1\u0235"+ + "\2\11\14\0\17\11\2\0\1\10\25\11\37\0\1\u077b"+ + "\66\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\4\11\1\u0751\12\11\2\0\1\10\25\11\40\0\1\u077c"+ + "\177\0\1\u077d\13\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\1\11\1\u077e\4\11\14\0\17\11\2\0\1\10\25\11"+ + "\65\0\1\u077f\40\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\3\11\1\u0780\2\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\5\11"+ + "\1\247\11\11\2\0\1\10\25\11\60\0\1\u0781\45\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u0782\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\41\0\1\u0783\100\0"+ + "\1\u0784\122\0\1\u0785\201\0\1\u0786\75\0\1\u0787\70\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u0788\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\2\11\1\u0789\14\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\5\11\1\u078a"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u04a6\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u078b"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\13\11\1\u0662\3\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\4\11\1\u078c\12\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\1\u06ab\5\11\14\0"+ + "\17\11\2\0\1\10\25\11\64\0\1\u078d\41\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\6\11\14\0\17\11\2\0"+ + "\1\10\10\11\1\u078e\14\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\6\11\1\u078f\10\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u0635\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\u0790\5\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\7\11\1\u0791\7\11\2\0\1\10\25\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\3\11\1\u0792\2\11\14\0\17\11"+ + "\2\0\1\10\25\11\37\0\1\u0793\66\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0794\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\26\0\1\u0795\54\0\1\u0796\36\0"+ + "\1\u0797\171\0\1\u0798\45\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\5\11\1\u0799\14\0\17\11\2\0\1\10\25\11"+ + "\66\0\1\u079a\37\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u079b\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\14\0\1\u079c\111\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\4\11\1\u079d\1\11\14\0\17\11\2\0\1\10\25\11"+ + "\37\0\1\u079e\160\0\1\u05b2\62\0\1\u079f\164\0\1\u07a0"+ + "\75\0\1\u07a1\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\6\11\1\u07a2\10\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\1\u049b\5\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\5\11\1\u07a3\1\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\17\11\2\0\1\10\15\11\1\u07a4\7\11\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\6\11\1\u05d2\10\11"+ + "\2\0\1\10\25\11\63\0\1\u07a5\42\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\2\11\1\u07a6\3\11\14\0\17\11"+ + "\2\0\1\10\25\11\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\1\u07a7\1\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\17\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\2\11\1\0\1\10"+ + "\1\11\4\0\6\11\2\0\3\11\1\u07a8\2\11\14\0"+ + "\17\11\2\0\1\10\25\11\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\1\0\1\u07a9\6\11\14\0\17\11\2\0\1\10\25\11"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\7\11"+ + "\1\u07aa\7\11\2\0\1\10\25\11\61\0\1\u07ab\44\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\1\0\1\u07ac\6\11\14\0"+ + "\17\11\2\0\1\10\25\11\41\0\1\u07ad\147\0\1\u07ae"+ + "\134\0\1\u066a\114\0\1\u066a\44\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u07af\10\11\2\0"+ + "\1\10\25\11\40\0\1\u07b0\65\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u07b1\10\11\2\0"+ + "\1\10\25\11\35\0\1\u07b2\70\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\1\u03e6\5\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\25\11\32\0\1\u035e\52\0\1\u07b3\61\0\1\u066a\151\0"+ + "\1\u07b4\100\0\1\u07b5\65\0\1\10\7\11\1\0\1\11"+ + "\1\147\1\0\2\11\1\0\1\10\1\11\4\0\6\11"+ + "\2\0\6\11\14\0\4\11\1\u04fc\12\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\6\11\14\0"+ + "\1\u07b6\16\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\1\11\1\u07b7\15\11\2\0"+ + "\1\10\25\11\37\0\1\u07b8\66\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\1\11\1\u07b9\4\11\14\0\17\11\2\0"+ + "\1\10\25\11\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\2\11\1\0\1\10\1\11\4\0\6\11\2\0\6\11"+ + "\14\0\13\11\1\u0162\3\11\2\0\1\10\25\11\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u07ba\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\117\0\1\u07bb\6\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\1\0\1\u07bc\6\11\14\0\17\11\2\0"+ + "\1\10\25\11\65\0\1\u07bd\154\0\1\u07be\71\0\1\u07bf"+ + "\103\0\1\u07c0\67\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\1\11\1\u07c1\15\11\2\0\1\10\25\11"+ + "\41\0\1\u07c2\64\0\1\10\7\11\1\0\1\11\1\147"+ + "\1\0\2\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\1\u07c3\24\11\36\0"+ + "\1\u07c4\155\0\1\u07c5\74\0\1\u07c6\153\0\1\u07c7\42\0"+ + "\1\10\7\11\1\0\1\11\1\147\1\0\2\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\3\11\1\u07c8\2\11"+ + "\14\0\17\11\2\0\1\10\25\11\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\6\11\14\0\6\11\1\u0676\10\11\2\0"+ + "\1\10\25\11\62\0\1\u07c9\43\0\1\10\7\11\1\0"+ + "\1\11\1\147\1\0\2\11\1\0\1\10\1\11\4\0"+ + "\6\11\2\0\5\11\1\u03eb\14\0\17\11\2\0\1\10"+ + "\25\11\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\1\u04fc\5\11"+ + "\14\0\17\11\2\0\1\10\25\11\37\0\1\u07ca\204\0"+ + "\1\u07cb\45\0\1\u07cc\104\0\1\u07cd\173\0\1\u07ce\127\0"+ + "\1\u07cf\40\0\1\10\7\11\1\0\1\11\1\147\1\0"+ + "\1\u07d0\1\11\1\0\1\10\1\11\4\0\6\11\2\0"+ + "\6\11\14\0\17\11\2\0\1\10\25\11\25\0\1\u07d1"+ + "\100\0\1\10\7\11\1\0\1\11\1\147\1\0\2\11"+ + "\1\0\1\10\1\11\4\0\6\11\2\0\2\11\1\u07d2"+ + "\3\11\14\0\17\11\2\0\1\10\25\11\60\0\1\u07d3"+ + "\133\0\1\u07d4\124\0\1\u07d5\75\0\1\u07d6\70\0\1\10"+ + "\7\11\1\0\1\11\1\147\1\0\1\u02ee\1\11\1\0"+ + "\1\10\1\11\4\0\6\11\2\0\6\11\14\0\17\11"+ + "\2\0\1\10\25\11\35\0\1\u07d7\125\0\1\u07d8\101\0"+ + "\1\u07ca\153\0\1\u07d9\113\0\1\u0740\41\0\1\u0741\15\0"+ + "\1\u0742\115\0\1\u05b2\112\0\1\u0730\43\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\6\11\14\0\17\11\2\0\1\10"+ + "\11\11\1\u03ff\13\11\40\0\1\u07da\65\0\1\10\7\11"+ + "\1\0\1\11\1\147\1\0\2\11\1\0\1\10\1\11"+ + "\4\0\6\11\2\0\1\11\1\u0410\4\11\14\0\17\11"+ + "\2\0\1\10\25\11\41\0\1\u05b2\75\0\1\u07db\205\0"+ + "\1\u066a\61\0\1\u07dc\41\0\1\u07dd\13\0\1\u07de\1\0"+ + "\1\u07df\105\0\1\u07e0\71\0\1\u07e1\157\0\1\u07e2\135\0"+ + "\1\u07e3\67\0\1\u07e4\150\0\1\u07e5\125\0\1\u07e6\127\0"+ + "\1\u07e7\57\0\1\u07e8\171\0\1\u07e9\132\0\1\u07ea\75\0"+ + "\1\u07eb\150\0\1\u07ec\105\0\1\u07ed\101\0\1\u07ee\122\0"+ + "\1\u07ef\155\0\1\u07f0\121\0\1\u07f1\104\0\1\u07f2\150\0"+ + "\1\u07f3\122\0\1\u07f4\102\0\1\u07f5\143\0\1\u07f6\170\0"+ + "\1\u07f1\62\0\1\u07f7\163\0\1\u07f8\143\0\1\u07de\132\0"+ + "\1\u07f9\56\0\1\u07fa\172\0\1\u07fb\54\0\1\u07fc\131\0"+ + "\1\u07fd\125\0\1\u07fe\121\0\1\u07ff\130\0\1\u0800\146\0"+ + "\1\u05b2\137\0\1\u0801\63\0\1\u0802\133\0\1\u029d\125\0"+ + "\1\u07f1\125\0\1\u0803\102\0\1\u0804\173\0\1\u066a\123\0"+ + "\1\u0805\103\0\1\u0806\150\0\1\u0807\102\0\1\u0808\127\0"+ + "\1\u0809\126\0\1\u068a\152\0\1\u05b2\74\0\1\u080a\150\0"+ + "\1\u06cf\45\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[172688]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); + return result; + } - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\10\1\1\11\4\1\1\11\17\1\2\11\4\1" + - "\1\11\31\1\1\11\5\1\1\11\10\1\1\11\4\1" + - "\1\11\16\1\1\0\56\1\1\0\70\1\1\11\4\0" + - "\1\11\4\0\1\11\16\0\1\11\2\0\1\11\2\1" + - "\1\0\4\1\2\11\1\0\12\1\1\11\1\1\1\11" + - "\1\1\1\11\152\1\33\0\2\11\2\1\1\0\1\11" + - "\6\1\1\11\126\1\2\0\1\1\2\0\1\1\10\0" + - "\1\11\15\0\2\1\1\0\114\1\33\0\2\1\1\0" + - "\105\1\23\0\57\1\1\0\15\1\2\0\1\1\6\0" + - "\54\1\1\0\13\1\11\0\52\1\1\0\13\1\5\0" + - "\20\1\1\0\20\1\1\0\10\1\5\0\16\1\2\0" + - "\15\1\1\0\5\1\2\0\13\1\2\0\15\1\1\11" + - "\16\1\2\0\20\1\2\0\12\1\2\0\10\1\1\0" + - "\5\1\1\0\5\1\1\0\4\1\1\0\4\1\1\0" + - "\2\1\1\0"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[1099]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\4\0\2\1\1\0\12\1\2\11\21\1\2\11\4\1"+ + "\1\11\35\1\1\11\5\1\1\11\10\1\1\11\6\1"+ + "\1\11\3\1\1\11\1\1\2\11\24\1\1\0\1\1"+ + "\1\0\7\1\2\0\1\11\54\1\2\0\122\1\2\0"+ + "\1\11\4\0\1\11\2\0\1\11\22\0\1\11\1\0"+ + "\1\1\2\0\2\11\3\1\1\0\14\1\2\11\3\1"+ + "\1\0\2\1\1\11\5\1\1\11\235\1\37\0\1\11"+ + "\2\0\1\11\15\1\1\11\1\1\1\0\5\1\1\11"+ + "\174\1\1\0\31\1\2\0\1\1\2\0\1\1\15\0"+ + "\1\11\12\0\1\1\1\0\1\11\16\1\1\0\167\1"+ + "\1\0\31\1\36\0\17\1\1\0\154\1\1\0\26\1"+ + "\23\0\14\1\1\0\2\1\1\0\3\1\1\0\114\1"+ + "\1\0\14\1\1\0\32\1\5\0\1\1\4\0\15\1"+ + "\4\0\3\1\2\0\102\1\2\0\11\1\1\0\33\1"+ + "\12\0\13\1\4\0\3\1\1\0\76\1\2\0\10\1"+ + "\1\11\27\1\5\0\4\1\1\0\5\1\4\0\1\1"+ + "\1\0\3\1\1\0\57\1\2\0\32\1\5\0\3\1"+ + "\2\0\3\1\4\0\3\1\1\0\47\1\2\0\23\1"+ + "\2\0\2\1\2\0\3\1\4\0\3\1\1\0\14\1"+ + "\1\0\7\1\1\0\16\1\1\0\26\1\2\0\2\1"+ + "\3\0\2\1\1\0\13\1\1\0\2\1\2\0\12\1"+ + "\1\0\23\1\2\0\1\1\2\0\2\1\1\0\7\1"+ + "\1\0\2\1\2\0\12\1\1\0\17\1\2\0\1\1"+ + "\2\0\2\1\1\0\4\1\1\0\1\1\1\0\1\1"+ + "\5\0\11\1\1\0\11\1\1\0\2\1\1\0\1\1"+ + "\2\0\1\1\1\0\2\1\1\0\1\1\5\0\10\1"+ + "\1\0\6\1\1\0\1\1\3\0\1\1\1\0\1\1"+ + "\1\0\1\1\5\0\5\1\1\0\5\1\1\0\1\1"+ + "\4\0\1\1\1\0\1\1\1\0\1\1\4\0\3\1"+ + "\1\0\3\1\1\0\1\1\4\0\1\1\1\0\1\1"+ + "\4\0\2\1\1\0\2\1\6\0\1\1\1\0\1\1"+ + "\4\0\1\1\7\0\1\1\1\0\1\1\30\0\1\1"+ + "\37\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[2058]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** the input device */ - private java.io.Reader zzReader; + /** the input device */ + private java.io.Reader zzReader; - /** the current state of the DFA */ - private int zzState; + /** the current state of the DFA */ + private int zzState; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; - /** the textposition at the last accepting state */ - private int zzMarkedPos; + /** the textposition at the last accepting state */ + private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /** the current text position in the buffer */ + private int zzCurrentPos; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - /* user code: */ + /* user code: */ - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public GroovyTokenMaker() { - } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public GroovyTokenMaker() { + } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = MULTILINE_STRING_DOUBLE; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = MULTILINE_STRING_SINGLE; - start = text.offset; - break; - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - case Token.COMMENT_DOCUMENTATION: - state = DOCCOMMENT; - start = text.offset; - break; - default: - state = Token.NULL; - } - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } - } - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public GroovyTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public GroovyTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 188) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + resetTokenList(); + this.offsetShift = -text.offset + startOffset; - if (zzReader != null) - zzReader.close(); - } + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = MULTILINE_STRING_SINGLE; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + default: + state = Token.NULL; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + } - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + - throw new Error(message); + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public GroovyTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public GroovyTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 200) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + throw new Error(message); + } - while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 3: { - addToken(Token.IDENTIFIER); - } - case 43: - break; - case 39: { - addToken(Token.LITERAL_BOOLEAN); - } - case 44: - break; - case 33: { - start = zzMarkedPos - 3; - yybegin(MULTILINE_STRING_DOUBLE); - } - case 45: - break; - case 13: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 46: - break; - case 31: { - addToken(Token.ERROR_CHAR); - } - case 47: - break; - case 18: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 48: - break; - case 5: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 49: - break; - case 22: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 50: - break; - case 26: { - addToken(Token.FUNCTION); - } - case 51: - break; - case 7: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 52: - break; - case 30: { - start = zzMarkedPos - 3; - yybegin(MULTILINE_STRING_SINGLE); - } - case 53: - break; - case 2: { - addToken(Token.ERROR_IDENTIFIER); - } - case 54: - break; - case 23: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 55: - break; - case 37: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.LITERAL_CHAR); - } - case 56: - break; - case 42: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 57: - break; - case 29: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.PREPROCESSOR); - start = zzMarkedPos; - } - case 58: - break; - case 11: { - addToken(Token.VARIABLE); /* FIXME: Add token type to Token? */ - } - case 59: - break; - case 41: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_DOCUMENTATION); - start = zzMarkedPos; - } - case 60: - break; - case 15: { /* Skip escaped chars, handles case: '\"""'. */ - } - case 61: - break; - case 21: { - addToken(Token.LITERAL_CHAR); - } - case 62: - break; - case 36: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 63: - break; - case 20: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 64: - break; - case 24: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 65: - break; - case 8: { - addToken(Token.WHITESPACE); - } - case 66: - break; - case 28: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_DOCUMENTATION); - } - case 67: - break; - case 35: { - addToken(Token.DATA_TYPE); - } - case 68: - break; - case 27: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 69: - break; - case 4: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 70: - break; - case 17: { /* Skip escaped chars, handles case: "\'''". */ - } - case 71: - break; - case 34: { - start = zzMarkedPos - 3; - yybegin(DOCCOMMENT); - } - case 72: - break; - case 25: { - addToken(Token.RESERVED_WORD); - } - case 73: - break; - case 40: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; - } - case 74: - break; - case 10: { - addToken(Token.SEPARATOR); - } - case 75: - break; - case 6: { - addNullToken(); - return firstToken; + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 76: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 77: - break; - case 9: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 21: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 49: break; + case 3: + { addToken(Token.IDENTIFIER); + } + case 50: break; + case 43: + { addToken(Token.LITERAL_BOOLEAN); + } + case 51: break; + case 6: + { start = zzMarkedPos-1; yybegin(STRING_DOUBLE); + } + case 52: break; + case 36: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); + } + case 53: break; + case 13: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 54: break; + case 35: + { addToken(Token.ERROR_CHAR); + } + case 55: break; + case 22: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 56: break; + case 5: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 57: break; + case 11: + { addToken(Token.ANNOTATION); + } + case 58: break; + case 29: + { addToken(Token.FUNCTION); + } + case 59: break; + case 34: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_SINGLE); + } + case 60: break; + case 2: + { addToken(Token.ERROR_IDENTIFIER); + } + case 61: break; + case 37: + { boolean highlightedAsRegex = false; + if (zzBuffer[zzStartRead]=='~' || firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 62: break; + case 41: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_CHAR); + } + case 63: break; + case 46: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 64: break; + case 32: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; + } + case 65: break; + case 45: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 66: break; + case 15: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 67: break; + case 25: + { addToken(Token.LITERAL_CHAR); + } + case 68: break; + case 19: + { /* Skip escaped chars. */ + } + case 69: break; + case 40: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 70: break; + case 24: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 71: break; + case 27: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 72: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 73: break; + case 31: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 74: break; + case 39: + { addToken(Token.DATA_TYPE); + } + case 75: break; + case 30: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 76: break; + case 4: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 77: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 78: break; + case 20: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 79: break; + case 17: + { /* Skip escaped chars, handles case: "\'''". */ + } + case 80: break; + case 38: + { start = zzMarkedPos-3; yybegin(DOCCOMMENT); + } + case 81: break; + case 28: + { addToken(Token.RESERVED_WORD); + } + case 82: break; + case 44: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 83: break; + case 48: + { addToken(Token.RESERVED_WORD_2); + } + case 84: break; + case 14: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 85: break; + case 10: + { addToken(Token.SEPARATOR); + } + case 86: break; + case 7: + { addNullToken(); return firstToken; + } + case 87: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 88: break; + case 9: + { addToken(Token.OPERATOR); + } + case 89: break; + case 18: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 90: break; + case 23: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 91: break; + case 47: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 92: break; + case 42: + { addToken(Token.COMMENT_MULTILINE); + } + case 93: break; + case 26: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 94: break; + case 1: + { + } + case 95: break; + case 16: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 96: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 78: - break; - case 16: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; + case 2059: break; + case MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 79: - break; - case 19: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 2060: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } - case 80: - break; - case 38: { - addToken(Token.COMMENT_MULTILINE); + case 2061: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 81: - break; - case 1: { + case 2062: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 82: - break; - case 14: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; + case 2063: break; + case STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } - case 83: - break; - case 32: { - addToken(Token.ERROR_STRING_DOUBLE); + case 2064: break; + case MULTILINE_STRING_SINGLE: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 84: - break; + case 2065: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case MULTILINE_STRING_DOUBLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 1100: - break; - case DOCCOMMENT: { - yybegin(YYINITIAL); - addToken(start, zzEndRead, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 1101: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 1102: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 1103: - break; - case MULTILINE_STRING_SINGLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 1104: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex old mode 100644 new mode 100755 index ad52513eb..673a62a2d --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.flex @@ -2,28 +2,15 @@ * 01/24/2005 * * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; +import java.util.Stack; import org.fife.ui.rsyntaxtextarea.*; @@ -49,7 +36,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                        - *
                      • The generated HTMLTokenMaker.java file will contain two + *
                      • The generated HTMLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,8 +50,7 @@ import org.fife.ui.rsyntaxtextarea.*; *
                      * * @author Robert Futrell - * @version 0.7 - * + * @version 0.9 */ %% @@ -77,46 +63,169 @@ import org.fife.ui.rsyntaxtextarea.*; %{ + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ - public static final int INTERNAL_INTAG = -1; + public static final int INTERNAL_INTAG = -3; /** * Token type specific to HTMLTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ - public static final int INTERNAL_INTAG_SCRIPT = -2; + public static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <style> tag. + */ + public static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ - public static final int INTERNAL_IN_JS = -5; + public static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ - public static final int INTERNAL_IN_JS_MLC = -6; + public static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_VALID = -13; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_VALID = -15; + + /** + * Internal type denoting a line ending in CSS. + */ + public static final int INTERNAL_CSS = -16; + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -17; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -18; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; /** * Whether closing markup tags are automatically completed for HTML. */ private static boolean completeCloseTags; + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + /** * Constructor. This must be here because JFlex does not generate a @@ -138,6 +247,18 @@ import org.fife.ui.rsyntaxtextarea.*; } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + /** * Adds the token specified to the current linked list of tokens. * @@ -169,12 +290,22 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually @@ -183,11 +314,64 @@ import org.fife.ui.rsyntaxtextarea.*; * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ + @Override public boolean getCompleteCloseTags() { return completeCloseTags; } + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * Returns Token.MARKUP_TAG_NAME. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by @@ -200,62 +384,129 @@ import org.fife.ui.rsyntaxtextarea.*; * @return The first Token in a linked list representing * the syntax highlighted text. */ + @Override public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { - case Token.COMMENT_MULTILINE: + case Token.MARKUP_COMMENT: state = COMMENT; - start = text.offset; break; case Token.PREPROCESSOR: state = PI; - start = text.offset; break; case Token.VARIABLE: state = DTD; - start = text.offset; break; case INTERNAL_INTAG: state = INTAG; - start = text.offset; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; - start = text.offset; break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; - start = text.offset; break; - case Token.LITERAL_CHAR: + case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; - start = text.offset; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; - start = text.offset; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; - start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; - start = text.offset; + languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; - start = text.offset; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + languageIndex = LANG_INDEX_JS; break; default: - state = Token.NULL; + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_CSS; + } + else { + state = Token.NULL; + } + break; } + setLanguageIndex(languageIndex); + start = text.offset; s = text; try { yyreset(zzReader); @@ -263,7 +514,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -326,35 +577,29 @@ import org.fife.ui.rsyntaxtextarea.*; %} // HTML-specific stuff. -Whitespace = ([ \t\f]+) -LineTerminator = ([\n]) -Identifier = ([^ \t\n<&]+) -AmperItem = ([&][^; \t]*[;]?) -InTagIdentifier = ([^ \t\n\"\'/=>]+) -EndScriptTag = ("") +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +EndScriptTag = ("") +EndStyleTag = ("") + +// General stuff. +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrUnderscore = ({Letter}|[_]) +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) // JavaScript stuff. -Letter = [A-Za-z] -NonzeroDigit = [1-9] -Digit = ("0"|{NonzeroDigit}) -HexDigit = ({Digit}|[A-Fa-f]) -OctalDigit = ([0-7]) -AnyCharacterButApostropheOrBackSlash = ([^\\']) -AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) -Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) -NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) -JS_UnclosedCharLiteral = ("'"({AnyCharacterButApostropheOrBackSlash}|{Escape})) -JS_CharLiteral = ({JS_UnclosedCharLiteral}"'") -JS_UnclosedErrorCharLiteral = ([\'][^\'\n]*) -JS_ErrorCharLiteral = (([\'][\'])|{JS_UnclosedErrorCharLiteral}[\']) -JS_UnclosedStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*) -JS_StringLiteral = ({JS_UnclosedStringLiteral}[\"]) -JS_UnclosedErrorStringLiteral = ([\"]([^\"\n]|"\\\"")*) -JS_ErrorStringLiteral = ({JS_UnclosedErrorStringLiteral}[\"]) JS_MLCBegin = "/*" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" @@ -371,11 +616,39 @@ JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({ JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) -JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) + +JS_TemplateLiteralExprStart = ("${") + +// CSS stuff. +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtKeyword = ("@"{CSS_SelectorPiece}) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +CSS_MlcStart = ({JS_MLCBegin}) +CSS_MlcEnd = ({JS_MLCEnd}) +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) + + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) %state COMMENT @@ -388,19 +661,38 @@ JS_ErrorIdentifier = ({NonSeparator}+) %state INTAG_SCRIPT %state INATTR_DOUBLE_SCRIPT %state INATTR_SINGLE_SCRIPT +%state INTAG_STYLE +%state INATTR_DOUBLE_STYLE +%state INATTR_SINGLE_STYLE %state JAVASCRIPT +%state JS_STRING +%state JS_CHAR %state JS_MLC +%state JS_EOL_COMMENT +%state CSS +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR %% { - "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } + "-->" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n\?]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } - "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} - <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } - ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.VARIABLE); } - <> { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { @@ -593,14 +887,14 @@ JS_ErrorIdentifier = ({NonSeparator}+) { [^\"]* {} - [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { [^\']* {} - [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { @@ -609,7 +903,7 @@ JS_ErrorIdentifier = ({NonSeparator}+) "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } - ">" { yybegin(JAVASCRIPT); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } @@ -617,26 +911,50 @@ JS_ErrorIdentifier = ({NonSeparator}+) { [^\"]* {} - [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { [^\']* {} - [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { - yybegin(YYINITIAL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } - // ECMA keywords. + // ECMA 3+ keywords. "break" | "continue" | "delete" | @@ -646,13 +964,18 @@ JS_ErrorIdentifier = ({NonSeparator}+) "if" | "in" | "new" | - "return" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" { addToken(Token.RESERVED_WORD); } @@ -698,18 +1021,18 @@ JS_ErrorIdentifier = ({NonSeparator}+) "null" { addToken(Token.RESERVED_WORD); } // Literals. - "false" { addToken(Token.LITERAL_BOOLEAN); } + "false" | "true" { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. - "eval" { addToken(Token.FUNCTION); } - "parseInt" { addToken(Token.FUNCTION); } - "parseFloat" { addToken(Token.FUNCTION); } - "escape" { addToken(Token.FUNCTION); } - "unescape" { addToken(Token.FUNCTION); } - "isNaN" { addToken(Token.FUNCTION); } + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } @@ -717,19 +1040,39 @@ JS_ErrorIdentifier = ({NonSeparator}+) {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ - {JS_CharLiteral} { addToken(Token.LITERAL_CHAR); } - {JS_UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_UnclosedErrorCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } - {JS_UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_UnclosedErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } - {JS_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } @@ -754,11 +1097,253 @@ JS_ErrorIdentifier = ({NonSeparator}+) } + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + { // JavaScript MLC's. This state is essentially Java's MLC state. - [^\n\*]+ {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } - {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } - \* {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java old mode 100644 new mode 100755 index b98d339a8..a776e8e7e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HTMLTokenMaker.java @@ -1,2203 +1,3236 @@ -/* The following code was generated by JFlex 1.4.1 on 10/6/09 4:38 PM */ +/* The following code was generated by JFlex 1.4.1 on 12/30/16 12:26 AM */ /* * 01/24/2005 * * HTMLTokenMaker.java - Generates tokens for HTML syntax highlighting. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.util.Stack; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** * Scanner for HTML 5 files. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                      - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                      - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                      + * * If you wish to regenerate this file yourself, keep in mind the following: *

                        - *
                      • The generated HTMLTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                      • - *
                      • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                      • - *
                      • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                      • + *
                      • The generated HTMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                      • + *
                      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                      • + *
                      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                      • *
                      - * + * * @author Robert Futrell - * @version 0.7 - * + * @version 0.9 */ public class HTMLTokenMaker extends AbstractMarkupTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int INTAG_CHECK_TAG_NAME = 5; - public static final int JS_MLC = 12; - public static final int INTAG_SCRIPT = 8; - public static final int INATTR_DOUBLE_SCRIPT = 9; - public static final int INATTR_SINGLE_SCRIPT = 10; - public static final int DTD = 3; - public static final int INATTR_SINGLE = 7; - public static final int INATTR_DOUBLE = 6; - public static final int YYINITIAL = 0; - public static final int INTAG = 4; - public static final int COMMENT = 1; - public static final int JAVASCRIPT = 11; - public static final int PI = 2; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\4\1\2\1\0\1\1\1\36\22\0\1\4\1\54\1\27" + - "\1\0\1\37\1\53\1\5\1\26\2\50\1\40\1\52\1\51\1\46" + - "\1\47\1\10\1\22\3\35\3\77\1\24\2\21\1\56\1\6\1\3" + - "\1\7\1\17\1\55\1\0\1\63\1\23\1\12\1\70\1\45\1\43" + - "\1\72\1\76\1\14\1\100\1\73\1\42\1\67\1\65\1\64\1\15" + - "\1\74\1\13\1\11\1\16\1\71\1\75\1\20\1\41\1\66\1\20" + - "\1\50\1\25\1\50\1\53\1\37\1\0\1\102\1\34\1\60\1\105" + - "\1\101\1\44\1\113\1\110\1\61\1\100\1\103\1\106\1\114\1\33" + - "\1\104\1\62\1\74\1\31\1\57\1\32\1\30\1\112\1\107\1\115" + - "\1\111\1\116\1\50\1\53\1\50\1\56\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\6\0\2\1\1\0\2\1\2\0\2\2\1\3\1\4" + - "\1\5\1\6\1\1\1\7\2\1\1\10\2\1\1\11" + - "\1\12\2\13\1\14\1\15\1\16\1\17\1\20\1\21" + - "\1\22\1\23\2\21\2\23\1\21\2\23\4\21\1\23" + - "\4\21\1\23\2\21\1\1\1\24\1\1\1\25\1\15" + - "\1\26\1\27\1\30\1\31\1\32\1\33\1\34\2\14" + - "\1\2\2\14\2\2\1\14\2\35\1\36\1\37\5\2" + - "\1\33\1\2\1\14\1\2\1\40\1\14\14\2\1\1" + - "\1\41\1\1\1\4\1\42\1\43\1\44\1\42\1\6" + - "\1\0\1\45\32\21\1\23\11\21\1\23\5\21\1\23" + - "\30\21\1\46\2\0\1\47\1\50\1\33\1\2\1\14" + - "\1\51\1\35\1\52\1\51\1\52\1\51\1\53\1\51" + - "\2\54\1\36\1\54\1\37\1\55\31\2\2\56\15\2" + - "\1\56\5\2\1\57\1\60\1\0\1\42\1\61\14\21" + - "\1\23\63\21\2\0\1\33\1\2\1\52\1\0\2\53" + - "\1\36\1\62\2\54\1\36\3\37\32\2\1\6\31\2" + - "\1\63\1\42\17\21\1\23\22\21\1\23\1\0\1\64" + - "\1\33\1\2\1\36\1\37\1\65\1\55\1\37\1\2" + - "\1\66\6\2\1\6\22\2\1\67\7\2\1\42\11\21" + - "\1\23\12\21\1\0\1\33\1\2\1\36\1\37\2\2" + - "\1\56\3\2\1\56\17\2\1\42\12\21\1\0\1\33" + - "\1\2\1\36\1\37\16\2\1\70\3\21\1\0\7\2" + - "\1\21\1\0\3\2\1\21\1\71\1\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[566]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\117\0\236\0\355\0\u013c\0\u018b\0\u01da\0\u0229" + - "\0\u0278\0\u02c7\0\u0316\0\u0365\0\u03b4\0\u0403\0\u0452\0\u04a1" + - "\0\u04f0\0\u053f\0\u058e\0\u05dd\0\u04a1\0\u062c\0\u067b\0\u04a1" + - "\0\u06ca\0\u0719\0\u04a1\0\u04a1\0\u0768\0\u07b7\0\u04a1\0\u0806" + - "\0\u04a1\0\u04a1\0\u04a1\0\u0855\0\u04a1\0\u08a4\0\u08f3\0\u0942" + - "\0\u0991\0\u09e0\0\u0a2f\0\u0a7e\0\u0acd\0\u0b1c\0\u0b6b\0\u0bba" + - "\0\u0c09\0\u0c58\0\u0ca7\0\u0cf6\0\u0d45\0\u0d94\0\u0855\0\u0de3" + - "\0\u0e32\0\u0e81\0\u04a1\0\u0ed0\0\u04a1\0\u0f1f\0\u04a1\0\u04a1" + - "\0\u04a1\0\u04a1\0\u04a1\0\u0f6e\0\u04a1\0\u0fbd\0\u100c\0\u04a1" + - "\0\u105b\0\u10aa\0\u10f9\0\u1148\0\u1197\0\u11e6\0\u1235\0\u1284" + - "\0\u12d3\0\u1322\0\u1371\0\u13c0\0\u140f\0\u145e\0\u04a1\0\u14ad" + - "\0\u14fc\0\u154b\0\u04a1\0\u159a\0\u15e9\0\u1638\0\u1687\0\u16d6" + - "\0\u1725\0\u1774\0\u17c3\0\u1812\0\u1861\0\u18b0\0\u18ff\0\u194e" + - "\0\u199d\0\u04a1\0\u19ec\0\u1a3b\0\u1a8a\0\u1ad9\0\u04a1\0\u1b28" + - "\0\u04a1\0\u1b77\0\u04a1\0\u1bc6\0\u1c15\0\u1c64\0\u1cb3\0\u1d02" + - "\0\u1d51\0\u1da0\0\u1def\0\u1e3e\0\u1e8d\0\u1edc\0\u1f2b\0\u1f7a" + - "\0\u1fc9\0\u2018\0\u2067\0\u20b6\0\u2105\0\u2154\0\u21a3\0\u21f2" + - "\0\u2241\0\u2290\0\u22df\0\u232e\0\u237d\0\u23cc\0\u241b\0\u246a" + - "\0\u24b9\0\u2508\0\u2557\0\u25a6\0\u25f5\0\u2644\0\u2693\0\u26e2" + - "\0\u2731\0\u2780\0\u27cf\0\u281e\0\u286d\0\u28bc\0\u290b\0\u295a" + - "\0\u29a9\0\u29f8\0\u2a47\0\u2a96\0\u2ae5\0\u2b34\0\u2b83\0\u2bd2" + - "\0\u2c21\0\u2c70\0\u2cbf\0\u2d0e\0\u2d5d\0\u2dac\0\u2dfb\0\u2e4a" + - "\0\u2e99\0\u2ee8\0\u2f37\0\u2f86\0\u2fd5\0\u3024\0\u04a1\0\u105b" + - "\0\u3073\0\u30c2\0\u3111\0\u3160\0\u31af\0\u31fe\0\u324d\0\u324d" + - "\0\u324d\0\u329c\0\u32eb\0\u333a\0\u3389\0\u33d8\0\u3427\0\u3476" + - "\0\u34c5\0\u04a1\0\u3514\0\u04a1\0\u3563\0\u35b2\0\u3601\0\u3650" + - "\0\u369f\0\u36ee\0\u373d\0\u378c\0\u37db\0\u382a\0\u3879\0\u38c8" + - "\0\u3917\0\u3966\0\u39b5\0\u3a04\0\u3a53\0\u3aa2\0\u3af1\0\u3b40" + - "\0\u3b8f\0\u3bde\0\u3c2d\0\u3c7c\0\u3ccb\0\u3d1a\0\u10f9\0\u3d69" + - "\0\u3db8\0\u3e07\0\u3e56\0\u3ea5\0\u3ef4\0\u3f43\0\u3f92\0\u3fe1" + - "\0\u4030\0\u407f\0\u40ce\0\u411d\0\u416c\0\u41bb\0\u420a\0\u4259" + - "\0\u42a8\0\u42f7\0\u04a1\0\u1a3b\0\u4346\0\u4395\0\u04a1\0\u43e4" + - "\0\u4433\0\u4482\0\u44d1\0\u4520\0\u456f\0\u45be\0\u460d\0\u465c" + - "\0\u46ab\0\u46fa\0\u4749\0\u4798\0\u47e7\0\u4836\0\u4885\0\u48d4" + - "\0\u4923\0\u4972\0\u49c1\0\u4a10\0\u4a5f\0\u4aae\0\u4afd\0\u4b4c" + - "\0\u26e2\0\u4b9b\0\u4bea\0\u4c39\0\u4c88\0\u4cd7\0\u4d26\0\u4d75" + - "\0\u4dc4\0\u4e13\0\u4e62\0\u4eb1\0\u4f00\0\u4f4f\0\u4f9e\0\u4fed" + - "\0\u503c\0\u508b\0\u50da\0\u5129\0\u5178\0\u51c7\0\u5216\0\u5265" + - "\0\u52b4\0\u5303\0\u5352\0\u53a1\0\u53f0\0\u543f\0\u548e\0\u54dd" + - "\0\u552c\0\u557b\0\u55ca\0\u5619\0\u5668\0\u0acd\0\u56b7\0\u5706" + - "\0\u5755\0\u57a4\0\u57f3\0\u5842\0\u5891\0\u324d\0\u58e0\0\u592f" + - "\0\u04a1\0\u597e\0\u59cd\0\u5a1c\0\u5a6b\0\u5aba\0\u5b09\0\u5b58" + - "\0\u5ba7\0\u5bf6\0\u5c45\0\u5c94\0\u5ce3\0\u5d32\0\u5d81\0\u5dd0" + - "\0\u5e1f\0\u5e6e\0\u5ebd\0\u5f0c\0\u5f5b\0\u5faa\0\u5ff9\0\u6048" + - "\0\u6097\0\u60e6\0\u6135\0\u6184\0\u61d3\0\u6222\0\u6271\0\u62c0" + - "\0\u630f\0\u635e\0\u63ad\0\u63fc\0\u644b\0\u649a\0\u64e9\0\u6538" + - "\0\u6587\0\u65d6\0\u6625\0\u6674\0\u66c3\0\u6712\0\u6761\0\u67b0" + - "\0\u67ff\0\u684e\0\u689d\0\u68ec\0\u693b\0\u698a\0\u69d9\0\u6a28" + - "\0\u6a77\0\u6ac6\0\u6b15\0\u04a1\0\u6b64\0\u6bb3\0\u6c02\0\u6c51" + - "\0\u6ca0\0\u6cef\0\u6d3e\0\u6d8d\0\u6ddc\0\u6e2b\0\u6e7a\0\u6ec9" + - "\0\u6f18\0\u6f67\0\u6fb6\0\u7005\0\u7054\0\u70a3\0\u70f2\0\u28bc" + - "\0\u7141\0\u7190\0\u71df\0\u722e\0\u727d\0\u72cc\0\u731b\0\u736a" + - "\0\u73b9\0\u7408\0\u7457\0\u74a6\0\u74f5\0\u7544\0\u7593\0\u4f00" + - "\0\u75e2\0\u04a1\0\u7631\0\u7680\0\u76cf\0\u771e\0\u04a1\0\u5a6b" + - "\0\u776d\0\u77bc\0\u10f9\0\u780b\0\u785a\0\u78a9\0\u78f8\0\u7947" + - "\0\u7996\0\u10f9\0\u79e5\0\u7a34\0\u7a83\0\u7ad2\0\u7b21\0\u7b70" + - "\0\u7bbf\0\u7c0e\0\u7c5d\0\u7cac\0\u7cfb\0\u7d4a\0\u7d99\0\u7de8" + - "\0\u7e37\0\u7e86\0\u7ed5\0\u7f24\0\u10f9\0\u7f73\0\u7fc2\0\u8011" + - "\0\u8060\0\u80af\0\u80fe\0\u814d\0\u819c\0\u81eb\0\u823a\0\u8289" + - "\0\u82d8\0\u8327\0\u8376\0\u83c5\0\u8414\0\u8463\0\u84b2\0\u84b2" + - "\0\u8501\0\u8550\0\u859f\0\u85ee\0\u863d\0\u868c\0\u86db\0\u872a" + - "\0\u8779\0\u87c8\0\u8817\0\u8866\0\u88b5\0\u8904\0\u8953\0\u89a2" + - "\0\u5ce3\0\u89f1\0\u8a40\0\u8a8f\0\u8ade\0\u8b2d\0\u8b7c\0\u8bcb" + - "\0\u8c1a\0\u8c69\0\u8cb8\0\u8d07\0\u8d56\0\u8da5\0\u8df4\0\u8e43" + - "\0\u8e92\0\u8ee1\0\u8f30\0\u8f7f\0\u8fce\0\u901d\0\u906c\0\u90bb" + - "\0\u910a\0\u9159\0\u91a8\0\u91f7\0\u9246\0\u9295\0\u92e4\0\u9333" + - "\0\u9382\0\u93d1\0\u9420\0\u946f\0\u94be\0\u950d\0\u955c\0\u95ab" + - "\0\u95fa\0\u9649\0\u9698\0\u96e7\0\u9736\0\u9785\0\u97d4\0\u9823" + - "\0\u9872\0\u98c1\0\u1a8a\0\u9910\0\u995f\0\u99ae\0\u99fd\0\u9a4c" + - "\0\u9a9b\0\u9aea\0\u9b39\0\u9b88\0\u9bd7\0\u9c26\0\u9c75\0\u9cc4" + - "\0\u9d13\0\u9d62\0\u9db1\0\u9e00\0\u04a1\0\u9e4f"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[566]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int INATTR_SINGLE_SCRIPT = 10; + public static final int JS_CHAR = 16; + public static final int CSS_STRING = 22; + public static final int JS_MLC = 17; + public static final int CSS_CHAR_LITERAL = 23; + public static final int INTAG_SCRIPT = 8; + public static final int JS_TEMPLATE_LITERAL_EXPR = 26; + public static final int CSS_PROPERTY = 20; + public static final int CSS_C_STYLE_COMMENT = 24; + public static final int CSS = 19; + public static final int CSS_VALUE = 21; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 9; + public static final int PI = 2; + public static final int JAVASCRIPT = 14; + public static final int INTAG = 4; + public static final int INTAG_CHECK_TAG_NAME = 5; + public static final int INATTR_SINGLE_STYLE = 13; + public static final int DTD = 3; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 12; + public static final int INATTR_SINGLE = 7; + public static final int JS_TEMPLATE_LITERAL = 25; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 6; + public static final int JS_STRING = 15; + public static final int INTAG_STYLE = 11; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ + "\1\34\1\36\1\50\1\5\1\110\1\105\1\104\1\37\1\42\1\45"+ + "\1\31\1\43\1\10\1\25\6\125\1\27\2\24\1\53\1\6\1\3"+ + "\1\46\1\17\1\52\1\103\1\112\1\26\1\12\1\116\1\22\1\41"+ + "\1\120\1\124\1\14\1\126\1\121\1\21\1\115\1\114\1\113\1\15"+ + "\1\122\1\13\1\11\1\16\1\117\1\123\1\23\1\40\1\20\1\23"+ + "\1\107\1\35\1\107\1\47\1\30\1\130\1\71\1\102\1\66\1\70"+ + "\1\76\1\73\1\57\1\65\1\56\1\126\1\100\1\67\1\77\1\64"+ + "\1\62\1\75\1\122\1\61\1\72\1\63\1\32\1\101\1\111\1\106"+ + "\1\74\1\127\1\60\1\55\1\44\1\54\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\2\1\1\11\1\12\2\13\1\14\1\15"+ + "\1\16\1\17\1\20\1\21\1\22\1\23\2\21\2\23"+ + "\3\21\2\23\5\21\1\23\3\21\1\23\1\1\1\24"+ + "\1\1\1\25\1\15\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\1\36\2\17\1\2\1\37\1\17"+ + "\2\2\1\17\2\40\1\17\1\2\1\35\2\17\1\2"+ + "\1\41\1\35\17\2\1\42\2\2\1\43\1\1\1\44"+ + "\1\45\1\46\1\1\1\47\1\50\1\51\1\1\1\52"+ + "\6\1\1\53\4\1\1\54\1\55\1\54\1\56\1\54"+ + "\1\57\1\54\1\60\1\61\1\54\1\62\1\63\1\64"+ + "\2\63\1\65\1\63\1\66\1\67\1\70\1\71\1\70"+ + "\1\72\2\2\1\40\1\2\2\70\1\73\1\74\1\75"+ + "\1\76\1\77\1\100\1\101\1\1\1\102\2\1\1\103"+ + "\1\104\1\105\1\106\1\1\1\107\1\1\1\110\1\4"+ + "\2\111\1\112\1\113\1\6\5\0\1\114\31\21\1\23"+ + "\1\21\1\23\2\21\1\23\44\21\1\115\3\0\1\116"+ + "\1\0\1\117\1\17\1\35\1\2\1\17\1\120\1\40"+ + "\1\120\2\121\1\120\1\122\1\120\1\2\1\65\1\2"+ + "\1\65\17\2\1\65\34\2\1\123\1\124\1\125\1\0"+ + "\1\126\12\0\1\127\1\130\15\0\1\131\1\40\5\0"+ + "\1\40\1\0\1\77\1\132\1\133\1\134\1\135\2\111"+ + "\1\0\1\136\4\0\13\21\1\23\64\21\1\0\1\137"+ + "\1\0\1\35\1\2\1\121\1\0\2\122\1\2\1\57"+ + "\23\2\1\140\40\2\41\0\2\111\1\141\2\0\1\142"+ + "\22\21\1\23\5\21\1\23\12\21\1\0\1\143\1\35"+ + "\10\2\1\144\6\2\1\57\16\2\1\145\1\2\1\146"+ + "\4\2\1\0\1\1\3\0\1\147\3\0\1\150\6\0"+ + "\1\65\15\0\2\111\2\0\11\21\1\23\12\21\1\0"+ + "\1\35\7\2\1\65\10\2\1\65\6\2\24\0\1\111"+ + "\1\151\12\21\1\0\1\35\5\2\1\152\12\2\14\0"+ + "\1\153\3\21\1\0\10\2\10\0\1\21\1\0\3\2"+ + "\2\0\1\154\4\0\1\21\1\155\1\2\1\156\1\157"+ + "\6\0\1\160"; + + private static int [] zzUnpackAction() { + int [] result = new int[819]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\16\1\17\1\20\1\21\1\22\1\23\111\16\2\24" + - "\1\25\43\24\1\26\50\24\2\27\1\30\52\27\1\31" + - "\41\27\2\32\1\33\14\32\1\34\77\32\1\35\1\36" + - "\1\0\1\35\1\22\2\35\1\37\1\40\6\35\1\41" + - "\6\35\1\42\1\43\67\35\2\44\1\0\1\44\1\45" + - "\2\44\2\45\1\46\1\47\1\50\1\51\1\52\1\53" + - "\1\45\3\44\1\54\2\44\2\45\1\55\1\50\1\53" + - "\1\56\1\54\5\44\1\57\2\60\1\61\11\44\1\46" + - "\1\47\1\51\1\52\1\62\1\63\1\56\1\44\1\64" + - "\1\65\1\55\1\44\1\66\1\67\1\70\1\71\2\44" + - "\1\61\1\62\1\66\1\63\1\65\1\57\1\44\1\71" + - "\1\44\1\70\1\44\1\64\2\44\27\72\1\73\67\72" + - "\26\74\1\75\70\74\1\35\1\36\1\0\1\35\1\22" + - "\2\35\1\37\1\76\6\35\1\77\6\35\1\100\1\101" + - "\67\35\27\72\1\102\67\72\26\74\1\103\70\74\1\104" + - "\1\22\1\105\1\106\1\22\1\107\1\110\1\111\1\112" + - "\3\113\1\114\2\113\1\115\1\113\1\116\1\117\1\113" + - "\1\116\1\104\1\120\1\121\1\122\1\123\1\124\1\125" + - "\1\126\1\116\1\127\1\113\1\111\3\113\1\130\1\113" + - "\1\131\1\132\1\133\1\110\1\134\2\111\2\37\1\135" + - "\1\136\1\137\1\140\2\113\1\141\11\113\1\116\1\113" + - "\1\142\1\143\2\113\1\144\1\145\1\146\2\113\1\147" + - "\1\150\3\113\2\151\1\152\35\151\1\153\56\151\2\16" + - "\4\0\112\16\1\17\2\0\1\22\1\0\111\16\127\0" + - "\1\154\6\155\1\0\5\155\3\0\6\155\3\0\5\155" + - "\6\0\1\156\1\157\1\0\1\160\37\155\1\0\1\22" + - "\2\0\1\22\112\0\4\23\1\0\1\23\1\161\110\23" + - "\2\24\1\0\43\24\1\0\50\24\46\0\1\162\50\0" + - "\2\27\1\0\52\27\1\0\41\27\17\0\1\163\77\0" + - "\2\32\1\0\14\32\1\0\77\32\2\35\1\0\1\35" + - "\1\0\2\35\2\0\6\35\1\0\6\35\2\0\70\35" + - "\1\36\1\0\1\35\1\22\2\35\2\0\6\35\1\0" + - "\6\35\2\0\67\35\17\0\1\41\77\0\2\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\71\44\1\0\1\44\1\0\2\44\2\0\1\44\1\164" + - "\2\44\1\165\1\166\1\0\6\44\2\0\1\167\1\44" + - "\1\166\12\44\1\170\12\44\1\164\1\44\1\165\1\171" + - "\1\172\2\44\1\173\1\44\1\167\7\44\1\170\1\171" + - "\1\44\1\172\7\44\1\173\4\44\1\0\1\44\1\0" + - "\2\44\2\0\3\44\1\174\2\44\1\0\6\44\2\0" + - "\15\44\1\175\13\44\1\174\1\44\1\176\1\177\14\44" + - "\1\175\1\176\1\44\1\177\14\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\1\200\40\44" + - "\1\200\27\44\1\0\1\44\1\0\2\44\2\0\1\201" + - "\5\44\1\0\6\44\2\0\3\44\1\202\6\44\1\203" + - "\2\204\12\44\1\201\5\44\1\202\1\44\1\205\16\44" + - "\1\203\5\44\1\205\4\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\206\3\44\1\0\6\44\2\0\1\44" + - "\1\206\10\44\1\207\20\44\1\210\16\44\1\210\3\44" + - "\1\207\12\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\67\1\211\1\44\1\67\1\0\3\44\1\212\2\44" + - "\2\0\1\44\2\67\1\44\1\212\6\44\2\213\1\214" + - "\13\44\1\211\1\44\1\215\4\44\1\67\5\44\1\216" + - "\2\44\1\214\1\215\2\44\1\67\2\44\1\216\10\44" + - "\1\0\1\44\1\0\2\44\2\0\2\44\1\67\1\205" + - "\2\44\1\0\6\44\2\0\1\217\1\67\10\44\1\220" + - "\16\44\1\205\1\44\1\221\1\222\3\44\1\223\1\217" + - "\1\224\7\44\1\221\1\44\1\222\1\223\1\220\4\44" + - "\1\224\5\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\12\44\1\67\43\44\1\67\12\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\15\44\1\225\15\44\1\226\1\227\14\44\1\225" + - "\1\226\1\44\1\227\14\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\230\2\44\1\0\6\44\2\0\15\44" + - "\1\231\13\44\1\230\1\44\1\232\15\44\1\231\1\232" + - "\16\44\1\0\1\44\1\0\2\44\2\0\2\44\1\233" + - "\1\234\2\44\1\0\6\44\2\0\1\44\1\233\27\44" + - "\1\234\2\44\1\235\17\44\1\235\14\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\37\44" + - "\1\236\5\44\1\237\14\44\1\237\1\44\1\236\4\44" + - "\1\0\1\44\1\0\2\44\2\0\1\240\1\241\1\242" + - "\1\44\1\243\1\44\1\0\3\44\1\244\2\44\2\0" + - "\1\245\1\242\2\44\1\244\22\44\1\240\1\241\1\44" + - "\1\243\5\44\1\246\1\245\13\44\1\246\13\44\1\0" + - "\1\44\1\0\2\44\2\0\4\44\1\247\1\44\1\0" + - "\3\44\1\250\2\44\2\0\1\251\3\44\1\250\5\44" + - "\1\67\17\44\1\247\6\44\1\251\14\44\1\67\12\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\1\252\14\44\1\253\15\44\1\254\5\44\1\252" + - "\7\44\1\253\1\254\16\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\255\1\44\1\67\1\0\6\44\2\0" + - "\2\44\1\67\7\44\1\67\2\256\1\257\13\44\1\255" + - "\1\44\1\260\4\44\1\67\10\44\1\257\1\260\2\44" + - "\2\67\12\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\3\44\1\261\2\44\2\0\4\44\1\261\10\44" + - "\1\262\33\44\1\262\17\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\263\2\44\1\0\6\44\2\0\31\44" + - "\1\263\1\44\1\264\16\44\1\264\16\44\1\0\1\44" + - "\1\0\2\44\2\0\2\44\1\67\2\44\1\265\1\0" + - "\6\44\2\0\1\44\1\67\1\265\2\44\1\67\7\44" + - "\1\266\31\44\1\67\1\44\1\266\15\44\27\72\1\0" + - "\67\72\26\74\1\0\70\74\17\0\1\267\77\0\1\104" + - "\10\0\6\104\1\0\6\104\2\0\6\104\1\0\1\104" + - "\1\0\5\104\11\0\40\104\3\0\1\270\3\0\1\37" + - "\1\271\113\0\1\37\1\0\1\37\116\0\1\37\116\0" + - "\1\37\1\272\27\0\1\273\56\0\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\3\113\1\275\2\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\7\0\1\37\7\0\1\276\77\0" + - "\1\277\10\0\6\277\1\0\1\277\2\116\1\277\1\116" + - "\1\277\2\0\5\277\1\116\1\0\1\277\1\0\1\277" + - "\1\300\2\301\1\302\1\0\1\303\7\0\11\277\1\301" + - "\6\277\1\116\1\277\1\302\3\277\1\301\1\300\11\277" + - "\10\0\6\277\1\0\1\277\1\304\1\305\1\277\1\305" + - "\1\277\2\0\5\277\1\305\1\0\1\277\1\0\1\306" + - "\1\300\2\301\1\302\1\0\1\303\7\0\11\277\1\301" + - "\6\277\1\305\1\277\1\302\3\277\1\301\1\300\6\277" + - "\1\306\1\277\2\307\1\310\22\307\1\311\1\312\70\307" + - "\2\121\1\0\22\121\1\313\1\121\1\314\67\121\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\3\113\1\315" + - "\2\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\22\113\1\316\15\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\1\113\1\317" + - "\4\113\1\0\1\113\1\0\5\113\11\0\31\113\1\320" + - "\1\321\5\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\1\322\5\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\323\1\324\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\113\1\325\4\113\1\0\1\113" + - "\1\0\5\113\11\0\25\113\1\326\4\113\1\327\5\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\1\330" + - "\5\113\1\0\1\113\1\0\5\113\11\0\2\113\1\331" + - "\20\113\1\332\1\113\1\333\1\113\1\334\10\113\7\0" + - "\1\37\36\0\1\37\71\0\2\303\1\0\1\303\10\0" + - "\1\303\41\0\1\303\26\0\1\37\42\0\1\37\44\0" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\1\335" + - "\1\113\1\336\3\113\1\0\1\113\1\0\5\113\11\0" + - "\30\113\1\337\1\340\1\341\5\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\23\113\1\342\1\113\1\343\1\113\1\344" + - "\1\113\1\345\6\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\3\113\1\346\2\113\1\0\1\113\1\0" + - "\3\113\1\347\1\113\11\0\1\350\34\113\1\351\2\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\1\352" + - "\1\353\4\113\1\0\1\113\1\0\5\113\11\0\23\113" + - "\1\354\14\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\6\113\1\0\1\113\1\0\5\113\11\0\23\113" + - "\1\355\14\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\3\113\1\356\2\113\1\0\1\113\1\0\5\113" + - "\11\0\1\357\26\113\1\360\3\113\1\361\2\113\1\362" + - "\1\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\4\113\1\363\1\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\22\113\1\364" + - "\2\113\1\365\12\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\366\12\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\2\113\1\367\26\113\1\370\6\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\23\113\1\333\1\113\1\371\12\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\25\113\1\372\12\113\2\151" + - "\1\0\35\151\1\0\56\151\10\0\1\373\117\0\6\374" + - "\1\0\5\374\3\0\6\374\3\0\5\374\11\0\40\374" + - "\11\0\6\155\1\0\5\155\3\0\6\155\3\0\5\155" + - "\11\0\40\155\46\0\1\375\61\0\6\155\1\0\5\155" + - "\3\0\6\155\3\0\5\155\11\0\1\155\1\376\36\155" + - "\17\0\1\377\77\0\2\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\u0100\3\44\1\0\6\44\2\0\1\44" + - "\1\u0100\67\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\33\44\1\u0101\16\44\1\u0101\16\44" + - "\1\0\1\44\1\0\2\44\2\0\2\44\1\u0102\3\44" + - "\1\0\6\44\2\0\1\44\1\u0102\34\44\1\200\22\44" + - "\1\200\7\44\1\0\1\44\1\0\2\44\2\0\4\44" + - "\1\67\1\44\1\0\3\44\1\67\2\44\2\0\4\44" + - "\1\67\25\44\1\67\36\44\1\0\1\44\1\0\2\44" + - "\2\0\1\44\1\u0103\1\u0104\3\44\1\0\6\44\2\0" + - "\1\44\1\u0104\10\44\1\u0105\15\44\1\u0103\25\44\1\u0105" + - "\12\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\37\44\1\u0106\24\44\1\u0106\4\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\1\u0107\40\44\1\u0107\27\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\33\44\1\u0108\16\44" + - "\1\u0108\16\44\1\0\1\44\1\0\2\44\2\0\5\44" + - "\1\u0109\1\0\6\44\2\0\2\44\1\u0109\66\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\3\44\1\u010a\31\44\1\u010a\33\44\1\0\1\44\1\0" + - "\2\44\2\0\4\44\1\u0103\1\44\1\0\6\44\2\0" + - "\3\44\1\u010b\26\44\1\u0103\2\44\1\u010b\33\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\12\44\1\u010c\24\44\1\u010d\1\u0109\14\44\1\u0109\1\u010c" + - "\5\44\1\u010d\4\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\12\44\1\u0109\43\44\1\u0109" + - "\12\44\1\0\1\44\1\0\2\44\2\0\3\44\1\u010e" + - "\2\44\1\0\6\44\2\0\31\44\1\u010e\37\44\1\0" + - "\1\44\1\0\2\44\2\0\1\67\3\44\1\u010f\1\44" + - "\1\0\6\44\2\0\27\44\1\67\2\44\1\u010f\36\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\33\44\1\u0110\16\44\1\u0110\16\44\1\0\1\44" + - "\1\0\2\44\2\0\2\44\1\u0111\3\44\1\0\6\44" + - "\2\0\1\44\1\u0111\67\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\42\44\1\67\20\44" + - "\1\67\5\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\15\44\1\67\16\44\1\u0112\14\44" + - "\1\67\2\44\1\u0112\14\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\33\44\1\u0113\16\44" + - "\1\u0113\16\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\u0114\3\44\1\0\6\44\2\0\1\44\1\u0114\67\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\200\1\0" + - "\6\44\2\0\2\44\1\200\34\44\1\u0109\24\44\1\u0109" + - "\4\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\34\44\1\222\17\44\1\222\14\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\34\44\1\u0115\17\44\1\u0115\14\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\11\44\1\u0116" + - "\53\44\1\u0116\3\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\3\44\1\200\2\44\2\0\4\44\1\200" + - "\64\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\15\44\1\u0117\33\44\1\u0117\17\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\u0118\1\0\6\44" + - "\2\0\2\44\1\u0118\66\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\u0119\2\44\1\0\6\44\2\0\31\44" + - "\1\u0119\2\44\1\u011a\17\44\1\u011a\14\44\1\0\1\44" + - "\1\0\2\44\2\0\1\u011b\5\44\1\0\6\44\2\0" + - "\27\44\1\u011b\41\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\40\44\1\u011c\14\44\1\u011c" + - "\13\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\34\44\1\67\17\44\1\67\14\44\1\0" + - "\1\44\1\0\2\44\2\0\1\u011d\5\44\1\0\6\44" + - "\2\0\27\44\1\u011d\41\44\1\0\1\44\1\0\2\44" + - "\2\0\1\u011e\5\44\1\0\6\44\2\0\27\44\1\u011e" + - "\41\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\45\44\1\67\14\44\1\67\6\44\1\0" + - "\1\44\1\0\2\44\2\0\1\u011f\5\44\1\0\3\44" + - "\1\264\2\44\2\0\4\44\1\264\5\44\1\203\2\u0120" + - "\1\u0121\11\44\1\u011f\21\44\1\u0121\4\44\1\203\12\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\3\44\1\u0122\31\44\1\u0122\33\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\42\44" + - "\1\u0123\20\44\1\u0123\5\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\3\44\1\u0124\2\44\2\0\4\44" + - "\1\u0124\31\44\1\u0125\22\44\1\u0125\7\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\33\44" + - "\1\u0126\16\44\1\u0126\16\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\15\44\1\u0127\24\44" + - "\1\u0128\6\44\1\u0127\11\44\1\u0128\5\44\1\0\1\44" + - "\1\0\2\44\2\0\2\44\1\u0129\3\44\1\0\6\44" + - "\2\0\1\44\1\u0129\1\44\1\u011e\30\44\1\u010a\1\u011e" + - "\16\44\1\u010a\14\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\3\44\1\u012a\2\44\2\0\4\44\1\u012a" + - "\64\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\15\44\1\u012b\33\44\1\u012b\17\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\u012c\2\44\1\0" + - "\6\44\2\0\31\44\1\u012c\37\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\u012d\3\44\1\0\6\44\2\0" + - "\1\44\1\u012d\67\44\1\0\1\44\1\0\2\44\2\0" + - "\5\44\1\u012e\1\0\6\44\2\0\2\44\1\u012e\12\44" + - "\1\u012f\33\44\1\u012f\17\44\1\0\1\44\1\0\2\44" + - "\2\0\4\44\1\u0130\1\44\1\0\6\44\2\0\32\44" + - "\1\u0130\36\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\3\44\1\264\2\44\2\0\4\44\1\264\64\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\40\44\1\u0131\14\44\1\u0131\13\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\40\44" + - "\1\u0132\14\44\1\u0132\13\44\1\0\1\44\1\0\2\44" + - "\2\0\5\44\1\u0133\1\0\6\44\2\0\2\44\1\u0133" + - "\66\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\50\44\1\u0105\20\44\1\0\1\44\1\0" + - "\2\44\2\0\5\44\1\u0134\1\0\6\44\2\0\2\44" + - "\1\u0134\66\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\12\44\1\u0135\43\44\1\u0135\12\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\u0136\1\0" + - "\6\44\2\0\2\44\1\u0136\1\u0137\31\44\1\u0137\33\44" + - "\1\0\1\44\1\0\2\44\2\0\2\44\1\u0138\1\44" + - "\1\67\1\44\1\0\6\44\2\0\1\44\1\u0138\30\44" + - "\1\67\36\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\67\3\44\1\0\6\44\2\0\1\44\1\67\31\44" + - "\1\u0139\11\44\1\67\4\44\1\u0139\7\44\1\67\6\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\3\44\1\67\31\44\1\67\33\44\1\0\1\44" + - "\1\0\2\44\2\0\5\44\1\u013a\1\0\6\44\2\0" + - "\2\44\1\u013a\7\44\1\67\43\44\1\67\12\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\u013b\1\0\6\44" + - "\2\0\2\44\1\u013b\66\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\40\44\1\67\14\44" + - "\1\67\13\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\36\44\1\u013c\22\44\1\u013c\7\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\40\44\1\u013d\14\44\1\u013d\13\44\1\0\1\44" + - "\1\0\2\44\2\0\2\44\1\67\3\44\1\0\6\44" + - "\2\0\1\44\1\67\67\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\37\44\1\u013e\24\44" + - "\1\u013e\4\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\33\44\1\u013f\16\44\1\u013f\14\44" + - "\11\0\1\u0140\45\0\1\u0140\37\0\2\272\1\0\114\272" + - "\40\0\1\u0141\56\0\1\104\10\0\6\104\1\0\6\104" + - "\2\0\1\u0142\5\104\1\0\1\104\1\0\5\104\11\0" + - "\41\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\3\113\1\u0143\1\113\11\0\40\113" + - "\7\0\1\37\7\0\1\111\77\0\1\277\10\0\6\277" + - "\1\0\6\277\2\0\6\277\1\0\1\277\1\0\5\277" + - "\11\0\41\277\10\0\6\277\1\0\1\277\2\u0144\1\277" + - "\1\u0144\1\277\2\0\5\277\1\u0144\1\0\1\277\1\0" + - "\5\277\1\u0145\3\0\1\u0145\4\0\20\277\1\u0144\20\277" + - "\10\0\6\277\1\0\1\277\2\303\1\277\1\303\1\277" + - "\2\0\5\277\1\303\1\0\1\277\1\0\2\277\2\301" + - "\1\302\11\0\11\277\1\301\6\277\1\303\1\277\1\302" + - "\3\277\1\301\12\277\10\0\6\277\1\0\1\277\2\304" + - "\1\277\1\304\1\277\2\0\5\277\1\304\1\0\1\277" + - "\1\0\2\277\2\301\1\302\1\0\1\303\7\0\11\277" + - "\1\301\6\277\1\304\1\277\1\302\3\277\1\301\12\277" + - "\10\0\6\277\1\0\1\277\1\304\1\305\1\277\1\305" + - "\1\277\2\0\5\277\1\305\1\0\1\277\1\0\1\277" + - "\1\u0146\2\301\1\302\1\0\1\303\7\0\11\277\1\301" + - "\6\277\1\305\1\277\1\302\3\277\1\301\1\u0146\11\277" + - "\10\0\1\277\1\u0147\4\277\1\0\1\277\4\u0147\1\277" + - "\2\0\4\277\2\u0147\1\0\1\277\1\0\2\277\3\u0147" + - "\11\0\1\277\1\u0147\2\277\1\u0147\4\277\1\u0147\6\277" + - "\1\u0147\1\277\2\u0147\2\277\1\u0147\11\277\2\u0148\1\0" + - "\23\u0148\1\u0149\70\u0148\26\0\1\u0149\70\0\2\u0148\1\0" + - "\17\u0148\1\u014a\1\u0148\1\u014b\1\307\1\310\1\307\1\u014c" + - "\4\307\1\u014a\6\u0148\1\307\32\u0148\1\u014b\17\u0148\2\u014d" + - "\1\0\17\u014d\1\121\1\u014d\1\121\1\u014e\2\121\1\u014f" + - "\5\121\6\u014d\1\121\32\u014d\1\121\17\u014d\1\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\6\113\1\0\1\113" + - "\1\0\5\113\11\0\22\113\1\u0150\15\113\1\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\2\113\1\u0151\3\113" + - "\1\0\1\113\1\0\5\113\11\0\40\113\1\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\1\u0152\5\113\1\0" + - "\1\113\1\0\5\113\11\0\23\113\1\u0153\6\113\1\347" + - "\5\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\1\113\1\u0154\4\113\1\0\1\113\1\0\5\113\11\0" + - "\2\113\1\u0155\35\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\3\113\1\u0156\34\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\27\113\1\u0157\10\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\30\113\1\347\7\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u0158\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\u0159\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\u015a\12\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u015b\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\3\113\1\u015c\2\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\3\113\1\u015d\2\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\27\113\1\u015e\10\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\1\113\1\347\4\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\u015f\12\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\3\113\1\u0160\34\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u0161\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\2\113\1\u0162\35\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\u0163\12\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\3\113\1\u0164\2\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u0165\3\113\1\0\1\113\1\0" + - "\5\113\11\0\1\u0166\37\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\3\113\1\u0167\2\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u0168\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u0169\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\2\113\1\u016a\3\113\1\0\1\113" + - "\1\0\5\113\11\0\1\u016b\37\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\2\113\1\u016c\2\113\11\0\6\113\1\u016d\31\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\3\113\1\u016e\34\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\4\113\1\u016f" + - "\1\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\2\113\1\u0170\22\113\1\u0171" + - "\12\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\1\113\1\u0172\4\113\1\0\1\113\1\0\5\113\11\0" + - "\1\113\1\u0173\36\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\6\113\1\347\31\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\1\u0174\5\113\1\0\1\113\1\0\5\113" + - "\11\0\40\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\6\113\1\0\1\113\1\0\5\113\11\0\1\113" + - "\1\u0175\36\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\6\113\1\0\1\113\1\0\5\113\11\0\1\u0166" + - "\37\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\23\113\1\u0176" + - "\14\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\2\113\1\u0177\3\113\1\0\1\113\1\0\5\113\11\0" + - "\3\113\1\u0178\34\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\1\u0179\37\113\1\104\10\0\6\113\1\0\5\113\1\274" + - "\2\0\4\113\1\u017a\1\113\1\0\1\113\1\0\3\113" + - "\1\u017b\1\113\11\0\27\113\1\u017c\10\113\1\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\1\u017d\5\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\3\113\1\u017e\2\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\2\113\1\u017f\3\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\2\113\1\u0180\35\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\2\113\1\u0181\24\113\1\u0182\10\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\2\113\1\u0183" + - "\3\113\1\0\1\113\1\0\5\113\11\0\40\113\46\0" + - "\1\u0184\61\0\6\155\1\0\5\155\3\0\1\155\1\u0185" + - "\4\155\3\0\5\155\11\0\40\155\2\44\1\0\1\44" + - "\1\0\2\44\2\0\3\44\1\u0186\2\44\1\0\6\44" + - "\2\0\31\44\1\u0186\37\44\1\0\1\44\1\0\2\44" + - "\2\0\1\44\1\u0125\4\44\1\0\6\44\2\0\3\44" + - "\1\67\24\44\1\u0125\4\44\1\67\33\44\1\0\1\44" + - "\1\0\2\44\2\0\3\44\1\u0187\2\44\1\0\6\44" + - "\2\0\31\44\1\u0187\2\44\1\u0188\17\44\1\u0188\14\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\u0189\1\0" + - "\6\44\2\0\2\44\1\u0189\66\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\45\44\1\u0125" + - "\14\44\1\u0125\6\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\15\44\1\u018a\33\44\1\u018a" + - "\17\44\1\0\1\44\1\0\2\44\2\0\4\44\1\67" + - "\1\44\1\0\6\44\2\0\32\44\1\67\36\44\1\0" + - "\1\44\1\0\2\44\2\0\2\44\1\u018b\3\44\1\0" + - "\6\44\2\0\1\44\1\u018b\67\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\12\44\1\u013e" + - "\43\44\1\u013e\12\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\15\44\1\67\33\44\1\67" + - "\17\44\1\0\1\44\1\0\2\44\2\0\5\44\1\u0125" + - "\1\0\6\44\2\0\2\44\1\u0125\66\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\45\44" + - "\1\u018c\14\44\1\u018c\6\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\42\44\1\u018d\20\44" + - "\1\u018d\5\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\37\44\1\u018e\24\44\1\u018e\4\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\3\44\1\u018f\31\44\1\u018f\33\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\1\u011e" + - "\40\44\1\u011e\27\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\36\44\1\u0125\22\44\1\u0125" + - "\7\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\33\44\1\u0190\16\44\1\u0190\16\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\42\44\1\u0132\20\44\1\u0132\5\44\1\0\1\44\1\0" + - "\2\44\2\0\3\44\1\u0191\2\44\1\0\6\44\2\0" + - "\31\44\1\u0191\37\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\33\44\1\u0129\16\44\1\u0129" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\34\44\1\u011e\17\44\1\u011e\14\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\u0192\1\0\6\44" + - "\2\0\2\44\1\u0192\66\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\33\44\1\261\16\44" + - "\1\261\16\44\1\0\1\44\1\0\2\44\2\0\5\44" + - "\1\u0193\1\0\6\44\2\0\2\44\1\u0193\66\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\u0194\4\44\1\0" + - "\6\44\2\0\30\44\1\u0194\40\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\u0195" + - "\33\44\1\u0195\17\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\36\44\1\67\22\44\1\67" + - "\7\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\34\44\1\u0196\17\44\1\u0196\14\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\67\1\0\6\44" + - "\2\0\2\44\1\67\66\44\1\0\1\44\1\0\2\44" + - "\2\0\1\44\1\164\4\44\1\0\6\44\2\0\30\44" + - "\1\164\40\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\u0197\3\44\1\0\6\44\2\0\1\44\1\u0197\67\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\37\44\1\u0198\24\44\1\u0198\4\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\43\44" + - "\1\67\7\44\1\67\15\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\15\44\1\u0199\33\44" + - "\1\u0199\17\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\15\44\1\u013e\33\44\1\u013e\17\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\15\44\1\264\33\44\1\264\17\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\37\44" + - "\1\u019a\24\44\1\u019a\4\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\12\44\1\u019b\43\44" + - "\1\u019b\12\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\1\u019c\40\44\1\u019c\27\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\37\44\1\67\24\44\1\67\4\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\261" + - "\33\44\1\261\17\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\3\44\1\u019d\31\44\1\u019d" + - "\33\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\40\44\1\u0109\14\44\1\u0109\13\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\34\44\1\u019e\17\44\1\u019e\14\44\1\0\1\44\1\0" + - "\2\44\2\0\3\44\1\u019f\2\44\1\0\6\44\2\0" + - "\31\44\1\u019f\37\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\33\44\1\67\16\44\1\67" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\12\44\1\u01a0\43\44\1\u01a0\12\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\223\2\44\1\0" + - "\6\44\2\0\31\44\1\223\37\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\u01a1\3\44\1\0\6\44\2\0" + - "\1\44\1\u01a1\67\44\1\0\1\44\1\0\2\44\2\0" + - "\3\44\1\u0193\2\44\1\0\6\44\2\0\31\44\1\u0193" + - "\10\44\1\u018d\20\44\1\u018d\5\44\1\0\1\44\1\0" + - "\2\44\2\0\4\44\1\u010f\1\44\1\0\6\44\2\0" + - "\32\44\1\u010f\36\44\1\0\1\44\1\0\2\44\2\0" + - "\5\44\1\u01a2\1\0\6\44\2\0\2\44\1\u01a2\66\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\15\44\1\264\15\44\1\67\15\44\1\264\1\67" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\1\67\40\44\1\67\27\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\43\44" + - "\1\67\1\u01a3\6\44\1\67\15\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\12\44\1\u01a4" + - "\43\44\1\u01a4\12\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\33\44\1\u01a5\16\44\1\u01a5" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\33\44\1\u01a6\16\44\1\u01a6\16\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\42\44\1\u01a7\20\44\1\u01a7\5\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\223" + - "\33\44\1\223\17\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\40\44\1\u01a8\14\44\1\u01a8" + - "\11\44\12\0\1\u01a9\45\0\1\u01a9\46\0\1\u01aa\106\0" + - "\1\104\10\0\1\104\1\u01ab\4\104\1\0\1\104\4\u01ab" + - "\1\104\2\0\4\104\2\u01ab\1\0\1\104\1\0\2\104" + - "\3\u01ab\11\0\1\104\1\u01ab\2\104\1\u01ab\4\104\1\u01ab" + - "\6\104\1\u01ab\1\104\2\u01ab\2\104\1\u01ab\12\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\6\113\1\0\1\113" + - "\1\0\5\113\11\0\2\113\1\u01ac\35\113\1\277\10\0" + - "\6\277\1\0\1\277\2\u0144\1\277\1\u0144\1\277\2\0" + - "\5\277\1\u0144\1\0\1\277\1\0\2\277\2\301\1\277" + - "\11\0\11\277\1\301\6\277\1\u0144\5\277\1\301\11\277" + - "\21\0\2\u0144\1\0\1\u0144\10\0\1\u0144\41\0\1\u0144" + - "\17\0\1\277\10\0\1\277\1\u0147\4\277\1\0\1\277" + - "\4\u0147\1\277\2\0\4\277\2\u0147\1\0\1\277\1\0" + - "\1\277\1\u0146\3\u0147\11\0\1\277\1\u0147\2\277\1\u0147" + - "\4\277\1\u0147\6\277\1\u0147\1\277\2\u0147\2\277\1\u0147" + - "\1\u0146\10\277\2\u0148\1\0\23\u0148\1\312\72\u0148\1\0" + - "\17\u0148\1\u014b\1\u0148\1\u014b\1\u0148\1\u0149\6\u0148\1\u014b" + - "\41\u0148\1\u014b\21\u0148\1\0\17\u0148\1\307\1\u0148\1\307" + - "\1\u0148\1\u0149\6\u0148\1\307\41\u0148\1\307\21\u0148\1\0" + - "\7\u0148\1\u01ad\6\u0148\4\u01ad\1\u0148\1\312\5\u0148\2\u01ad" + - "\5\u0148\3\u01ad\12\u0148\1\u01ad\2\u0148\1\u01ad\4\u0148\1\u01ad" + - "\6\u0148\1\u01ad\1\u0148\2\u01ad\2\u0148\1\u01ad\11\u0148\2\u014d" + - "\1\0\22\u014d\1\u01ae\1\u014d\1\u01af\67\u014d\2\121\1\0" + - "\22\121\1\313\1\121\1\u01b0\67\121\2\u014d\1\0\7\u014d" + - "\1\u01b1\6\u014d\4\u01b1\1\u01ae\1\u014d\1\u01af\4\u014d\2\u01b1" + - "\5\u014d\3\u01b1\12\u014d\1\u01b1\2\u014d\1\u01b1\4\u014d\1\u01b1" + - "\6\u014d\1\u01b1\1\u014d\2\u01b1\2\u014d\1\u01b1\11\u014d\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\1\357\37\113\1\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\1\u01b2\5\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\22\113\1\u01b3\15\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\3\113\1\u01b4\2\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\25\113\1\u01b5\12\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\1\347\37\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01b6\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\27\113\1\347\10\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\2\113\1\u01b7\35\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01b8\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\27\113\1\u01b9\10\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01ba\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\1\113\1\u01bb\36\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01bc\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\1\u0152\37\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u01bd\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\333\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u01be\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u0165\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\1\113\1\u01bd\4\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\1\113\1\u01bf\36\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\1\113\1\u017f\36\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\347\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u01c0\3\113\1\0\1\113\1\0" + - "\5\113\11\0\1\u01c1\37\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\1\u0155\37\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\1\113\1\u01ba\4\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\u01c2\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u01c3\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\2\113\1\u01c4\35\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u01c5\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\u01c6\1\113\1\u01c7\10\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\27\113\1\u01be\10\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\33\113\1\u01c8\4\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\2\113\1\u01c9\3\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\1\u01ca\37\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\24\113\1\u01cb\13\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\35\113\1\347\2\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01cc\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\27\113\1\u01cd\10\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01ce\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\25\113\1\u01c6\12\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\2\113\1\u01cf\3\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\u01d0\5\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u01d1\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\u01d2\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\4\113\1\u01d3\1\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\34\113\1\u01ba\3\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\31\113\1\347\6\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\27\113\1\u0166\10\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\26\113\1\347\11\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u01d4\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\25\113\1\347\12\113\11\0\6\155\1\0\5\155\3\0" + - "\6\155\3\0\5\155\11\0\2\155\1\u01d5\35\155\2\44" + - "\1\0\1\44\1\0\2\44\2\0\4\44\1\u011e\1\44" + - "\1\0\6\44\2\0\32\44\1\u011e\36\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\43\44" + - "\1\u0109\7\44\1\u0109\15\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\3\44\1\205\31\44" + - "\1\205\33\44\1\0\1\44\1\0\2\44\2\0\3\44" + - "\1\u0193\2\44\1\0\6\44\2\0\31\44\1\u0193\37\44" + - "\1\0\1\44\1\0\2\44\2\0\1\44\1\u011e\4\44" + - "\1\0\6\44\2\0\30\44\1\u011e\40\44\1\0\1\44" + - "\1\0\2\44\2\0\1\44\1\u0109\4\44\1\0\6\44" + - "\2\0\30\44\1\u0109\40\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\33\44\1\u01d6\16\44" + - "\1\u01d6\16\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\u01d7\3\44\1\0\6\44\2\0\1\44\1\u01d7\67\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\15\44\1\u01d8\15\44\1\u0199\15\44\1\u01d8\1\u0199" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\40\44\1\u01d9\14\44\1\u01d9\13\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\37\44\1\u0109\24\44\1\u0109\4\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\3\44\1\u01da" + - "\31\44\1\u01da\33\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\33\44\1\u01db\16\44\1\u01db" + - "\16\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\34\44\1\256\17\44\1\256\14\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\43\44\1\u01dc\7\44\1\u01dc\15\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\13\44\2\u01dd" + - "\54\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\1\u0199\40\44\1\u0199\27\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\33\44" + - "\1\u01de\16\44\1\u01de\16\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\3\44\1\261\31\44" + - "\1\261\33\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\15\44\1\u01df\33\44\1\u01df\17\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\40\44\1\u01e0\14\44\1\u01e0\13\44\1\0\1\44" + - "\1\0\2\44\2\0\2\44\1\u0109\3\44\1\0\6\44" + - "\2\0\1\44\1\u0109\67\44\1\0\1\44\1\0\2\44" + - "\2\0\5\44\1\u01e1\1\0\6\44\2\0\2\44\1\u01e1" + - "\66\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\3\44\1\u01e2\31\44\1\u01e2\33\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\200\4\44\1\0" + - "\6\44\2\0\30\44\1\200\40\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\u011e" + - "\33\44\1\u011e\17\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\15\44\1\u01e3\33\44\1\u01e3" + - "\17\44\1\0\1\44\1\0\2\44\2\0\3\44\1\u01e4" + - "\2\44\1\0\6\44\2\0\31\44\1\u01e4\37\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\1\u01e5\40\44\1\u01e5\27\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\34\44\1\205\17\44" + - "\1\205\14\44\1\0\1\44\1\0\2\44\2\0\3\44" + - "\1\u01e6\2\44\1\0\6\44\2\0\31\44\1\u01e6\37\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\u01e7\1\0" + - "\6\44\2\0\2\44\1\u01e7\7\44\1\u01e8\27\44\1\u01e9" + - "\13\44\1\u01e8\4\44\1\u01e9\5\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\256" + - "\33\44\1\256\15\44\13\0\1\u01ea\15\0\1\u01ea\65\0" + - "\1\104\10\0\1\104\1\u01eb\4\104\1\0\1\104\4\u01eb" + - "\1\104\2\0\4\104\2\u01eb\1\0\1\104\1\0\2\104" + - "\3\u01eb\11\0\1\104\1\u01eb\2\104\1\u01eb\4\104\1\u01eb" + - "\6\104\1\u01eb\1\104\2\u01eb\2\104\1\u01eb\12\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\3\113\1\u01ec\2\113" + - "\1\0\1\113\1\0\5\113\11\0\40\113\2\u0148\1\0" + - "\7\u0148\1\u01ed\6\u0148\4\u01ed\1\u0148\1\312\5\u0148\2\u01ed" + - "\5\u0148\3\u01ed\12\u0148\1\u01ed\2\u0148\1\u01ed\4\u0148\1\u01ed" + - "\6\u0148\1\u01ed\1\u0148\2\u01ed\2\u0148\1\u01ed\11\u0148\2\u014d" + - "\1\0\22\u014d\1\u01ae\73\u014d\1\0\7\u014d\1\u01ee\6\u014d" + - "\4\u01ee\1\u01ae\1\u014d\1\u01af\4\u014d\2\u01ee\5\u014d\3\u01ee" + - "\12\u014d\1\u01ee\2\u014d\1\u01ee\4\u014d\1\u01ee\6\u014d\1\u01ee" + - "\1\u014d\2\u01ee\2\u014d\1\u01ee\11\u014d\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\1\113\1\u01ef\4\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\1\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\6\113\1\0\1\113\1\0" + - "\5\113\11\0\1\u01f0\37\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\30\113\1\u01f1\7\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\25\113\1\u01f2\12\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\33\113\1\u0166\4\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\24\113\1\347\13\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01f3\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\2\113\1\u01f4\3\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\27\113\1\u01f5\10\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\2\113\1\u01ba\3\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\2\113\1\u01f6\35\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\31\113\1\u01f7\6\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\2\113\1\u01f8\35\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\2\113\1\347\3\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\113\1\u01f9\4\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01fa\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\3\113\1\u01fb\2\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\6\113\1\u01cd\31\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\113\1\u01c1\4\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01fc\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01d2\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01fd\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\22\113\1\u01fe\15\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\23\113\1\u01ff\14\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\3\113\1\u0200\34\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\3\113\1\u0201\2\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\113\1\u0202\4\113\1\0\1\113" + - "\1\0\5\113\11\0\40\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\6\113\1\0\1\113\1\0\5\113" + - "\11\0\34\113\1\u0203\3\113\1\104\10\0\6\113\1\0" + - "\5\113\1\274\2\0\1\u0204\5\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\u0166\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\27\113\1\u015b\10\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\2\113\1\370\3\113\1\0\1\113\1\0" + - "\5\113\11\0\40\113\11\0\6\155\1\0\5\155\3\0" + - "\6\155\3\0\5\155\11\0\3\155\1\u0205\34\155\2\44" + - "\1\0\1\44\1\0\2\44\2\0\1\67\5\44\1\0" + - "\6\44\2\0\27\44\1\67\41\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\34\44\1\u0206" + - "\17\44\1\u0206\14\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\3\44\1\u011e\31\44\1\u011e" + - "\33\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\15\44\1\u0207\33\44\1\u0207\17\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\u0208\1\0\6\44" + - "\2\0\2\44\1\u0208\66\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\u0209\3\44\1\0\6\44\2\0\1\44" + - "\1\u0209\67\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\44\44\1\u020a\24\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\34\44" + - "\1\u01d8\17\44\1\u01d8\14\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\37\44\1\u020b\24\44" + - "\1\u020b\4\44\1\0\1\44\1\0\2\44\2\0\1\u01a0" + - "\5\44\1\0\6\44\2\0\27\44\1\u01a0\41\44\1\0" + - "\1\44\1\0\2\44\2\0\1\u020c\5\44\1\0\6\44" + - "\2\0\27\44\1\u020c\41\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\36\44\1\u0129\22\44" + - "\1\u0129\7\44\1\0\1\44\1\0\2\44\2\0\1\u01d6" + - "\5\44\1\0\6\44\2\0\27\44\1\u01d6\41\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\u020d\4\44\1\0" + - "\6\44\2\0\30\44\1\u020d\40\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\15\44\1\u0109" + - "\33\44\1\u0109\17\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\12\44\1\u01d6\43\44\1\u01d6" + - "\12\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\15\44\1\u020e\33\44\1\u020e\17\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\225\2\44\1\0" + - "\6\44\2\0\31\44\1\225\37\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\u020f\3\44\1\0\6\44\2\0" + - "\1\44\1\u020f\65\44\14\0\1\u0210\44\0\1\u0210\35\0" + - "\1\104\10\0\1\104\1\u0211\4\104\1\0\1\104\4\u0211" + - "\1\104\2\0\4\104\2\u0211\1\0\1\104\1\0\2\104" + - "\3\u0211\11\0\1\104\1\u0211\2\104\1\u0211\4\104\1\u0211" + - "\6\104\1\u0211\1\104\2\u0211\2\104\1\u0211\12\104\10\0" + - "\6\113\1\0\5\113\1\274\2\0\6\113\1\0\1\113" + - "\1\0\5\113\11\0\2\113\1\u0212\35\113\2\u0148\1\0" + - "\7\u0148\1\u0213\6\u0148\4\u0213\1\u0148\1\312\5\u0148\2\u0213" + - "\5\u0148\3\u0213\12\u0148\1\u0213\2\u0148\1\u0213\4\u0148\1\u0213" + - "\6\u0148\1\u0213\1\u0148\2\u0213\2\u0148\1\u0213\11\u0148\2\u014d" + - "\1\0\7\u014d\1\u0214\6\u014d\4\u0214\1\u01ae\1\u014d\1\u01af" + - "\4\u014d\2\u0214\5\u014d\3\u0214\12\u014d\1\u0214\2\u014d\1\u0214" + - "\4\u014d\1\u0214\6\u014d\1\u0214\1\u014d\2\u0214\2\u014d\1\u0214" + - "\11\u014d\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\3\113\1\347\2\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\2\113\1\u0215" + - "\35\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\3\113\1\347\1\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\23\113\1\u0216" + - "\14\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\2\113\1\u0217" + - "\35\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\27\113\1\u0218" + - "\10\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\1\113\1\347" + - "\36\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\1\113\1\u0219\4\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\3\113\1\u021a\2\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\3\113\1\u021b\1\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\3\113\1\u021c\2\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\2\113\1\u021d" + - "\35\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\35\113\1\u021e" + - "\2\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\1\113\1\u021f" + - "\36\113\1\104\10\0\3\113\1\u0220\2\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\2\113\1\u0221" + - "\2\113\11\0\40\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\34\113\1\u0166\3\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\22\113\1\u01cd\15\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\26\113\1\u0155\11\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\23\113\1\u0222\14\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\34\113\1\u0160\3\113\1\104\10\0\6\113\1\0\5\113" + - "\1\274\2\0\6\113\1\0\1\113\1\0\5\113\11\0" + - "\27\113\1\u01c1\10\113\11\0\6\155\1\0\5\155\3\0" + - "\2\155\1\u0223\3\155\3\0\5\155\11\0\40\155\2\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\1\u0106\40\44\1\u0106\27\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\11\44\1\67" + - "\53\44\1\67\3\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\15\44\1\u0224\33\44\1\u0224" + - "\17\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\15\44\1\u012f\33\44\1\u012f\17\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\1\u0225\40\44\1\u0225\27\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\15\44\1\u01d6\33\44" + - "\1\u01d6\17\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\34\44\1\172\17\44\1\172\14\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\34\44\1\u013e\17\44\1\u013e\14\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\37\44" + - "\1\u0226\24\44\1\u0226\4\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\261\2\44\1\0\6\44\2\0\31\44" + - "\1\261\35\44\15\0\1\u0227\44\0\1\u0227\34\0\1\104" + - "\10\0\1\104\1\113\4\104\1\0\1\104\4\113\1\104" + - "\2\0\4\104\2\113\1\0\1\104\1\0\2\104\3\113" + - "\11\0\1\104\1\113\2\104\1\113\4\104\1\113\6\104" + - "\1\113\1\104\2\113\2\104\1\113\12\104\10\0\6\113" + - "\1\0\5\113\1\274\2\0\2\113\1\u0218\3\113\1\0" + - "\1\113\1\0\5\113\11\0\40\113\2\u0148\1\0\7\u0148" + - "\1\307\6\u0148\4\307\1\u0148\1\312\5\u0148\2\307\5\u0148" + - "\3\307\12\u0148\1\307\2\u0148\1\307\4\u0148\1\307\6\u0148" + - "\1\307\1\u0148\2\307\2\u0148\1\307\11\u0148\2\u014d\1\0" + - "\7\u014d\1\121\6\u014d\4\121\1\u01ae\1\u014d\1\u01af\4\u014d" + - "\2\121\5\u014d\3\121\12\u014d\1\121\2\u014d\1\121\4\u014d" + - "\1\121\6\u014d\1\121\1\u014d\2\121\2\u014d\1\121\11\u014d" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\5\113\11\0\22\113\1\u0228\15\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\3\113" + - "\1\u01ba\2\113\1\0\1\113\1\0\5\113\11\0\40\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\5\113\11\0\25\113\1\u01ef\12\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\5\113\11\0\32\113\1\347\5\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\5\113\11\0\25\113\1\u0229\12\113" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\1\u0166" + - "\5\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\23\113\1\u022a\14\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\1\113\1\u0156\36\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\2\113\1\u0200" + - "\3\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\22\113\1\u022b\15\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\2\113\1\u022c" + - "\3\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\3\113\1\u022d" + - "\2\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\27\113\1\u022e\10\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\1\113\1\u01c1\36\113\2\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\11\44\1\u011e\53\44\1\u011e\3\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\34\44" + - "\1\174\17\44\1\174\14\44\1\0\1\44\1\0\2\44" + - "\2\0\4\44\1\u022f\1\44\1\0\6\44\2\0\32\44" + - "\1\u022f\34\44\16\0\1\u0230\13\0\1\u0230\64\0\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\3\113\1\u01c1" + - "\2\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\3\113\1\u0231" + - "\2\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\1\113\1\u0166\36\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\3\113\1\u0232" + - "\2\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\22\113\1\u0181\15\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\2\113\1\u01cd" + - "\3\113\1\0\1\113\1\0\5\113\11\0\40\113\1\104" + - "\10\0\6\113\1\0\5\113\1\274\2\0\6\113\1\0" + - "\1\113\1\0\5\113\11\0\25\113\1\u0233\12\113\2\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\12\44\1\u0234\43\44\1\u0234\10\44\17\0\1\u0235" + - "\77\0\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\2\113\1\u0236" + - "\35\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\2\113\1\u0155\3\113\1\0\1\113\1\0\5\113\11\0" + - "\40\113\1\104\10\0\6\113\1\0\5\113\1\274\2\0" + - "\6\113\1\0\1\113\1\0\5\113\11\0\23\113\1\u022d" + - "\14\113\2\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\33\44\1\174\16\44\1\174\14\44" + - "\1\104\10\0\6\113\1\0\5\113\1\274\2\0\6\113" + - "\1\0\1\113\1\0\5\113\11\0\37\113\1\u022c"; - - private static int[] zzUnpackTrans() { - int[] result = new int[40606]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\131\0\262\0\u010b\0\u0164\0\u01bd\0\u0216\0\u026f"+ + "\0\u02c8\0\u0321\0\u037a\0\u03d3\0\u042c\0\u0485\0\u04de\0\u0537"+ + "\0\u0590\0\u05e9\0\u0642\0\u069b\0\u06f4\0\u074d\0\u07a6\0\u07ff"+ + "\0\u0858\0\u08b1\0\u090a\0\u0963\0\u09bc\0\u0a15\0\u0a6e\0\u0ac7"+ + "\0\u0b20\0\u0b79\0\u0a15\0\u0bd2\0\u0c2b\0\u0c84\0\u0cdd\0\u0d36"+ + "\0\u0a15\0\u0d8f\0\u0de8\0\u0a15\0\u0a15\0\u0e41\0\u0e9a\0\u0a15"+ + "\0\u0ef3\0\u0a15\0\u0a15\0\u0a15\0\u0f4c\0\u0a15\0\u0fa5\0\u0ffe"+ + "\0\u1057\0\u10b0\0\u1109\0\u1162\0\u11bb\0\u1214\0\u126d\0\u12c6"+ + "\0\u131f\0\u1378\0\u13d1\0\u142a\0\u1483\0\u14dc\0\u1535\0\u158e"+ + "\0\u15e7\0\u0f4c\0\u1640\0\u0a15\0\u1699\0\u0a15\0\u16f2\0\u0a15"+ + "\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u174b\0\u0a15"+ + "\0\u17a4\0\u17fd\0\u0a15\0\u0a15\0\u1856\0\u18af\0\u1908\0\u1961"+ + "\0\u19ba\0\u1a13\0\u1a6c\0\u1ac5\0\u0a15\0\u1b1e\0\u1b77\0\u1bd0"+ + "\0\u0a15\0\u1c29\0\u1c82\0\u1cdb\0\u1d34\0\u1d8d\0\u1de6\0\u1e3f"+ + "\0\u1e98\0\u1ef1\0\u1f4a\0\u1fa3\0\u1ffc\0\u2055\0\u20ae\0\u2107"+ + "\0\u2160\0\u0a15\0\u21b9\0\u2212\0\u0a15\0\u226b\0\u0a15\0\u0a15"+ + "\0\u22c4\0\u231d\0\u0a15\0\u22c4\0\u0a15\0\u2376\0\u0a15\0\u23cf"+ + "\0\u2428\0\u2481\0\u24da\0\u2533\0\u258c\0\u0a15\0\u25e5\0\u263e"+ + "\0\u2697\0\u26f0\0\u0a15\0\u0a15\0\u2749\0\u0a15\0\u27a2\0\u27fb"+ + "\0\u2854\0\u28ad\0\u0a15\0\u2906\0\u0a15\0\u0a15\0\u0a15\0\u2749"+ + "\0\u27a2\0\u295f\0\u29b8\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u2749"+ + "\0\u0a15\0\u2a11\0\u2a6a\0\u2ac3\0\u2b1c\0\u2b75\0\u2bce\0\u0a15"+ + "\0\u0a15\0\u0a15\0\u0a15\0\u2c27\0\u0a15\0\u0a15\0\u2c80\0\u0a15"+ + "\0\u2cd9\0\u2d32\0\u0a15\0\u22c4\0\u2d8b\0\u0a15\0\u2de4\0\u0a15"+ + "\0\u2e3d\0\u0a15\0\u2e96\0\u2eef\0\u2f48\0\u2fa1\0\u0a15\0\u0a15"+ + "\0\u2ffa\0\u3053\0\u30ac\0\u3105\0\u315e\0\u0a15\0\u31b7\0\u3210"+ + "\0\u3269\0\u32c2\0\u331b\0\u3374\0\u33cd\0\u3426\0\u347f\0\u34d8"+ + "\0\u3531\0\u358a\0\u35e3\0\u363c\0\u3695\0\u36ee\0\u3747\0\u37a0"+ + "\0\u37f9\0\u3852\0\u38ab\0\u3904\0\u395d\0\u39b6\0\u3a0f\0\u3a68"+ + "\0\u3ac1\0\u3b1a\0\u3b73\0\u3bcc\0\u3c25\0\u3c7e\0\u3cd7\0\u3d30"+ + "\0\u3d89\0\u3de2\0\u3e3b\0\u3e94\0\u3eed\0\u3f46\0\u3f9f\0\u3ff8"+ + "\0\u4051\0\u40aa\0\u4103\0\u415c\0\u41b5\0\u420e\0\u4267\0\u42c0"+ + "\0\u4319\0\u4372\0\u43cb\0\u4424\0\u447d\0\u44d6\0\u452f\0\u4588"+ + "\0\u45e1\0\u463a\0\u4693\0\u46ec\0\u4745\0\u479e\0\u47f7\0\u4850"+ + "\0\u48a9\0\u0a15\0\u1b1e\0\u4902\0\u495b\0\u0a15\0\u49b4\0\u4a0d"+ + "\0\u495b\0\u4a66\0\u4abf\0\u4b18\0\u4b71\0\u4b71\0\u4bca\0\u4b71"+ + "\0\u4c23\0\u4c7c\0\u4cd5\0\u4d2e\0\u4d87\0\u4de0\0\u4e39\0\u18af"+ + "\0\u4e92\0\u4eeb\0\u4f44\0\u4f9d\0\u4ff6\0\u504f\0\u50a8\0\u5101"+ + "\0\u515a\0\u51b3\0\u520c\0\u5265\0\u52be\0\u5317\0\u5370\0\u53c9"+ + "\0\u5422\0\u547b\0\u54d4\0\u552d\0\u5586\0\u55df\0\u5638\0\u5691"+ + "\0\u56ea\0\u5743\0\u579c\0\u57f5\0\u584e\0\u58a7\0\u5900\0\u5959"+ + "\0\u59b2\0\u5a0b\0\u5a64\0\u5abd\0\u5b16\0\u5b6f\0\u5bc8\0\u5c21"+ + "\0\u5c7a\0\u5cd3\0\u5d2c\0\u5d85\0\u0a15\0\u5dde\0\u5e37\0\u5e90"+ + "\0\u0a15\0\u5ee9\0\u5f42\0\u5f9b\0\u5ff4\0\u604d\0\u60a6\0\u60ff"+ + "\0\u6158\0\u61b1\0\u620a\0\u0a15\0\u6263\0\u62bc\0\u6315\0\u636e"+ + "\0\u63c7\0\u6420\0\u6479\0\u64d2\0\u652b\0\u6584\0\u65dd\0\u6636"+ + "\0\u668f\0\u66e8\0\u6741\0\u0a15\0\u679a\0\u67f3\0\u684c\0\u68a5"+ + "\0\u68fe\0\u2b75\0\u6957\0\u0a15\0\u0a15\0\u0a15\0\u0a15\0\u2e96"+ + "\0\u69b0\0\u6a09\0\u6a62\0\u0a15\0\u6abb\0\u6b14\0\u6b6d\0\u6bc6"+ + "\0\u6c1f\0\u6c78\0\u6cd1\0\u6d2a\0\u6d83\0\u6ddc\0\u6e35\0\u6e8e"+ + "\0\u6ee7\0\u6f40\0\u6f99\0\u6ff2\0\u704b\0\u70a4\0\u70fd\0\u7156"+ + "\0\u71af\0\u7208\0\u7261\0\u72ba\0\u7313\0\u736c\0\u73c5\0\u741e"+ + "\0\u7477\0\u74d0\0\u7529\0\u7582\0\u75db\0\u7634\0\u3b1a\0\u768d"+ + "\0\u76e6\0\u773f\0\u7798\0\u77f1\0\u784a\0\u78a3\0\u78fc\0\u7955"+ + "\0\u79ae\0\u7a07\0\u7a60\0\u7ab9\0\u7b12\0\u7b6b\0\u12c6\0\u7bc4"+ + "\0\u7c1d\0\u7c76\0\u7ccf\0\u7d28\0\u7d81\0\u7dda\0\u7e33\0\u7e8c"+ + "\0\u7ee5\0\u7f3e\0\u7f97\0\u7ff0\0\u8049\0\u80a2\0\u80fb\0\u8154"+ + "\0\u81ad\0\u8206\0\u825f\0\u82b8\0\u8311\0\u836a\0\u83c3\0\u4b71"+ + "\0\u841c\0\u8475\0\u84ce\0\u8527\0\u8580\0\u85d9\0\u8632\0\u868b"+ + "\0\u86e4\0\u873d\0\u8796\0\u87ef\0\u8848\0\u88a1\0\u88fa\0\u8953"+ + "\0\u89ac\0\u8a05\0\u8a5e\0\u8ab7\0\u8b10\0\u8b69\0\u18af\0\u8bc2"+ + "\0\u8c1b\0\u8c74\0\u8ccd\0\u8d26\0\u8d7f\0\u8dd8\0\u8e31\0\u8e8a"+ + "\0\u8ee3\0\u8f3c\0\u8f95\0\u8fee\0\u9047\0\u90a0\0\u90f9\0\u9152"+ + "\0\u91ab\0\u9204\0\u925d\0\u92b6\0\u930f\0\u9368\0\u93c1\0\u941a"+ + "\0\u9473\0\u94cc\0\u9525\0\u957e\0\u95d7\0\u9630\0\u9689\0\u96e2"+ + "\0\u973b\0\u9794\0\u97ed\0\u9846\0\u989f\0\u98f8\0\u9951\0\u99aa"+ + "\0\u9a03\0\u9a5c\0\u9ab5\0\u9b0e\0\u9b67\0\u9bc0\0\u9c19\0\u9c72"+ + "\0\u9ccb\0\u9d24\0\u9d7d\0\u9dd6\0\u9e2f\0\u9e88\0\u9ee1\0\u9f3a"+ + "\0\u9f93\0\u9fec\0\ua045\0\ua09e\0\ua0f7\0\ua150\0\ua1a9\0\ua202"+ + "\0\ua25b\0\ua2b4\0\u0a15\0\ua30d\0\ua366\0\ua3bf\0\ua418\0\ua471"+ + "\0\ua4ca\0\ua523\0\ua57c\0\ua5d5\0\ua62e\0\ua687\0\ua6e0\0\ua739"+ + "\0\ua792\0\ua7eb\0\ua844\0\ua89d\0\ua8f6\0\ua94f\0\ua9a8\0\uaa01"+ + "\0\uaa5a\0\uaab3\0\uab0c\0\uab65\0\u3c25\0\uabbe\0\u7529\0\uac17"+ + "\0\uac70\0\uacc9\0\uad22\0\uad7b\0\uadd4\0\uae2d\0\uae86\0\uaedf"+ + "\0\uaf38\0\uaf91\0\u0a15\0\uafea\0\ub043\0\ub09c\0\ub0f5\0\ub14e"+ + "\0\ub1a7\0\ub200\0\ub259\0\ub2b2\0\u18af\0\ub30b\0\ub364\0\ub3bd"+ + "\0\ub416\0\ub46f\0\ub4c8\0\u18af\0\ub521\0\ub57a\0\ub5d3\0\ub62c"+ + "\0\ub685\0\ub6de\0\ub737\0\ub790\0\ub7e9\0\ub842\0\ub89b\0\ub8f4"+ + "\0\ub94d\0\ub9a6\0\u18af\0\ub9ff\0\u18af\0\uba58\0\ubab1\0\ubb0a"+ + "\0\ubb63\0\u5e37\0\u0a15\0\ubbbc\0\ubc15\0\ubc6e\0\ubcc7\0\ubd20"+ + "\0\ubd79\0\ubdd2\0\ube2b\0\ube84\0\ubedd\0\ubf36\0\ubf8f\0\ubfe8"+ + "\0\uc041\0\u0a15\0\uc09a\0\uc0f3\0\uc14c\0\uc1a5\0\uc1fe\0\uc257"+ + "\0\uc2b0\0\uc309\0\uc362\0\uc3bb\0\uc414\0\uc46d\0\uc4c6\0\uc51f"+ + "\0\uc578\0\uc5d1\0\ua3bf\0\uc62a\0\uc683\0\uc6dc\0\uc735\0\uc78e"+ + "\0\uc7e7\0\uc840\0\uc899\0\uc8f2\0\uc94b\0\uc94b\0\uc9a4\0\uc9fd"+ + "\0\uca56\0\ucaaf\0\ucb08\0\ucb61\0\ucbba\0\ucc13\0\ucc6c\0\uccc5"+ + "\0\ucd1e\0\ucd77\0\ucdd0\0\uce29\0\uce82\0\ucedb\0\ucf34\0\ucf8d"+ + "\0\u87ef\0\ucfe6\0\ud03f\0\ud098\0\ud0f1\0\ud14a\0\ud1a3\0\ud1fc"+ + "\0\ud255\0\ud2ae\0\ud307\0\ud360\0\ud3b9\0\ud412\0\ud46b\0\ud4c4"+ + "\0\ud51d\0\ud576\0\ubcc7\0\ud5cf\0\ud628\0\ube2b\0\ud681\0\ud6da"+ + "\0\ud733\0\ud78c\0\ud7e5\0\ud83e\0\ud897\0\ud8f0\0\ud949\0\ud9a2"+ + "\0\ud9fb\0\uda54\0\udaad\0\udb06\0\udb5f\0\u2f48\0\udbb8\0\udc11"+ + "\0\udc6a\0\udcc3\0\udd1c\0\udd75\0\uddce\0\ude27\0\ude80\0\uded9"+ + "\0\udf32\0\udf8b\0\udfe4\0\ue03d\0\ue096\0\ue0ef\0\ue148\0\u18af"+ + "\0\ue1a1\0\ue1fa\0\ue253\0\ue2ac\0\ue305\0\ue35e\0\ue3b7\0\ue410"+ + "\0\ue469\0\ue4c2\0\ue51b\0\ue574\0\ue5cd\0\ue626\0\ue67f\0\ue6d8"+ + "\0\ue731\0\ue78a\0\ue7e3\0\ue83c\0\ue895\0\ue8ee\0\u2f48\0\ue947"+ + "\0\ue9a0\0\ue9f9\0\uea52\0\ueaab\0\ueb04\0\ueb5d\0\uebb6\0\uec0f"+ + "\0\uec68\0\uecc1\0\ued1a\0\ued73\0\uedcc\0\uee25\0\uee7e\0\ueed7"+ + "\0\uef30\0\uef89\0\uefe2\0\uf03b\0\uf094\0\uf0ed\0\uf146\0\uf19f"+ + "\0\uf1f8\0\uf251\0\u0a15\0\uf2aa\0\uf303\0\uf35c\0\uf3b5\0\uf40e"+ + "\0\u0a15\0\uf467\0\u0a15\0\u0a15\0\uf4c0\0\uf519\0\uf572\0\uf5cb"+ + "\0\uf624\0\uf67d\0\u0a15"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[819]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\34\1\35\1\36\1\37\1\40\1\41\123\34\2\42"+ + "\1\43\26\42\1\44\33\42\1\45\5\42\1\46\15\42"+ + "\1\47\17\42\2\50\1\51\47\50\1\52\56\50\2\53"+ + "\1\54\14\53\1\55\111\53\1\56\1\57\1\0\1\56"+ + "\1\40\2\56\1\60\1\61\6\56\1\62\26\56\1\63"+ + "\41\56\1\64\20\56\2\65\1\0\1\65\1\66\2\65"+ + "\2\66\1\67\1\70\1\71\1\72\1\73\1\74\1\66"+ + "\1\65\1\75\1\76\3\65\1\77\3\65\1\100\6\65"+ + "\1\101\4\65\1\66\7\65\1\72\2\65\1\71\1\102"+ + "\1\74\1\103\1\104\1\70\1\75\1\105\1\106\1\67"+ + "\1\101\1\65\1\73\1\76\1\107\1\110\1\111\1\77"+ + "\5\65\1\66\1\65\1\106\1\102\1\103\1\107\1\105"+ + "\1\100\1\65\1\110\1\112\1\111\1\104\4\65\7\113"+ + "\1\114\121\113\110\115\1\114\20\115\1\56\1\57\1\0"+ + "\1\56\1\40\2\56\1\116\1\117\6\56\1\120\26\56"+ + "\1\63\41\56\1\121\20\56\7\113\1\122\121\113\110\115"+ + "\1\122\20\115\1\56\1\57\1\0\1\56\1\40\2\56"+ + "\1\123\1\117\6\56\1\124\26\56\1\63\41\56\1\125"+ + "\20\56\7\113\1\126\121\113\110\115\1\126\20\115\1\127"+ + "\1\40\1\130\1\131\1\40\1\132\1\133\1\134\1\135"+ + "\3\136\1\137\2\136\1\140\4\136\1\141\1\142\1\136"+ + "\1\141\1\136\1\143\1\144\1\145\2\127\1\136\1\146"+ + "\2\136\1\147\1\150\1\151\1\133\4\146\3\63\1\152"+ + "\1\153\1\154\1\151\1\155\1\136\1\156\1\157\1\136"+ + "\1\160\1\161\1\162\1\163\1\164\1\165\1\136\1\166"+ + "\1\167\2\136\1\170\1\171\1\127\2\151\1\136\1\151"+ + "\1\172\1\173\2\136\1\174\10\136\1\141\2\136\1\175"+ + "\2\176\1\177\4\176\1\200\25\176\1\201\73\176\2\202"+ + "\1\203\32\202\1\204\52\202\1\205\20\202\2\206\1\207"+ + "\1\210\33\206\1\211\25\206\1\212\5\206\1\213\15\206"+ + "\1\214\17\206\2\215\1\216\1\217\61\215\1\220\5\215"+ + "\1\221\15\215\1\222\17\215\1\223\1\40\1\224\1\225"+ + "\1\40\1\223\1\151\1\226\1\227\6\230\1\63\4\230"+ + "\2\223\1\230\1\223\3\230\1\223\1\231\1\223\1\63"+ + "\3\230\1\63\1\230\1\223\1\133\2\63\3\223\1\232"+ + "\2\63\2\230\1\233\22\230\1\234\2\151\1\230\1\151"+ + "\1\235\14\230\1\223\2\230\1\223\1\236\1\40\1\237"+ + "\1\240\1\40\3\236\1\241\6\242\1\236\4\242\2\236"+ + "\1\242\1\236\3\242\4\236\1\243\2\242\2\236\1\244"+ + "\6\236\1\245\2\236\2\242\1\236\22\242\3\236\1\242"+ + "\2\236\14\242\1\236\2\242\1\236\1\246\1\40\1\247"+ + "\1\250\1\40\1\246\1\251\1\226\1\252\6\253\1\246"+ + "\4\253\2\254\1\253\1\254\1\253\1\255\1\253\1\246"+ + "\1\256\1\253\2\246\2\253\1\246\1\133\1\244\1\133"+ + "\3\246\1\257\4\246\2\253\1\246\22\253\1\246\1\260"+ + "\1\261\1\253\1\246\1\235\14\253\1\254\2\253\1\246"+ + "\2\176\1\262\4\176\1\263\25\176\1\264\73\176\2\202"+ + "\1\265\32\202\1\264\52\202\1\266\20\202\2\267\1\270"+ + "\34\267\1\271\25\267\1\212\5\267\1\213\15\267\1\214"+ + "\17\267\2\272\1\273\32\272\1\274\1\275\71\272\1\276"+ + "\2\277\1\300\33\277\1\301\5\277\1\302\64\277\2\34"+ + "\4\0\124\34\1\35\2\0\1\40\1\0\123\34\141\0"+ + "\1\303\1\304\5\305\1\0\10\305\2\0\1\305\5\0"+ + "\2\305\7\0\1\306\1\307\3\0\2\305\1\0\11\305"+ + "\1\304\10\305\3\0\1\305\2\0\17\305\2\0\1\40"+ + "\2\0\1\40\124\0\4\41\1\0\1\41\1\310\122\41"+ + "\2\42\1\0\26\42\1\0\33\42\1\0\5\42\1\0"+ + "\15\42\1\0\17\42\31\0\1\311\162\0\1\312\123\0"+ + "\1\313\4\0\1\314\156\0\1\315\17\0\2\50\1\0"+ + "\47\50\1\0\56\50\17\0\1\316\111\0\2\53\1\0"+ + "\14\53\1\0\111\53\2\56\1\0\1\56\1\0\2\56"+ + "\2\0\6\56\1\0\26\56\1\0\41\56\1\0\21\56"+ + "\1\57\1\0\1\56\1\40\2\56\2\0\6\56\1\0"+ + "\26\56\1\0\41\56\1\0\20\56\17\0\1\62\111\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\41\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\65\1\317\2\65\1\320\1\321\1\0"+ + "\2\65\1\322\7\65\1\323\13\65\1\0\13\65\1\324"+ + "\1\321\2\65\1\317\2\65\1\325\3\65\1\320\1\322"+ + "\1\326\10\65\1\0\1\65\1\325\1\324\1\65\1\326"+ + "\1\65\1\323\13\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\327\2\65\1\0\2\65\1\330\23\65\1\0"+ + "\7\65\1\327\3\65\1\331\6\65\1\332\4\65\1\330"+ + "\11\65\1\0\1\65\1\332\1\331\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\12\65\1\333\13\65"+ + "\1\0\41\65\1\0\6\65\1\333\13\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\334\5\65\1\0\1\65\1\335"+ + "\17\65\1\336\4\65\1\0\15\65\1\337\2\65\1\335"+ + "\2\65\1\334\1\336\3\65\1\340\10\65\1\0\3\65"+ + "\1\337\1\340\15\65\1\0\1\65\1\0\2\65\2\0"+ + "\2\65\1\341\3\65\1\0\1\65\1\342\24\65\1\0"+ + "\12\65\1\341\5\65\1\342\1\65\1\343\16\65\1\0"+ + "\1\65\1\343\20\65\1\0\1\65\1\0\2\65\2\0"+ + "\2\65\1\112\1\344\1\65\1\112\1\0\2\65\1\345"+ + "\3\65\1\346\12\65\1\347\4\65\1\0\7\65\1\344"+ + "\2\65\1\112\1\65\1\112\1\65\1\350\2\65\1\112"+ + "\1\351\1\65\1\347\2\65\1\345\3\65\1\346\5\65"+ + "\1\0\1\65\1\351\3\65\1\112\5\65\1\350\6\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\352\2\65"+ + "\1\0\2\65\1\353\23\65\1\0\7\65\1\352\12\65"+ + "\1\354\4\65\1\353\11\65\1\0\1\65\1\354\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\30\65\1\355\1\65\1\356\6\65\1\0\4\65"+ + "\1\355\5\65\1\356\7\65\1\0\1\65\1\0\2\65"+ + "\2\0\2\65\1\112\1\340\2\65\1\0\1\65\1\357"+ + "\10\65\1\360\13\65\1\0\7\65\1\340\1\361\1\65"+ + "\1\112\1\362\4\65\1\357\1\363\1\364\16\65\1\0"+ + "\1\65\1\364\1\362\2\65\1\363\1\360\1\361\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\1\65"+ + "\1\112\24\65\1\0\20\65\1\112\20\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\365\1\366"+ + "\2\65\1\0\26\65\1\0\7\65\1\366\2\65\1\365"+ + "\1\367\25\65\1\0\2\65\1\367\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\4\65\1\370\1\65\1\0\1\65"+ + "\1\112\4\65\1\371\3\65\1\372\13\65\1\0\20\65"+ + "\1\112\5\65\1\370\4\65\1\371\5\65\1\0\6\65"+ + "\1\372\13\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\373\23\65\1\0\13\65\1\374\6\65"+ + "\1\375\4\65\1\373\11\65\1\0\1\65\1\375\1\374"+ + "\17\65\1\0\1\65\1\0\2\65\2\0\2\65\1\112"+ + "\2\65\1\376\1\0\2\65\1\377\23\65\1\0\12\65"+ + "\1\112\1\65\1\376\12\65\1\377\11\65\1\0\14\65"+ + "\1\112\5\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\u0100\1\65\1\112\1\0\1\65\1\112\1\u0101\16\65"+ + "\1\u0102\4\65\1\0\7\65\1\u0100\4\65\1\112\3\65"+ + "\2\112\1\u0103\1\65\1\u0102\2\65\1\u0101\11\65\1\0"+ + "\1\65\1\u0103\3\65\1\112\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\u0104\1\u0105\1\u0106\1\65\1\u0107\1\65"+ + "\1\0\6\65\1\u0108\3\65\1\u0109\13\65\1\0\12\65"+ + "\1\u0106\4\65\1\u0105\1\65\1\u010a\1\65\1\u0104\2\65"+ + "\1\u0107\4\65\1\u0108\5\65\1\0\5\65\1\u010a\1\u0109"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u010b\7\65\1\u010c\13\65\1\0\22\65\1\u010d"+ + "\4\65\1\u010b\11\65\1\0\1\65\1\u010d\4\65\1\u010c"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u010e\3\65\1\u010f\17\65\1\0\27\65\1\u010e"+ + "\3\65\1\u010f\5\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\3\65\1\u0110\2\65\1\0\26\65\1\0"+ + "\7\65\1\u0110\12\65\1\u0111\16\65\1\0\1\65\1\u0111"+ + "\16\65\7\113\1\0\121\113\110\115\1\0\20\115\17\0"+ + "\1\u0112\111\0\1\127\10\0\6\127\1\0\11\127\1\0"+ + "\1\127\1\0\3\127\1\0\2\127\14\0\2\127\1\0"+ + "\23\127\2\0\1\127\2\0\17\127\4\0\1\u0113\4\0"+ + "\1\u0114\35\0\1\63\67\0\1\63\40\0\1\63\62\0"+ + "\10\u0115\1\u0116\24\u0115\1\u0117\1\u0115\1\u0118\6\u0115\1\u0119"+ + "\62\u0115\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u011b\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\20\0\1\u011c\26\0\1\63\62\0\1\u011d\10\0\6\u011d"+ + "\1\0\1\u011d\1\u011e\1\u011f\1\u011d\2\141\1\u011d\1\141"+ + "\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120"+ + "\1\0\1\u0121\12\0\2\u011d\1\0\6\u011d\1\u011e\1\u0120"+ + "\2\u011d\1\u0120\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0"+ + "\5\u011d\1\u0120\6\u011d\1\141\2\u011d\1\0\1\u011d\10\0"+ + "\6\u011d\1\0\1\u011d\1\u011e\1\u011f\1\u011d\1\u0122\1\u0123"+ + "\1\u011d\1\u0123\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0"+ + "\1\u0124\1\u0120\1\0\1\u0121\12\0\2\u011d\1\0\6\u011d"+ + "\1\u011e\1\u0120\2\u011d\1\u0120\2\u011d\1\u011f\5\u011d\2\0"+ + "\1\u0124\2\0\5\u011d\1\u0120\6\u011d\1\u0123\2\u011d\32\0"+ + "\1\63\14\0\1\63\62\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u0125\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\47\0\1\63\124\0\1\63"+ + "\3\0\1\63\106\0\2\u0121\1\0\1\u0121\75\0\1\u0121"+ + "\51\0\1\63\6\0\1\63\53\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u0126\5\136"+ + "\1\u0127\1\u0128\3\136\1\u0129\3\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u012a\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\15\136\1\u012b\4\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u012c\3\136\1\u012d"+ + "\6\136\1\u012e\6\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u012f"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u0130\4\136\1\u0131\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\1\136\1\u0132\2\136\1\u0133"+ + "\1\136\1\u0134\1\136\1\u0135\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0136\13\136\1\u0137\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u0138"+ + "\13\136\1\u0139\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\21\136\1\u013a\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u013b"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u013c\1\136\1\u013d\6\136\1\u013e\6\136"+ + "\1\127\2\0\1\136\2\0\1\u013f\16\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u0140\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\u0141\1\136\1\0"+ + "\1\136\1\u0142\4\136\1\u0143\1\136\1\u0144\11\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\u0145\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u0146\7\136\1\u0147"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u0148\2\136\1\u0149\1\136\1\u014a\1\u014b\6\136\1\u014c"+ + "\1\136\1\127\2\0\1\u014d\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\1\136"+ + "\1\u014e\6\136\1\u0142\11\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\u014f\1\u0150\11\136\1\u0151\6\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\u0152\1\136\1\0\4\136\1\u0153"+ + "\15\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u0154\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\2\176\1\0\4\176\1\0\25\176\1\0\73\176\2\u0155"+ + "\1\0\27\u0155\1\u0156\53\u0155\1\u0157\22\u0155\2\202\1\0"+ + "\32\202\1\0\52\202\1\0\20\202\2\206\2\0\33\206"+ + "\1\0\25\206\1\0\5\206\1\0\15\206\1\0\17\206"+ + "\10\0\1\u0158\130\0\1\u0159\203\0\1\u015a\123\0\1\u015b"+ + "\4\0\1\u015c\156\0\1\u015d\17\0\2\215\2\0\61\215"+ + "\1\0\5\215\1\0\15\215\1\0\17\215\10\0\1\u015e"+ + "\203\0\1\u015f\123\0\1\u0160\4\0\1\u0161\156\0\1\u0162"+ + "\27\0\1\u0163\157\0\1\u0164\102\0\6\230\1\0\13\230"+ + "\5\0\2\230\1\0\1\230\12\0\2\230\1\0\22\230"+ + "\3\0\1\230\2\0\17\230\12\0\6\u0165\1\0\4\u0165"+ + "\2\0\1\u0165\1\0\3\u0165\4\0\3\u0165\1\0\1\u0165"+ + "\12\0\2\u0165\1\0\22\u0165\3\0\1\u0165\2\0\14\u0165"+ + "\1\0\2\u0165\54\0\1\u0166\5\0\1\u0167\1\u0168\1\u0169"+ + "\1\u016a\1\u016b\1\u016c\1\u016d\1\u016e\1\u016f\1\0\1\u0170"+ + "\2\0\1\u0171\2\0\1\u0172\40\0\6\u0173\1\0\4\u0173"+ + "\2\0\1\u0173\1\0\3\u0173\4\0\3\u0173\1\0\1\u0173"+ + "\12\0\2\u0173\1\0\22\u0173\3\0\1\u0173\2\0\14\u0173"+ + "\1\0\2\u0173\12\0\6\242\1\0\13\242\5\0\2\242"+ + "\14\0\2\242\1\0\22\242\3\0\1\242\2\0\17\242"+ + "\12\0\6\242\1\0\4\242\2\0\1\242\1\0\3\242"+ + "\5\0\2\242\14\0\2\242\1\0\22\242\3\0\1\242"+ + "\2\0\14\242\1\0\2\242\11\0\7\253\1\0\4\253"+ + "\2\0\1\253\1\0\3\253\2\0\1\253\1\0\1\u0164"+ + "\2\253\14\0\2\253\1\0\22\253\2\0\1\261\1\253"+ + "\2\0\14\253\1\0\2\253\11\0\7\253\1\0\4\253"+ + "\2\0\1\253\1\0\3\253\2\0\1\253\2\0\2\253"+ + "\14\0\2\253\1\0\22\253\2\0\1\261\1\253\2\0"+ + "\14\253\1\0\2\253\25\0\2\254\1\0\1\254\13\0"+ + "\1\254\4\0\1\u0174\5\0\1\u0175\7\0\1\u0176\3\0"+ + "\1\u0174\2\0\1\u0177\1\u0178\1\u0179\25\0\1\254\13\0"+ + "\7\253\1\0\4\253\2\254\1\253\1\254\3\253\2\0"+ + "\1\253\2\0\2\253\14\0\2\253\1\0\22\253\2\0"+ + "\1\261\1\253\2\0\14\253\1\254\2\253\13\0\1\u017a"+ + "\7\0\1\u017a\1\0\4\u017a\11\0\1\u017a\24\0\1\u017a"+ + "\1\0\2\u017a\1\0\1\u017a\2\0\1\u017a\3\0\1\u017a"+ + "\7\0\1\u017a\3\0\1\u017a\6\0\1\u017a\61\0\1\u017b"+ + "\52\0\2\u017c\1\0\126\u017c\2\267\1\0\34\267\1\0"+ + "\25\267\1\0\5\267\1\0\15\267\1\0\17\267\10\0"+ + "\1\u017d\120\0\2\272\1\0\32\272\2\0\71\272\61\0"+ + "\1\u017e\50\0\2\277\1\0\33\277\1\0\5\277\1\0"+ + "\64\277\60\0\1\u017f\61\0\6\u0180\1\0\10\u0180\2\0"+ + "\1\u0180\5\0\2\u0180\14\0\2\u0180\1\0\22\u0180\3\0"+ + "\1\u0180\2\0\17\u0180\12\0\1\305\1\u0181\3\305\1\u0182"+ + "\1\0\10\305\2\0\1\305\5\0\2\305\14\0\2\305"+ + "\1\0\2\305\1\u0182\2\305\1\u0181\14\305\3\0\1\305"+ + "\2\0\17\305\12\0\6\305\1\0\10\305\2\0\1\305"+ + "\5\0\2\305\14\0\2\305\1\0\22\305\3\0\1\305"+ + "\2\0\17\305\32\0\1\u0183\116\0\1\u0184\174\0\1\u0185"+ + "\134\0\1\u0186\136\0\1\u0187\144\0\1\u0188\17\0\2\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u0189\3\65"+ + "\1\0\26\65\1\0\12\65\1\u0189\26\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u018a\16\65\1\0\1\65\1\u018a\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u018b\3\65"+ + "\1\0\1\333\25\65\1\0\12\65\1\u018b\12\65\1\333"+ + "\13\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\65\1\u018c\1\u018d\3\65\1\0\1\65\1\u018e\24\65"+ + "\1\0\12\65\1\u018d\4\65\1\u018c\1\u018e\20\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\4\65\1\112"+ + "\1\65\1\0\6\65\1\112\17\65\1\0\26\65\1\112"+ + "\4\65\1\112\5\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u018f\13\65\1\0"+ + "\41\65\1\0\6\65\1\u018f\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\u0190"+ + "\10\65\1\0\4\65\1\u0190\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u0191"+ + "\16\65\1\0\1\65\1\u0191\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\u0192\1\0\26\65\1\0\14\65"+ + "\1\u0192\24\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\15\65\1\u0193\23\65"+ + "\1\0\3\65\1\u0193\16\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\1\65\1\u0194\24\65\1\0\20\65"+ + "\1\u0194\1\u0192\6\65\1\u0195\10\65\1\0\4\65\1\u0195"+ + "\1\u0192\14\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\u018c\1\65\1\0\26\65\1\0\15\65\1\u0196\10\65"+ + "\1\u018c\12\65\1\0\3\65\1\u0196\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\1\65\1\u0192\24\65"+ + "\1\0\20\65\1\u0192\20\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\3\65\1\u0197\2\65\1\0\26\65"+ + "\1\0\7\65\1\u0197\31\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u0198\16\65\1\0\1\65\1\u0198\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\u0199\3\65\1\0\26\65"+ + "\1\0\12\65\1\u0199\26\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\112\3\65\1\u019a\1\65\1\0"+ + "\26\65\1\0\23\65\1\112\2\65\1\u019a\12\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\10\65\1\112\30\65\1\0\7\65\1\112"+ + "\12\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\112\23\65\1\0\13\65\1\u019b\13\65\1\112"+ + "\11\65\1\0\2\65\1\u019b\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u019c"+ + "\16\65\1\0\1\65\1\u019c\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u019d\3\65\1\0\26\65\1\0"+ + "\12\65\1\u019d\26\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\333\1\0\26\65\1\0\14\65"+ + "\1\333\13\65\1\u0192\10\65\1\0\4\65\1\u0192\15\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\20\65"+ + "\1\u019e\5\65\1\0\37\65\1\u019e\1\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\362\25\65\1\0\2\65\1\362\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\u019f\25\65\1\0\2\65\1\u019f\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\2\65"+ + "\1\u01a0\23\65\1\0\27\65\1\u01a0\11\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\6\65"+ + "\1\333\17\65\1\0\33\65\1\333\5\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\15\65\1\u01a1\23\65\1\0\3\65\1\u01a1\16\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\10\65\1\u01a2\30\65\1\0\7\65\1\u01a2\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\1\u01a3"+ + "\5\65\1\u01a4\17\65\1\0\25\65\1\u01a3\5\65\1\u01a4"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\6\65\1\u01a5\17\65\1\0\33\65\1\u01a5"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\2\65\1\u01a6\23\65\1\0\27\65\1\u01a6"+ + "\11\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\u01a7\2\65\1\0\26\65\1\0\7\65\1\u01a7"+ + "\3\65\1\u01a8\25\65\1\0\2\65\1\u01a8\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u01a9\1\0\26\65"+ + "\1\0\14\65\1\u01a9\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\u01aa\5\65\1\0\26\65\1\0"+ + "\23\65\1\u01aa\15\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\21\65\1\u01ab"+ + "\17\65\1\0\5\65\1\u01ab\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\112"+ + "\25\65\1\0\2\65\1\112\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\1\u01ac\5\65\1\0\26\65\1\0\23\65"+ + "\1\u01ac\15\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\22\65\1\u01ad\16\65"+ + "\1\0\1\65\1\u01ad\20\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u01ae\23\65\1\0\10\65"+ + "\1\u01af\16\65\1\u01ae\11\65\1\0\7\65\1\u01af\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u01b0\3\65"+ + "\1\0\26\65\1\0\12\65\1\u01b0\1\u0193\1\65\1\u01b1"+ + "\23\65\1\0\2\65\1\u0193\1\u01b1\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u01b2\1\0\26\65\1\0"+ + "\14\65\1\u01b2\24\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\41\65\1\0"+ + "\15\65\1\u018e\4\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u01b3\1\0\26\65\1\0\14\65\1\u01b3\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\u01b1"+ + "\5\65\1\0\26\65\1\0\23\65\1\u01b1\15\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\1\u01b4\5\65"+ + "\1\0\1\65\1\335\1\u01b5\3\65\1\u0111\12\65\1\u01b6"+ + "\4\65\1\0\20\65\1\335\2\65\1\u01b4\1\u01b6\2\65"+ + "\1\u01b5\3\65\1\u0111\5\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\32\65"+ + "\1\112\6\65\1\0\12\65\1\112\7\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\30\65"+ + "\1\u01b7\10\65\1\0\4\65\1\u01b7\15\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u01b8\16\65\1\0\1\65\1\u01b8\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\112\3\65\1\0\26\65"+ + "\1\0\12\65\1\112\7\65\1\u01b9\7\65\1\112\6\65"+ + "\1\0\1\65\1\u01b9\10\65\1\112\7\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u01ba\1\0\1\65\1\112"+ + "\24\65\1\0\14\65\1\u01ba\3\65\1\112\20\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\15\65\1\112\23\65\1\0\3\65\1\112"+ + "\16\65\1\0\1\65\1\0\2\65\2\0\5\65\1\u01bb"+ + "\1\0\26\65\1\0\14\65\1\u01bb\24\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\u01bc\2\65"+ + "\1\0\26\65\1\0\7\65\1\u01bc\31\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\u01bd\3\65"+ + "\1\0\26\65\1\0\12\65\1\u01bd\26\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\5\65\1\u01be\1\0"+ + "\2\65\1\u01bf\23\65\1\0\14\65\1\u01be\12\65\1\u01bf"+ + "\11\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\4\65\1\u01c0\1\65\1\0\26\65\1\0\26\65\1\u01c0"+ + "\12\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\6\65\1\u0111\17\65\1\0\33\65\1\u0111"+ + "\5\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\21\65\1\u01c1\17\65\1\0"+ + "\5\65\1\u01c1\14\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\21\65\1\u01c2\17\65\1\0"+ + "\5\65\1\u01c2\14\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u01c3\1\0\26\65\1\0\14\65\1\u01c3\1\u01c4"+ + "\23\65\1\0\3\65\1\u01c4\16\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\1\65\1\u01c5\24\65\1\0"+ + "\20\65\1\u01c5\20\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u01c6\1\65\1\112\1\65\1\0"+ + "\26\65\1\0\12\65\1\u01c6\13\65\1\112\12\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\u01c7\25\65\1\0\25\65\1\u01c7\13\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\21\65\1\112\17\65\1\0\5\65\1\112\14\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\21\65\1\u01c8\17\65\1\0\5\65\1\u01c8\14\65"+ + "\1\0\1\65\1\0\2\65\2\0\2\65\1\112\3\65"+ + "\1\0\26\65\1\0\12\65\1\112\26\65\1\0\20\65"+ + "\11\0\1\u01c9\60\0\1\u01c9\36\0\10\u0115\1\u01ca\24\u0115"+ + "\1\u0117\75\u0115\1\0\126\u0115\37\0\1\u01cb\71\0\1\127"+ + "\10\0\6\127\1\0\11\127\1\0\1\u01cc\1\0\3\127"+ + "\1\0\2\127\14\0\2\127\1\0\23\127\2\0\1\127"+ + "\2\0\17\127\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\12\136\1\u01cd\7\136\1\127\2\0"+ + "\1\136\2\0\17\136\20\0\1\146\26\0\1\63\62\0"+ + "\1\u011d\10\0\6\u011d\1\0\11\u011d\1\0\1\u011d\1\0"+ + "\3\u011d\1\0\2\u011d\14\0\2\u011d\1\0\23\u011d\2\0"+ + "\1\u011d\2\0\17\u011d\1\0\1\u011d\10\0\6\u011d\1\0"+ + "\4\u011d\2\u01ce\1\u011d\1\u01ce\1\u011d\1\u01cf\1\u011d\1\0"+ + "\3\u011d\1\0\2\u011d\1\u01cf\13\0\2\u011d\1\0\23\u011d"+ + "\2\0\1\u011d\2\0\14\u011d\1\u01ce\2\u011d\1\0\1\u011d"+ + "\10\0\6\u011d\1\0\2\u011d\1\u011f\1\u011d\2\u0121\1\u011d"+ + "\1\u0121\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d"+ + "\1\u0120\14\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120"+ + "\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120"+ + "\6\u011d\1\u0121\2\u011d\1\0\1\u011d\10\0\6\u011d\1\0"+ + "\2\u011d\1\u011f\1\u011d\2\u0122\1\u011d\1\u0122\1\u011d\1\0"+ + "\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120\1\0\1\u0121"+ + "\12\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120\2\u011d"+ + "\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120\6\u011d"+ + "\1\u0122\2\u011d\1\0\1\u011d\10\0\6\u011d\1\0\1\u011d"+ + "\1\u01d0\1\u011f\1\u011d\1\u0122\1\u0123\1\u011d\1\u0123\1\u011d"+ + "\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u0120\1\0"+ + "\1\u0121\12\0\2\u011d\1\0\6\u011d\1\u01d0\1\u0120\2\u011d"+ + "\1\u0120\2\u011d\1\u011f\5\u011d\2\0\1\u011d\2\0\5\u011d"+ + "\1\u0120\6\u011d\1\u0123\2\u011d\1\0\1\u011d\10\0\1\u011d"+ + "\1\u01d1\4\u011d\1\0\2\u011d\1\u01d1\1\u011d\4\u01d1\1\u011d"+ + "\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d\1\u01d1\14\0"+ + "\2\u011d\1\0\5\u011d\1\u01d1\1\u011d\2\u01d1\1\u011d\1\u01d1"+ + "\2\u011d\1\u01d1\3\u011d\1\u01d1\1\u011d\2\0\1\u011d\2\0"+ + "\1\u011d\1\u01d1\3\u011d\1\u01d1\6\u011d\1\u01d1\2\u011d\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u01d2\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u01d3\6\136\1\u01d4\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\1\136\1\u01d5\14\0\2\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\3\136\1\u01d6\13\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\14\136\1\u01d7"+ + "\5\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01d8\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u01d9\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u01da"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u01db\2\136\1\u0128\6\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u01dc\1\136\1\0\1\u01dd\21\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\14\136\1\u01de\5\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\6\136\1\u01df"+ + "\13\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01e0\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\1\u0128\16\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u01e1\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\10\136\1\u01e2\11\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u01e3\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u01e4\6\136\1\u01e5\10\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u01e6"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\2\136"+ + "\1\u01e7\17\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\u01e8\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\6\136"+ + "\1\u01e9\3\136\1\u01ea\6\136\1\u01eb\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\11\136\1\u01ec\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\14\136\1\u01ed\5\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u01ee\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u01ef"+ + "\20\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u01f0\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u01f1\1\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u01f2\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\3\136\1\u01f3\16\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\u0128\21\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\136\1\u01f4\20\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\6\136\1\u01f5\13\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\21\136\1\u01f6\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u01f7\1\136\1\0\1\136\1\u01f8\20\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\u01f9\4\136"+ + "\1\u01fa\14\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\u01fb\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\11\136"+ + "\1\u01e5\10\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\5\136\1\u01fc\14\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\5\136\1\u01fd\14\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u01fe\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u01ff\11\136\1\u0200\5\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\u0201\1\136\1\0\6\136"+ + "\1\u0202\13\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u0203\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\136\1\u0204\20\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0205\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u0206\17\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u0207\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\22\136\1\127\2\0\1\136"+ + "\2\0\3\136\1\u0128\13\136\13\0\1\u0208\7\0\1\u0208"+ + "\1\0\4\u0208\11\0\1\u0208\24\0\1\u0208\1\0\2\u0208"+ + "\1\0\1\u0208\2\0\1\u0208\3\0\1\u0208\7\0\1\u0208"+ + "\3\0\1\u0208\6\0\1\u0208\15\0\1\u0209\7\0\1\u0209"+ + "\1\0\4\u0209\11\0\1\u0209\24\0\1\u0209\1\0\2\u0209"+ + "\1\0\1\u0209\2\0\1\u0209\3\0\1\u0209\7\0\1\u0209"+ + "\3\0\1\u0209\6\0\1\u0209\14\0\1\u020a\60\0\1\u020a"+ + "\121\0\1\u020b\134\0\1\u020c\136\0\1\u020d\144\0\1\u020e"+ + "\30\0\1\u020f\60\0\1\u020f\121\0\1\u0210\134\0\1\u0211"+ + "\136\0\1\u0212\144\0\1\u0213\30\0\1\u0214\60\0\1\u0214"+ + "\47\0\6\u0165\1\0\13\u0165\5\0\2\u0165\1\0\1\u0165"+ + "\12\0\2\u0165\1\0\22\u0165\3\0\1\u0165\2\0\17\u0165"+ + "\72\0\1\u0215\1\0\1\u0216\6\0\1\u0217\110\0\1\u0218"+ + "\132\0\1\u0219\135\0\1\u021a\121\0\1\u021b\1\u021c\127\0"+ + "\1\u021d\133\0\1\u021e\121\0\1\u021f\12\0\1\u0220\115\0"+ + "\1\u0221\140\0\1\u0222\120\0\1\u0223\3\0\1\u0224\132\0"+ + "\1\u0225\12\0\1\u0226\107\0\1\u0227\63\0\6\u0173\1\0"+ + "\13\u0173\5\0\2\u0173\1\0\1\u0173\12\0\2\u0173\1\0"+ + "\22\u0173\3\0\1\u0173\2\0\17\u0173\65\0\1\u0174\143\0"+ + "\1\u0174\114\0\1\u0174\2\0\1\u0174\17\0\1\u0174\121\0"+ + "\1\u0174\6\0\1\u0174\114\0\1\u0174\4\0\1\u0174\130\0"+ + "\1\u0228\42\0\2\305\1\u0229\3\305\1\0\10\305\2\0"+ + "\1\305\5\0\2\305\14\0\2\305\1\0\1\u0229\21\305"+ + "\3\0\1\305\2\0\17\305\12\0\6\305\1\0\1\u022a"+ + "\7\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\13\305\1\u022a\6\305\3\0\1\305\2\0\17\305\32\0"+ + "\1\u022b\174\0\1\u022c\131\0\1\u0187\105\0\1\u022d\120\0"+ + "\1\u022e\65\0\2\65\1\0\1\65\1\0\2\65\2\0"+ + "\3\65\1\u022f\2\65\1\0\26\65\1\0\7\65\1\u022f"+ + "\31\65\1\0\22\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\65\1\u01a3\4\65\1\0\26\65\1\0\15\65\1\112"+ + "\1\65\1\u01a3\21\65\1\0\3\65\1\112\16\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\u0230\2\65\1\0"+ + "\26\65\1\0\7\65\1\u0230\3\65\1\u0231\25\65\1\0"+ + "\2\65\1\u0231\17\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u0232\1\0\26\65\1\0\14\65\1\u0232\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\32\65\1\u01a3\6\65\1\0\12\65"+ + "\1\u01a3\7\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u0233\23\65\1\0\27\65\1\u0233\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u0234\3\65\1\0\26\65\1\0\12\65\1\u0234\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\112\1\65\1\0\26\65\1\0\26\65\1\112\12\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\65\1\u01b7\24\65\1\0\20\65\1\u01b7\20\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\112\23\65\1\0\27\65\1\112\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\5\65"+ + "\1\u01a3\1\0\26\65\1\0\14\65\1\u01a3\24\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\10\65\1\u0235\30\65\1\0\7\65\1\u0235"+ + "\12\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\30\65\1\u0236\10\65\1\0\4\65\1\u0236"+ + "\15\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\32\65\1\u0237\6\65\1\0\12\65\1\u0237"+ + "\7\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\15\65\1\u0238\23\65\1\0\3\65\1\u0238"+ + "\16\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\u01a3\25\65\1\0\25\65\1\u01a3\13\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u0239\16\65\1\0\1\65\1\u0239\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\12\65"+ + "\1\u01b1\13\65\1\0\41\65\1\0\6\65\1\u01b1\13\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\10\65\1\u01c2\30\65\1\0\7\65\1\u01c2\12\65"+ + "\1\0\1\65\1\0\2\65\2\0\3\65\1\u023a\2\65"+ + "\1\0\26\65\1\0\7\65\1\u023a\31\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\22\65\1\u01b0\16\65\1\0\1\65\1\u01b0\20\65"+ + "\1\0\1\65\1\0\2\65\2\0\5\65\1\u023b\1\0"+ + "\26\65\1\0\14\65\1\u023b\24\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\u01b1\25\65\1\0\2\65\1\u01b1\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u010f\16\65\1\0\1\65\1\u010f\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\31\65\1\112\7\65\1\0\10\65\1\112\11\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u023c"+ + "\23\65\1\0\27\65\1\u023c\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u0111"+ + "\23\65\1\0\27\65\1\u0111\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u01b7"+ + "\23\65\1\0\27\65\1\u01b7\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u010f"+ + "\23\65\1\0\27\65\1\u010f\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\15\65\1\u023d\23\65\1\0\3\65\1\u023d\16\65\1\0"+ + "\1\65\1\0\2\65\2\0\1\65\1\u023e\4\65\1\0"+ + "\26\65\1\0\17\65\1\u023e\21\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u023f\1\0\26\65"+ + "\1\0\14\65\1\u023f\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\13\65"+ + "\1\u0240\25\65\1\0\2\65\1\u0240\17\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\1\112\25\65\1\0"+ + "\25\65\1\112\13\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\2\65\1\u0241\23\65\1\0"+ + "\27\65\1\u0241\11\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\u0242"+ + "\10\65\1\0\4\65\1\u0242\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\1\65\1\u0243\24\65\1\0"+ + "\20\65\1\u0243\20\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u0244\13\65\1\0"+ + "\41\65\1\0\6\65\1\u0244\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\30\65\1\112"+ + "\10\65\1\0\4\65\1\112\15\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\112\1\0\26\65\1\0\14\65"+ + "\1\112\24\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\3\65\1\u023f\2\65\1\0\26\65\1\0\7\65"+ + "\1\u023f\1\u0235\30\65\1\0\7\65\1\u0235\12\65\1\0"+ + "\1\65\1\0\2\65\2\0\4\65\1\u019a\1\65\1\0"+ + "\26\65\1\0\26\65\1\u019a\12\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\1\65\1\317\4\65\1\0"+ + "\26\65\1\0\17\65\1\317\21\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\30\65\1\u0245\10\65\1\0\4\65\1\u0245\15\65\1\0"+ + "\1\65\1\0\2\65\2\0\2\65\1\u0246\3\65\1\0"+ + "\26\65\1\0\12\65\1\u0246\26\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\21\65\1\u0247\17\65\1\0\5\65\1\u0247\14\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\1\65\1\u0248"+ + "\24\65\1\0\20\65\1\u0248\20\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u0249\16\65\1\0\1\65\1\u0249\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\u024a\16\65\1\0\1\65\1\u024a\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\21\65\1\u0192\17\65\1\0\5\65\1\u0192\14\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\u024b\25\65\1\0\2\65\1\u024b\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\u024c\2\65\1\0"+ + "\26\65\1\0\7\65\1\u024c\31\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\22\65\1\112\16\65\1\0\1\65\1\112\20\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\1\65\1\u024d"+ + "\24\65\1\0\20\65\1\u024d\20\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\3\65\1\363\2\65\1\0"+ + "\26\65\1\0\7\65\1\363\31\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\2\65\1\u024e\3\65\1\0"+ + "\26\65\1\0\12\65\1\u024e\26\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u0111"+ + "\23\65\1\0\22\65\1\112\4\65\1\u0111\11\65\1\0"+ + "\1\65\1\112\20\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\12\65\1\112\13\65\1\0\41\65\1\0"+ + "\6\65\1\112\13\65\1\0\1\65\1\0\2\65\2\0"+ + "\5\65\1\u024f\1\0\26\65\1\0\14\65\1\u024f\24\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\31\65\1\112\7\65\1\0\10\65"+ + "\1\112\1\u0250\10\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\10\65\1\u0251\30\65\1\0"+ + "\7\65\1\u0251\12\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\2\65\1\363\23\65\1\0\27\65\1\363"+ + "\11\65\1\0\20\65\12\0\1\u0252\53\0\1\u0252\120\0"+ + "\2\u01ca\17\0\1\u01ca\41\0\1\u0253\120\0\1\127\10\0"+ + "\1\127\1\u0254\4\127\1\0\2\127\1\u0254\1\127\4\u0254"+ + "\1\127\1\0\1\127\1\0\3\127\1\0\1\127\1\u0254"+ + "\14\0\2\127\1\0\5\127\1\u0254\1\127\2\u0254\1\127"+ + "\1\u0254\2\127\1\u0254\3\127\1\u0254\1\127\2\0\1\127"+ + "\2\0\1\127\1\u0254\3\127\1\u0254\6\127\1\u0254\2\127"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u0255"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\u011d\10\0\6\u011d\1\0\4\u011d\2\u01ce\1\u011d"+ + "\1\u01ce\1\u011d\1\0\1\u011d\1\0\3\u011d\1\0\1\u011d"+ + "\1\u0120\14\0\2\u011d\1\0\7\u011d\1\u0120\2\u011d\1\u0120"+ + "\10\u011d\2\0\1\u011d\2\0\5\u011d\1\u0120\6\u011d\1\u01ce"+ + "\2\u011d\25\0\2\u01ce\1\0\1\u01ce\75\0\1\u01ce\3\0"+ + "\1\u011d\10\0\1\u011d\1\u01d1\4\u011d\1\0\1\u011d\1\u01d0"+ + "\1\u01d1\1\u011d\4\u01d1\1\u011d\1\0\1\u011d\1\0\3\u011d"+ + "\1\0\1\u011d\1\u01d1\14\0\2\u011d\1\0\5\u011d\1\u01d1"+ + "\1\u01d0\2\u01d1\1\u011d\1\u01d1\2\u011d\1\u01d1\3\u011d\1\u01d1"+ + "\1\u011d\2\0\1\u011d\2\0\1\u011d\1\u01d1\3\u011d\1\u01d1"+ + "\6\u011d\1\u01d1\2\u011d\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u014b\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u0256\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u0257"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\u0258\1\136\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u0259\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\136\1\u025a\4\136\1\u025b\13\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0128\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\u025c\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\22\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\15\136\1\u025d\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u025e\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\11\136\1\u0128\10\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\136\1\u025f"+ + "\20\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\15\136"+ + "\1\u0260\4\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\6\136\1\u0128\13\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u0261"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u0262\6\136\1\u0263\10\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\1\u0264\21\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u01dc\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\5\136\1\u0206\14\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\15\136\1\u0128"+ + "\4\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\136\1\u0264\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\21\136"+ + "\1\u0265\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\15\136"+ + "\1\u0266\4\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\10\136\1\u0267\11\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\u0268"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u0269\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\15\136\1\u0142\4\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u026a\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\u026b\21\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\5\136\1\u026c\14\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u01e4\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\5\136\1\u026d\14\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\10\136\1\u026e"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u026b\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\11\136\1\u01da\10\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u026a\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\20\136\1\u026f\1\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\2\136\1\u0270\17\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\11\136\1\u0271\10\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\17\136\1\u0272\2\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\16\136\1\u0128"+ + "\3\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\4\136"+ + "\1\u0273\15\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\10\136\1\u0274\11\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u0275\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\15\136\1\u0276\4\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u025a\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\7\136\1\u0128\12\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u0277\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\10\136\1\u0278"+ + "\11\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\6\136"+ + "\1\u0279\13\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u0264\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\4\136\1\u0128\15\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\6\136\1\u01e5\13\136\1\127\2\0\1\136"+ + "\2\0\17\136\13\0\1\u027a\7\0\1\u027a\1\0\4\u027a"+ + "\11\0\1\u027a\24\0\1\u027a\1\0\2\u027a\1\0\1\u027a"+ + "\2\0\1\u027a\3\0\1\u027a\7\0\1\u027a\3\0\1\u027a"+ + "\6\0\1\u027a\15\0\1\u027b\7\0\1\u027b\1\0\4\u027b"+ + "\11\0\1\u027b\24\0\1\u027b\1\0\2\u027b\1\0\1\u027b"+ + "\2\0\1\u027b\3\0\1\u027b\7\0\1\u027b\3\0\1\u027b"+ + "\6\0\1\u027b\15\0\1\u027c\53\0\1\u027c\137\0\1\u027d"+ + "\131\0\1\u020d\105\0\1\u027e\120\0\1\u027f\77\0\1\u0280"+ + "\53\0\1\u0280\137\0\1\u0281\131\0\1\u0212\105\0\1\u0282"+ + "\120\0\1\u0283\103\0\1\u0284\44\0\1\u0284\140\0\1\u0285"+ + "\113\0\1\u0286\150\0\1\u0287\114\0\1\u021b\135\0\1\u0288"+ + "\122\0\1\u0289\132\0\1\u028a\132\0\1\u028b\144\0\1\u028c"+ + "\125\0\1\u028d\116\0\1\u028e\130\0\1\u028f\5\0\1\u0290"+ + "\130\0\1\u0225\121\0\1\u0291\126\0\1\u0292\135\0\1\u0293"+ + "\133\0\1\u0294\134\0\1\u0295\125\0\1\u0296\133\0\1\u0297"+ + "\44\0\3\305\1\u0298\2\305\1\0\10\305\2\0\1\305"+ + "\5\0\2\305\14\0\1\u0298\1\305\1\0\22\305\3\0"+ + "\1\305\2\0\17\305\12\0\6\305\1\0\1\305\1\u0299"+ + "\6\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\6\305\1\u0299\13\305\3\0\1\305\2\0\17\305\54\0"+ + "\1\u022d\16\0\1\u0187\46\0\1\u029a\125\0\2\u029b\1\0"+ + "\7\u022e\1\0\10\u022e\2\u029b\1\u022e\1\0\1\u029b\1\0"+ + "\1\u022e\1\u029b\2\u022e\2\u029b\1\0\2\u029b\1\0\5\u029b"+ + "\1\0\2\u022e\1\0\22\u022e\3\u029b\1\u022e\2\u029b\17\u022e"+ + "\1\0\2\65\1\0\1\65\1\0\2\65\2\0\4\65"+ + "\1\u01b1\1\65\1\0\26\65\1\0\26\65\1\u01b1\12\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\31\65\1\u0192\7\65\1\0\10\65"+ + "\1\u0192\11\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\15\65\1\340\23\65\1\0\3\65"+ + "\1\340\16\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\u023f\2\65\1\0\26\65\1\0\7\65\1\u023f\31\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\65"+ + "\1\u01b1\4\65\1\0\26\65\1\0\17\65\1\u01b1\21\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\1\65"+ + "\1\u0192\4\65\1\0\26\65\1\0\17\65\1\u0192\21\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u029c\3\65\1\0\26\65\1\0\12\65\1\u029c\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u029d\23\65\1\0\22\65\1\u023c\4\65"+ + "\1\u029d\11\65\1\0\1\65\1\u023c\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u029e\16\65\1\0\1\65\1\u029e\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\21\65"+ + "\1\u029f\17\65\1\0\5\65\1\u029f\14\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\30\65"+ + "\1\u0192\10\65\1\0\4\65\1\u0192\15\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\15\65"+ + "\1\u02a0\23\65\1\0\3\65\1\u02a0\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\22\65"+ + "\1\u02a1\16\65\1\0\1\65\1\u02a1\20\65\1\0\1\65"+ + "\1\0\2\65\2\0\6\65\1\0\26\65\1\0\15\65"+ + "\1\u010f\23\65\1\0\3\65\1\u010f\16\65\1\0\1\65"+ + "\1\0\2\65\2\0\5\65\1\u02a2\1\0\26\65\1\0"+ + "\14\65\1\u02a2\24\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\31\65\1\u02a3"+ + "\7\65\1\0\10\65\1\u02a3\11\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\u0102"+ + "\25\65\1\0\2\65\1\u0102\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\12\65\1\u023c\13\65\1\0"+ + "\41\65\1\0\6\65\1\u023c\13\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\21\65\1\u02a4\4\65\1\0"+ + "\24\65\1\u02a4\14\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\2\65\1\u02a5\23\65\1\0"+ + "\27\65\1\u02a5\11\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\21\65\1\u02a6"+ + "\17\65\1\0\5\65\1\u02a6\14\65\1\0\1\65\1\0"+ + "\2\65\2\0\2\65\1\u0192\3\65\1\0\26\65\1\0"+ + "\12\65\1\u0192\26\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\22\65\1\u02a7"+ + "\16\65\1\0\1\65\1\u02a7\20\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\13\65\1\340"+ + "\25\65\1\0\2\65\1\340\17\65\1\0\1\65\1\0"+ + "\2\65\2\0\3\65\1\u02a8\2\65\1\0\26\65\1\0"+ + "\7\65\1\u02a8\31\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\5\65\1\u02a9\1\0\1\65\1\u02aa\24\65"+ + "\1\0\10\65\1\u02ab\3\65\1\u02a9\3\65\1\u02aa\20\65"+ + "\1\0\7\65\1\u02ab\12\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\26\65\1\0\15\65\1\u02ac\23\65"+ + "\1\0\3\65\1\u02ac\16\65\1\0\1\65\1\0\2\65"+ + "\2\0\1\65\1\333\4\65\1\0\26\65\1\0\17\65"+ + "\1\333\21\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u01b1\23\65\1\0\27\65"+ + "\1\u01b1\11\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u02ad\23\65\1\0\27\65"+ + "\1\u02ad\11\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\3\65\1\u02ae\2\65\1\0\26\65\1\0\7\65"+ + "\1\u02ae\31\65\1\0\22\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\12\65\1\u02af\13\65\1\0\41\65"+ + "\1\0\6\65\1\u02af\13\65\1\0\1\65\1\0\2\65"+ + "\2\0\6\65\1\0\2\65\1\u0102\23\65\1\0\27\65"+ + "\1\u0102\11\65\1\0\20\65\13\0\1\u02b0\45\0\1\u02b0"+ + "\47\0\1\127\10\0\1\127\1\u02b1\4\127\1\0\2\127"+ + "\1\u02b1\1\127\4\u02b1\1\127\1\0\1\127\1\0\3\127"+ + "\1\0\1\127\1\u02b1\14\0\2\127\1\0\5\127\1\u02b1"+ + "\1\127\2\u02b1\1\127\1\u02b1\2\127\1\u02b1\3\127\1\u02b1"+ + "\1\127\2\0\1\127\2\0\1\127\1\u02b1\3\127\1\u02b1"+ + "\6\127\1\u02b1\2\127\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\3\136\1\u02b2\16\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\1\u02b3\21\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u02b4\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u02b5"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\3\136\1\u0275\13\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\u0263\21\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\15\136\1\u02b6\4\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\u02b7\21\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\11\136\1\u02b8\10\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\22\136\1\127\2\0\1\136\2\0\1\u02b9"+ + "\16\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\1\136\1\u02ba\20\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\20\136\1\u01e5\1\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u02bb\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u0128\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\6\136\1\u0205\13\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u01e5"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u02bc\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\136\1\u02bd\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\1\u02be\21\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\1\u02bf\1\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\2\136\1\u0264"+ + "\17\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\4\136"+ + "\1\u02c0\15\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u02c1\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u02c2\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u0266\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\15\136\1\u02c3\4\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\15\136\1\u02c4\4\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u02c5\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\14\136\1\u02c6"+ + "\5\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u02c7\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\2\136\1\u0153\17\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\17\136\1\u0128\2\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\15\136\1\u02c8\4\136\1\127\2\0\1\136"+ + "\2\0\17\136\14\0\1\u02c9\45\0\1\u02c9\122\0\1\u027e"+ + "\16\0\1\u020d\46\0\1\u02ca\125\0\2\u02cb\1\0\7\u027f"+ + "\1\0\10\u027f\2\u02cb\1\u027f\1\0\1\u02cb\1\0\1\u027f"+ + "\1\u02cb\2\u027f\2\u02cb\1\0\2\u02cb\1\0\5\u02cb\1\0"+ + "\2\u027f\1\0\22\u027f\3\u02cb\1\u027f\2\u02cb\17\u027f\14\0"+ + "\1\u02cc\45\0\1\u02cc\122\0\1\u0282\16\0\1\u0212\46\0"+ + "\1\u02cd\125\0\2\u02ce\1\0\7\u0283\1\0\10\u0283\2\u02ce"+ + "\1\u0283\1\0\1\u02ce\1\0\1\u0283\1\u02ce\2\u0283\2\u02ce"+ + "\1\0\2\u02ce\1\0\5\u02ce\1\0\2\u0283\1\0\22\u0283"+ + "\3\u02ce\1\u0283\2\u02ce\17\u0283\21\0\1\u02cf\53\0\1\u02cf"+ + "\117\0\1\u028c\126\0\1\u02d0\142\0\1\u02d1\131\0\1\u02d2"+ + "\113\0\1\u02d3\102\0\1\u02d4\175\0\1\u02d5\120\0\1\u02d6"+ + "\142\0\1\u028a\107\0\1\u028a\134\0\1\u02d2\123\0\1\u02d7"+ + "\144\0\1\u0290\70\0\1\u02d8\200\0\1\u02d9\111\0\1\u02da"+ + "\123\0\1\u02db\134\0\1\u02dc\57\0\4\305\1\u02dd\1\305"+ + "\1\0\10\305\2\0\1\305\5\0\2\305\14\0\2\305"+ + "\1\0\14\305\1\u02dd\5\305\3\0\1\305\2\0\17\305"+ + "\12\0\6\305\1\0\2\305\1\u02de\5\305\2\0\1\305"+ + "\5\0\2\305\14\0\2\305\1\0\15\305\1\u02de\4\305"+ + "\3\0\1\305\2\0\17\305\11\0\1\u022e\120\0\2\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\13\65\1\u02df\25\65\1\0\2\65\1\u02df\17\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\26\65"+ + "\1\0\15\65\1\u01b1\23\65\1\0\3\65\1\u01b1\16\65"+ + "\1\0\1\65\1\0\2\65\2\0\1\112\5\65\1\0"+ + "\26\65\1\0\23\65\1\112\15\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\2\65\1\u02e0"+ + "\23\65\1\0\27\65\1\u02e0\11\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\5\65\1\u02e1\1\0\26\65"+ + "\1\0\14\65\1\u02e1\24\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\2\65\1\u02e2\3\65\1\0\26\65"+ + "\1\0\12\65\1\u02e2\26\65\1\0\22\65\1\0\1\65"+ + "\1\0\2\65\2\0\1\u02e3\5\65\1\0\26\65\1\0"+ + "\23\65\1\u02e3\15\65\1\0\22\65\1\0\1\65\1\0"+ + "\2\65\2\0\6\65\1\0\26\65\1\0\41\65\1\0"+ + "\11\65\1\u02e4\10\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\13\65\1\u029d\25\65\1\0"+ + "\2\65\1\u029d\17\65\1\0\1\65\1\0\2\65\2\0"+ + "\1\u024d\5\65\1\0\26\65\1\0\23\65\1\u024d\15\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\26\65\1\0\30\65\1\u02e5\10\65\1\0\4\65"+ + "\1\u02e5\15\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\65\1\u029e\24\65\1\0\20\65\1\u029e\20\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\2\65\1\u02e6\23\65\1\0\27\65\1\u02e6\11\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\3\65"+ + "\1\373\2\65\1\0\26\65\1\0\7\65\1\373\31\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\2\65"+ + "\1\u02e7\3\65\1\0\26\65\1\0\12\65\1\u02e7\26\65"+ + "\1\0\22\65\1\0\1\65\1\0\2\65\2\0\6\65"+ + "\1\0\1\u01b0\25\65\1\0\25\65\1\u01b0\13\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\1\u029e\5\65"+ + "\1\0\26\65\1\0\23\65\1\u029e\15\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\1\65\1\u02e8\4\65"+ + "\1\0\26\65\1\0\17\65\1\u02e8\21\65\1\0\22\65"+ + "\1\0\1\65\1\0\2\65\2\0\6\65\1\0\2\65"+ + "\1\u0192\23\65\1\0\27\65\1\u0192\11\65\1\0\20\65"+ + "\14\0\1\u02e9\41\0\1\u02e9\52\0\1\127\10\0\1\127"+ + "\1\u02ea\4\127\1\0\2\127\1\u02ea\1\127\4\u02ea\1\127"+ + "\1\0\1\127\1\0\3\127\1\0\1\127\1\u02ea\14\0"+ + "\2\127\1\0\5\127\1\u02ea\1\127\2\u02ea\1\127\1\u02ea"+ + "\2\127\1\u02ea\3\127\1\u02ea\1\127\2\0\1\127\2\0"+ + "\1\127\1\u02ea\3\127\1\u02ea\6\127\1\u02ea\2\127\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u02eb\1\136"+ + "\1\0\22\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\12\136\1\u02ec\7\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\3\136\1\u02ed\16\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\1\u02ee\1\136\1\0\22\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\16\136\1\u02ef\3\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\3\136\1\u02f0\16\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\1\u02f1\1\136\1\0\22\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\12\136\1\u0128\7\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u02f2\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\6\136\1\u0263"+ + "\13\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\1\136\1\u01ed\1\0"+ + "\22\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u02f3\11\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\5\136\1\u0128\14\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\1\u02f4\21\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\1\u02f5"+ + "\1\136\1\0\22\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\6\136\1\u02f6\13\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\5\136\1\u02f7\14\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\3\136\1\u02f8\2\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\1\136\1\u02f9\14\0\2\136\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\136\1\u01e5\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u0275\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\7\136\1\u01dc"+ + "\12\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\10\136"+ + "\1\u02fa\11\136\1\127\2\0\1\136\2\0\17\136\15\0"+ + "\1\u02fb\41\0\1\u02fb\62\0\1\u027f\134\0\1\u02fc\41\0"+ + "\1\u02fc\62\0\1\u0283\141\0\1\u02fd\45\0\1\u02fd\133\0"+ + "\1\u02fe\120\0\1\u02ff\77\0\1\u0300\175\0\1\u021b\114\0"+ + "\1\u0301\3\0\1\u0302\1\u0303\122\0\1\u028a\147\0\1\u0304"+ + "\131\0\1\u0305\121\0\1\u028a\125\0\1\u0304\135\0\1\u028a"+ + "\117\0\1\u0304\126\0\1\u0306\60\0\5\305\1\u0307\1\0"+ + "\10\305\2\0\1\305\5\0\2\305\14\0\2\305\1\0"+ + "\2\305\1\u0307\17\305\3\0\1\305\2\0\17\305\1\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\12\65\1\u0190\13\65\1\0\41\65\1\0\6\65\1\u0190"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\20\65\1\112\5\65\1\0\37\65\1\112\1\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u0308\23\65\1\0\27\65\1\u0308\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u01bf\23\65\1\0\27\65\1\u01bf\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\13\65\1\324\25\65\1\0\2\65\1\324"+ + "\17\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\12\65\1\u0309\13\65\1\0\41\65\1\0\6\65\1\u0309"+ + "\13\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\2\65\1\u029e\23\65\1\0\27\65\1\u029e\11\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\30\65\1\u030a\10\65\1\0\4\65\1\u030a"+ + "\15\65\1\0\1\65\1\0\2\65\2\0\3\65\1\u010f"+ + "\2\65\1\0\26\65\1\0\7\65\1\u010f\31\65\1\0"+ + "\22\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\26\65\1\0\13\65\1\u01b7\25\65\1\0\2\65\1\u01b7"+ + "\15\65\15\0\1\u030b\57\0\1\u030b\33\0\1\127\10\0"+ + "\1\127\1\136\4\127\1\0\2\127\1\136\1\127\4\136"+ + "\1\127\1\0\1\127\1\0\3\127\1\0\1\127\1\136"+ + "\14\0\2\127\1\0\5\127\1\136\1\127\2\136\1\127"+ + "\1\136\2\127\1\136\3\127\1\136\1\127\2\0\1\127"+ + "\2\0\1\127\1\136\3\127\1\136\6\127\1\136\2\127"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\2\136\1\u02f6\17\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\10\136\1\u030c\11\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\5\136\1\u01de\14\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u02c6\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\15\136\1\u030d\4\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\15\136\1\u030e"+ + "\4\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\u01e5\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\22\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\5\136\1\u0263"+ + "\14\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\1\136"+ + "\1\u030f\20\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\1\136\1\u0310\20\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\13\136\1\u0128\6\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0311\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\3\136\1\u0312\16\136\1\127\2\0"+ + "\1\136\2\0\17\136\1\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\6\136\1\u0313\13\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u0264\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\16\0\1\u0314\57\0"+ + "\1\u0314\50\0\1\u0315\57\0\1\u0315\55\0\1\u0316\53\0"+ + "\1\u0316\115\0\1\u0317\126\0\1\u0305\131\0\1\u0301\3\0"+ + "\1\u0302\135\0\1\u0318\122\0\1\u0319\134\0\1\u0292\135\0"+ + "\1\u031a\130\0\1\u028a\115\0\1\u031b\45\0\2\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\20\65\1\u01b1"+ + "\5\65\1\0\37\65\1\u01b1\1\65\1\0\22\65\1\0"+ + "\1\65\1\0\2\65\2\0\6\65\1\0\26\65\1\0"+ + "\13\65\1\327\25\65\1\0\2\65\1\327\17\65\1\0"+ + "\1\65\1\0\2\65\2\0\4\65\1\u031c\1\65\1\0"+ + "\26\65\1\0\26\65\1\u031c\12\65\1\0\20\65\16\0"+ + "\1\u031d\44\0\1\u031d\45\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\5\136\1\u01e5\14\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\3\136\1\u031e\16\136"+ + "\1\127\2\0\1\136\2\0\17\136\1\0\1\127\10\0"+ + "\6\136\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a"+ + "\1\136\1\0\2\136\14\0\2\136\1\0\3\136\1\u0263"+ + "\16\136\1\127\2\0\1\136\2\0\17\136\1\0\1\127"+ + "\10\0\6\136\1\0\11\136\1\0\1\136\1\0\1\127"+ + "\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0\3\136"+ + "\1\u031f\16\136\1\127\2\0\1\136\2\0\17\136\1\0"+ + "\1\127\10\0\6\136\1\0\11\136\1\0\1\136\1\0"+ + "\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136\1\0"+ + "\3\136\1\u0128\16\136\1\127\2\0\1\136\2\0\17\136"+ + "\1\0\1\127\10\0\6\136\1\0\11\136\1\0\1\136"+ + "\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0\2\136"+ + "\1\0\15\136\1\u0201\4\136\1\127\2\0\1\136\2\0"+ + "\17\136\1\0\1\127\10\0\6\136\1\0\11\136\1\0"+ + "\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136\14\0"+ + "\2\136\1\0\2\136\1\u0275\17\136\1\127\2\0\1\136"+ + "\2\0\17\136\1\0\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\1\136\1\u0320\20\136\1\127\2\0"+ + "\1\136\2\0\17\136\17\0\1\u0321\44\0\1\u0321\63\0"+ + "\1\u0322\44\0\1\u0322\64\0\1\u0323\142\0\1\u0324\130\0"+ + "\1\u0325\155\0\1\u0326\142\0\1\u028a\131\0\1\u0327\37\0"+ + "\2\65\1\0\1\65\1\0\2\65\2\0\6\65\1\0"+ + "\1\65\1\u0328\24\65\1\0\20\65\1\u0328\20\65\1\0"+ + "\20\65\17\0\1\u0329\111\0\1\127\10\0\6\136\1\0"+ + "\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0"+ + "\2\136\14\0\2\136\1\0\2\136\1\u01dc\17\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\1\u032a\1\136\1\0\22\136\1\127"+ + "\2\0\1\136\2\0\17\136\1\0\1\127\10\0\6\136"+ + "\1\0\11\136\1\0\1\136\1\0\1\127\1\u011a\1\136"+ + "\1\0\2\136\14\0\2\136\1\0\10\136\1\u0312\11\136"+ + "\1\127\2\0\1\136\2\0\17\136\20\0\1\u032b\130\0"+ + "\1\u032c\200\0\1\u032d\124\0\1\u032e\134\0\1\u031a\125\0"+ + "\1\u032f\44\0\2\65\1\0\1\65\1\0\2\65\2\0"+ + "\6\65\1\0\26\65\1\0\22\65\1\327\16\65\1\0"+ + "\1\65\1\327\16\65\1\127\10\0\6\136\1\0\11\136"+ + "\1\0\1\136\1\0\1\127\1\u011a\1\136\1\0\2\136"+ + "\14\0\2\136\1\0\22\136\1\127\2\0\1\136\2\0"+ + "\16\136\1\u0311\57\0\1\u0330\17\0\1\u0331\126\0\1\u0332"+ + "\117\0\1\u0333\131\0\1\u0305\127\0\1\u0285\142\0\1\u0305"+ + "\33\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[63190]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\6\0\2\1\1\0\2\1\2\0\2\1\1\11\4\1" + - "\1\11\2\1\1\11\2\1\2\11\2\1\1\11\1\1" + - "\3\11\1\1\1\11\25\1\1\11\1\1\1\11\1\1" + - "\5\11\1\1\1\11\2\1\1\11\16\1\1\11\3\1" + - "\1\11\16\1\1\11\4\1\1\11\1\1\1\11\1\0" + - "\1\11\103\1\1\11\2\0\20\1\1\11\1\1\1\11" + - "\56\1\1\11\1\1\1\0\1\1\1\11\100\1\2\0" + - "\3\1\1\0\3\1\1\11\72\1\1\11\44\1\1\0" + - "\1\11\4\1\1\11\72\1\1\0\45\1\1\0\26\1" + - "\1\0\10\1\1\0\4\1\1\11\1\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[566]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\7\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ + "\2\11\2\1\1\11\1\1\3\11\1\1\1\11\25\1"+ + "\1\11\1\1\1\11\1\1\7\11\1\1\1\11\2\1"+ + "\2\11\10\1\1\11\3\1\1\11\20\1\1\11\2\1"+ + "\1\11\1\1\2\11\2\1\1\11\1\1\1\11\1\1"+ + "\1\11\6\1\1\11\4\1\2\11\1\1\1\11\4\1"+ + "\1\11\1\1\3\11\4\1\4\11\1\1\1\11\6\1"+ + "\4\11\1\1\2\11\1\1\1\11\2\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\4\1\2\11\5\0"+ + "\1\11\103\1\1\11\3\0\1\11\1\0\75\1\1\11"+ + "\2\1\1\0\1\11\12\0\1\11\1\1\15\0\1\1"+ + "\1\11\5\0\1\1\1\0\4\11\3\1\1\0\1\11"+ + "\4\0\100\1\1\0\1\1\1\0\3\1\1\0\70\1"+ + "\41\0\2\1\1\11\2\0\44\1\1\0\1\11\46\1"+ + "\1\0\1\11\3\0\1\1\3\0\1\1\6\0\1\11"+ + "\15\0\2\1\2\0\24\1\1\0\30\1\24\0\14\1"+ + "\1\0\21\1\14\0\4\1\1\0\10\1\10\0\1\1"+ + "\1\0\3\1\2\0\1\11\4\0\1\1\1\11\1\1"+ + "\2\11\6\0\1\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[819]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to XMLTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + public static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to HTMLTokenMaker; this signals that the user has + * ended a line with an unclosed <style> tag. + */ + public static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in JavaScript. + */ + public static final int INTERNAL_IN_JS = -10; + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + public static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + public static final int INTERNAL_IN_JS_STRING_VALID = -13; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + public static final int INTERNAL_IN_JS_CHAR_VALID = -15; + + /** + * Internal type denoting a line ending in CSS. + */ + public static final int INTERNAL_CSS = -16; + + /** + * Internal type denoting a line ending in a CSS property. + */ + public static final int INTERNAL_CSS_PROPERTY = -17; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + public static final int INTERNAL_CSS_VALUE = -18; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + public static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * Whether closing markup tags are automatically completed for HTML. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HTMLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * Returns Token.MARKUP_TAG_NAME. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + languageIndex = LANG_INDEX_JS; + break; + default: + if (initialTokenType<-1024) { + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_CSS_STRING: + state = CSS_STRING; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + break; + } + cssPrevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_CSS; + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HTMLTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HTMLTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 194) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Token type specific to HTMLTokenMaker; this signals that the user has ended a line with an unclosed HTML tag; - * thus a new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG = -1; - - /** - * Token type specific to HTMLTokenMaker; this signals that the user has ended a line with an unclosed - * <script> tag. - */ - public static final int INTERNAL_INTAG_SCRIPT = -2; - - /** - * Token type specifying we're in a double-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; - - /** - * Token type specifying we're in a single-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; - - /** - * Token type specifying we're in JavaScript. - */ - public static final int INTERNAL_IN_JS = -5; - - /** - * Token type specifying we're in a JavaScript multiline comment. - */ - public static final int INTERNAL_IN_JS_MLC = -6; - - /** - * Whether closing markup tags are automatically completed for HTML. - */ - private static boolean completeCloseTags; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public HTMLTokenMaker() { - super(); + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public boolean getCompleteCloseTags() { - return completeCloseTags; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = COMMENT; - start = text.offset; - break; - case Token.PREPROCESSOR: - state = PI; - start = text.offset; - break; - case Token.VARIABLE: - state = DTD; - start = text.offset; - break; - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - case INTERNAL_INTAG_SCRIPT: - state = INTAG_SCRIPT; - start = text.offset; - break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = INATTR_DOUBLE; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = INATTR_SINGLE; - start = text.offset; - break; - case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: - state = INATTR_DOUBLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: - state = INATTR_SINGLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_IN_JS: - state = JAVASCRIPT; - start = text.offset; - break; - case INTERNAL_IN_JS_MLC: - state = JS_MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @param complete - * Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public HTMLTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public HTMLTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 194) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 2: { - addToken(Token.IDENTIFIER); - } - case 58: - break; - case 25: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 59: - break; - case 54: { - addToken(Token.LITERAL_BOOLEAN); - } - case 60: - break; - case 44: { - addToken(Token.ERROR_CHAR); - } - case 61: - break; - case 41: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 62: - break; - case 23: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE_SCRIPT); - } - case 63: - break; - case 34: { - int count = yylength(); - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 1); // yypushback(count-1); - yybegin(INTAG_CHECK_TAG_NAME); - } - case 64: - break; - case 14: { - yybegin(YYINITIAL); - addToken(Token.MARKUP_TAG_DELIMITER); - } - case 65: - break; - case 9: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 66: - break; - case 45: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 67: - break; - case 33: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 68: - break; - case 55: { - addToken(Token.FUNCTION); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 69: - break; - case 39: { - addToken(Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 70: - break; - case 28: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 71: - break; - case 35: { - start = zzMarkedPos - 2; - yybegin(DTD); - } - case 72: - break; - case 57: { - yybegin(YYINITIAL); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 7, zzMarkedPos - 2, Token.MARKUP_TAG_NAME); - addToken(zzMarkedPos - 1, zzMarkedPos - 1, Token.MARKUP_TAG_DELIMITER); - } - case 73: - break; - case 30: { - addToken(Token.ERROR_CHAR); - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 74: - break; - case 18: { /* Shouldn't happen */ - yypushback(1); - yybegin(INTAG); - } - case 75: - break; - case 27: { - addToken(Token.ERROR_IDENTIFIER); - } - case 76: - break; - case 40: { - start = zzMarkedPos - 2; - yybegin(JS_MLC); - } - case 77: - break; - case 21: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 78: - break; - case 4: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(INTAG); - } - case 79: - break; - case 10: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.VARIABLE); - } - case 80: - break; - case 47: { - yybegin(JAVASCRIPT); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 81: - break; - case 37: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.PREPROCESSOR); - } - case 82: - break; - case 50: { - addToken(Token.LITERAL_CHAR); - } - case 83: - break; - case 36: { - start = zzMarkedPos - 2; - yybegin(PI); - } - case 84: - break; - case 16: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE); - } - case 85: - break; - case 43: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 86: - break; - case 17: { /* A non-recognized HTML tag name */ - yypushback(yylength()); - yybegin(INTAG); - } - case 87: - break; - case 24: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE_SCRIPT); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 55: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 113: break; + case 80: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 114: break; + case 64: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 115: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 116: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 117: break; + case 49: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 118: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 119: break; + case 106: + { addToken(Token.RESERVED_WORD_2); + } + case 120: break; + case 90: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 121: break; + case 87: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 122: break; + case 40: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 123: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 124: break; + case 107: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 125: break; + case 89: + { addToken(Token.REGEX); + } + case 126: break; + case 42: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 127: break; + case 111: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 128: break; + case 102: + { addToken(Token.FUNCTION); + } + case 129: break; + case 8: + { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 130: break; + case 36: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 131: break; + case 46: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 132: break; + case 91: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack<>(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 133: break; + case 72: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 134: break; + case 67: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 135: break; + case 69: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 136: break; + case 20: + { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 137: break; + case 25: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 138: break; + case 35: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 139: break; + case 83: + { /* Skip all escaped chars. */ + } + case 140: break; + case 77: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 141: break; + case 28: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 142: break; + case 101: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 143: break; + case 96: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 144: break; + case 56: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 145: break; + case 17: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 146: break; + case 26: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 147: break; + case 65: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 148: break; + case 92: + { varDepths.push(Boolean.TRUE); + } + case 149: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 150: break; + case 7: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 151: break; + case 85: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 152: break; + case 24: + { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 153: break; + case 37: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 154: break; + case 99: + { addToken(Token.COMMENT_MULTILINE); + } + case 155: break; + case 75: + { start = zzMarkedPos-2; yybegin(PI); + } + case 156: break; + case 108: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 157: break; + case 51: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 158: break; + case 9: + { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 159: break; + case 73: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-1); //yypushback(count-1); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 160: break; + case 63: + { /* Skip escaped chars. */ + } + case 161: break; + case 84: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 162: break; + case 105: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); + } + case 163: break; + case 76: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 164: break; + case 86: + { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 165: break; + case 30: + { addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 166: break; + case 39: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 167: break; + case 15: + { addToken(Token.OPERATOR); + } + case 168: break; + case 58: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 169: break; + case 97: + { start = zzMarkedPos-4; yybegin(COMMENT); + } + case 170: break; + case 94: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); + } + case 171: break; + case 110: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 172: break; + case 88: + { addToken(Token.VARIABLE); + } + case 173: break; + case 44: + { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 174: break; + case 70: + { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 175: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 176: break; + case 103: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 177: break; + case 22: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); + } + case 178: break; + case 104: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 179: break; + case 54: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 180: break; + case 31: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 181: break; + case 62: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 182: break; + case 52: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 183: break; + case 68: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 184: break; + case 41: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 185: break; + case 34: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 186: break; + case 79: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 187: break; + case 82: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 188: break; + case 60: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 189: break; + case 112: + { addToken(Token.ANNOTATION); + } + case 190: break; + case 29: + { addToken(Token.ERROR_IDENTIFIER); + } + case 191: break; + case 57: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 192: break; + case 98: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 193: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 194: break; + case 100: + { addToken(Token.LITERAL_BOOLEAN); + } + case 195: break; + case 18: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 196: break; + case 3: + { addNullToken(); return firstToken; + } + case 197: break; + case 45: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 198: break; + case 109: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 199: break; + case 50: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 200: break; + case 53: + { addToken(Token.RESERVED_WORD); + } + case 201: break; + case 12: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 202: break; + case 14: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 203: break; + case 47: + { addToken(Token.DATA_TYPE); + } + case 204: break; + case 33: + { addToken(Token.SEPARATOR); + } + case 205: break; + case 93: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 206: break; + case 61: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 207: break; + case 59: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 208: break; + case 19: + { addToken(Token.MARKUP_TAG_NAME); + } + case 209: break; + case 11: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 210: break; + case 78: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 211: break; + case 38: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 212: break; + case 81: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 213: break; + case 16: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 214: break; + case 95: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 215: break; + case 13: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 216: break; + case 66: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 217: break; + case 32: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 218: break; + case 74: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 219: break; + case 21: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 220: break; + case 43: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 221: break; + case 71: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 222: break; + case 48: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 223: break; + case 1: + { + } + case 224: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } - case 88: - break; - case 5: { - addToken(Token.WHITESPACE); + case 820: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 89: - break; - case 6: { - addToken(Token.DATA_TYPE); + case 821: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } - case 90: - break; - case 19: { - addToken(Token.MARKUP_TAG_NAME); + case 822: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } - case 91: - break; - case 29: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + case 823: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } - case 92: - break; - case 15: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE); + case 824: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } - case 93: - break; - case 11: { - addToken(Token.MARKUP_TAG_ATTRIBUTE); + case 825: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; } - case 94: - break; - case 20: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + case 826: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } - case 95: - break; - case 26: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_CHAR); + case 827: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } - case 96: - break; - case 51: { - start = zzMarkedPos - 4; - yybegin(COMMENT); + case 828: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; } - case 97: - break; - case 46: { - addToken(Token.RESERVED_WORD); + case 829: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; } - case 98: - break; - case 56: { - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 6, zzMarkedPos - 1, Token.MARKUP_TAG_NAME); - start = zzMarkedPos; - yybegin(INTAG_SCRIPT); + case 830: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } - case 99: - break; - case 49: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.COMMENT_MULTILINE); + case 831: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } - case 100: - break; - case 48: { - int count = yylength(); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 2); // yypushback(count-2); - yybegin(INTAG_CHECK_TAG_NAME); + case 832: break; + case PI: { + addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } - case 101: - break; - case 32: { - addToken(Token.SEPARATOR); + case 833: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; } - case 102: - break; - case 31: { - addToken(Token.ERROR_STRING_DOUBLE); - addEndToken(INTERNAL_IN_JS); - return firstToken; + case 834: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 103: - break; - case 3: { - addNullToken(); - return firstToken; + case 835: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 104: - break; - case 22: { - yybegin(JAVASCRIPT); - addToken(Token.MARKUP_TAG_DELIMITER); + case 836: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } - case 105: - break; - case 38: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(YYINITIAL); + case 837: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } - case 106: - break; - case 7: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 838: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 107: - break; - case 12: { - addToken(Token.OPERATOR); + case 839: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } - case 108: - break; - case 42: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 840: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } - case 109: - break; - case 13: { - addToken(Token.MARKUP_TAG_DELIMITER); + case 841: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; } - case 110: - break; - case 52: { - addToken(Token.COMMENT_MULTILINE); + case 842: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 111: - break; - case 8: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - return firstToken; + case 843: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } - case 112: - break; - case 53: { - addToken(Token.ERROR_STRING_DOUBLE); + case 844: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 113: - break; - case 1: { + case 845: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } - case 114: - break; + case 846: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case INTAG_CHECK_TAG_NAME: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 567: - break; - case JS_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; - } - case 568: - break; - case INTAG_SCRIPT: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG_SCRIPT); - return firstToken; - } - case 569: - break; - case INATTR_DOUBLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); - return firstToken; - } - case 570: - break; - case INATTR_SINGLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); - return firstToken; - } - case 571: - break; - case DTD: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 572: - break; - case INATTR_SINGLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 573: - break; - case INATTR_DOUBLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 574: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 575: - break; - case INTAG: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 576: - break; - case COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 577: - break; - case JAVASCRIPT: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 578: - break; - case PI: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - return firstToken; - } - case 579: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex old mode 100644 new mode 100755 similarity index 60% rename from tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex rename to tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex index 0bda1697f..2fcb2ebf0 --- a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/BBCodeTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.flex @@ -1,24 +1,8 @@ /* - * 11/18/2009 + * 10/17/2015 * - * BBCodeTokenMaker.java - Generates tokens for BBCode syntax highlighting. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,7 +13,7 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Scanner for BBCode. + * Scanner for hosts files.

                      * * This implementation was created using * JFlex 1.4.1; however, the generated file @@ -49,7 +33,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

                        - *
                      • The generated BBCodeTokenMaker.java file will contain two + *
                      • The generated HostsTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,14 +47,14 @@ import org.fife.ui.rsyntaxtextarea.*; *
                      * * @author Robert Futrell - * @version 0.7 + * @version 0.5 * */ %% %public -%class BBCodeTokenMaker -%extends AbstractMarkupTokenMaker +%class HostsTokenMaker +%extends AbstractJFlexTokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -78,23 +62,28 @@ import org.fife.ui.rsyntaxtextarea.*; %{ /** - * Token type specific to BBCodeTokenMaker; this signals that the user has - * ended a line with an unclosed tag; thus a new line is beginning - * still inside of the tag. + * Whether or not this is the first token on a line. */ - public static final int INTERNAL_INTAG = -1; + private boolean first; + /** - * Whether closing markup tags are automatically completed for BBCode. + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. */ - private static boolean completeCloseTags = true; + public HostsTokenMaker() { + } /** - * Constructor. This must be here because JFlex does not generate a - * no-parameter constructor. + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) */ - public BBCodeTokenMaker() { + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); } @@ -127,8 +116,9 @@ import org.fife.ui.rsyntaxtextarea.*; * @param end The ending offset in the array. * @param tokenType The token's type. * @param startOffset The offset in the document at which this token - * occurs. + * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -136,24 +126,20 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Sets whether markup close tags should be completed. The default value - * for BBCode is true. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) + * {@inheritDoc} */ - public boolean getCompleteCloseTags() { - return completeCloseTags; + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; } /** - * Returns null since BBCode has no comments. - * - * @return null always. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { - return null; + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.RESERVED_WORD; } @@ -173,17 +159,10 @@ import org.fife.ui.rsyntaxtextarea.*; resetTokenList(); this.offsetShift = -text.offset + startOffset; + first = true; // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - default: - state = Token.NULL; - } + int state = YYINITIAL; s = text; try { @@ -192,23 +171,12 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } - /** - * Sets whether markup close tags should be completed. - * - * @param complete Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; - } - - /** * Refills the input buffer. * @@ -252,33 +220,37 @@ import org.fife.ui.rsyntaxtextarea.*; %} -Whitespace = ([ \t\f]+) -LineTerminator = ([\n]) -Identifier = ([^ \t\f\n\[]+) -InTagIdentifier = ([^ \t\f\n\[\]\/\=]+) -Tag = ("b"|"i"|"u"|"s"|"size"|"color"|"center"|"quote"|"url"|"img"|"ul"|"li"|"ol"|"youtube"|"gvideo") +Identifier = ([^# \t\n]+) +Whitespace = ([ \t]+) +LineCommentBegin = "#" + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z0-9_\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) -%state INTAG +%state EOL_COMMENT %% { - {Identifier} { addToken(Token.IDENTIFIER); } + {Identifier} { + addToken(first ? Token.RESERVED_WORD : Token.IDENTIFIER); + first = false; + } {Whitespace} { addToken(Token.WHITESPACE); } - "[" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } - "[/" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); } - {LineTerminator} { addNullToken(); return firstToken; } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + \n | <> { addNullToken(); return firstToken; } } - { - "/" { addToken(Token.MARKUP_TAG_DELIMITER); } - {Tag} { addToken(Token.MARKUP_TAG_NAME); } - {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } - {Whitespace} { addToken(Token.WHITESPACE); } - "=" { addToken(Token.OPERATOR); } - "/]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } - "]" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } - . { addToken(Token.IDENTIFIER); /* Unhandled chars, not likely */ } - <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java new file mode 100755 index 000000000..801545c85 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HostsTokenMaker.java @@ -0,0 +1,679 @@ +/* The following code was generated by JFlex 1.4.1 on 10/17/15 12:49 AM */ + +/* + * 10/17/2015 + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for hosts files.

                      + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                      + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                        + *
                      • The generated HostsTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                      • + *
                      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                      • + *
                      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                      • + *
                      + * + * @author Robert Futrell + * @version 0.5 + * + */ + +public class HostsTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 1; + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\2\1\1\25\0\1\2\1\4\1\0\1\3\1\6\1\4"+ + "\7\4\1\4\1\21\1\5\12\6\1\17\1\4\1\0\1\4\1\0"+ + "\2\4\32\6\1\4\1\0\1\4\1\0\1\4\1\0\4\6\1\16"+ + "\1\13\1\6\1\7\1\14\2\6\1\15\3\6\1\11\2\6\1\12"+ + "\1\10\2\6\1\20\3\6\3\0\1\4\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\2\0\1\1\1\2\1\3\1\4\1\5\1\6\3\5"+ + "\12\0\1\7\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[24]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\22\0\44\0\66\0\110\0\66\0\132\0\66"+ + "\0\154\0\176\0\220\0\242\0\264\0\306\0\330\0\352"+ + "\0\374\0\u010e\0\u0120\0\u0132\0\u0144\0\u0156\0\u0168\0\u0156"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[24]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\16\3\1\7\1\10\5\7"+ + "\1\11\3\7\1\12\4\7\1\13\1\7\1\3\3\0"+ + "\16\3\24\0\1\5\17\0\1\7\1\0\5\7\1\0"+ + "\3\7\1\0\4\7\1\0\1\7\10\0\1\14\21\0"+ + "\1\15\3\0\1\16\25\0\1\17\11\0\1\20\22\0"+ + "\1\21\25\0\1\22\24\0\1\23\12\0\1\24\27\0"+ + "\1\25\20\0\1\21\24\0\1\26\12\0\1\21\4\0"+ + "\1\25\7\0\1\27\17\0\2\30\12\26\1\30\1\26"+ + "\1\30\5\0\1\26\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[378]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\2\0\1\1\1\11\1\1\1\11\1\1\1\11\3\1"+ + "\12\0\1\1\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[24]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Whether or not this is the first token on a line. + */ + private boolean first; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HostsTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type == Token.RESERVED_WORD; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + first = true; + + // Start off in the proper state. + int state = YYINITIAL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HostsTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HostsTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 94) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { addNullToken(); return firstToken; + } + case 8: break; + case 7: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 9: break; + case 4: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 10: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 11: break; + case 6: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 12: break; + case 1: + { addToken(first ? Token.RESERVED_WORD : Token.IDENTIFIER); + first = false; + } + case 13: break; + case 5: + { + } + case 14: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 25: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 26: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex new file mode 100755 index 000000000..5c89ed852 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.flex @@ -0,0 +1,500 @@ +/* + * 06/30/2013 + * + * HtaccessTokenMaker.java - Token generator for .htaccess files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for .htaccess files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                      + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                        + *
                      • The generated HtaccessTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                      • + *
                      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                      • + *
                      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                      • + *
                      + * + * @author Robert Futrell + * @version 0.7 + * + */ +%% + +%public +%class HtaccessTokenMaker +%extends AbstractJFlexTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HtaccessTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns how to transform a line into a line comment. + * + * @return The line comment start and end text for .htaccess files. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + default: + state = YYINITIAL; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +NameStartChar = ([\:A-Z_a-z]) +NameChar = ({NameStartChar}|[\-\.0-9]) +TagName = ({NameStartChar}{NameChar}*) +Whitespace = ([ \t\f]+) +Identifier = ([^ \t\n<#]+) +InTagIdentifier = ([^ \t\n\"\'=>]+) +LineCommentBegin = ("#") + +AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +Escape = ("\\".) +StringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) +UnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) +ErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + +NameStartChar = ([\:A-Z_a-z]) +NameChar = ({NameStartChar}|[\-\.0-9]) +TagName = ({NameStartChar}{NameChar}*) +DirectiveStart = (("<"[/]?){TagName}) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ([A-Za-z_0-9\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$A-Za-z0-9]) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + +%state EOL_COMMENT +%state INTAG +%state INATTR_DOUBLE +%state INATTR_SINGLE + +%% + + { + + {Whitespace} { addToken(Token.WHITESPACE); } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + + "<"{TagName} { + int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + "> { addNullToken(); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + {Whitespace}+ { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); } + <> { addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } +} + + { + [^\']* {} + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java new file mode 100755 index 000000000..7801dc61a --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/HtaccessTokenMaker.java @@ -0,0 +1,1506 @@ +/* The following code was generated by JFlex 1.4.1 on 7/14/13 10:47 PM */ + +/* + * 06/30/2013 + * + * HtaccessTokenMaker.java - Token generator for .htaccess files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for .htaccess files. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                      + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                      + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                        + *
                      • The generated HtaccessTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                      • + *
                      • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                      • + *
                      • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                      • + *
                      + * + * @author Robert Futrell + * @version 0.7 + * + */ + +public class HtaccessTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 1; + public static final int INTAG = 2; + public static final int INATTR_DOUBLE = 3; + public static final int YYINITIAL = 0; + public static final int INATTR_SINGLE = 4; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\5\1\7\1\0\1\3\23\0\1\5\1\14\1\12\1\10"+ + "\1\21\1\14\1\14\1\16\5\14\1\2\1\33\1\13\12\20\1\15"+ + "\1\14\1\4\1\53\1\6\2\14\1\34\1\41\1\35\1\40\1\31"+ + "\1\26\1\43\1\22\1\27\1\17\1\51\1\30\1\46\1\36\1\37"+ + "\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\32\1\52\1\42"+ + "\1\17\1\14\1\11\1\14\1\0\1\1\1\0\1\34\1\41\1\35"+ + "\1\40\1\31\1\55\1\43\1\54\1\27\1\17\1\51\1\30\1\46"+ + "\1\36\1\37\1\24\1\50\1\44\1\25\1\23\1\45\1\47\1\56"+ + "\1\52\1\42\1\17\3\0\1\14\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\2\1\1\2\1\3\1\2\1\3\1\4\1\5"+ + "\21\2\1\1\1\6\6\1\2\7\1\10\1\11\1\12"+ + "\1\13\1\1\1\14\1\1\1\15\1\0\2\16\44\2"+ + "\4\1\4\0\1\17\1\16\1\20\1\16\1\21\56\2"+ + "\4\1\4\0\62\2\1\22\13\2\3\1\1\23\2\0"+ + "\104\2\1\1\2\0\1\22\12\2\1\22\31\2\1\22"+ + "\146\2\1\22\60\2\1\22\33\2\1\22\47\2\1\22"+ + "\225\2\1\22\33\2\1\22\102\2\1\22\1\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[795]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\57\0\136\0\215\0\274\0\353\0\u011a\0\u0149"+ + "\0\u0178\0\u01a7\0\u01a7\0\u01d6\0\u0205\0\u0234\0\u0263\0\u0292"+ + "\0\u02c1\0\u02f0\0\u031f\0\u034e\0\u037d\0\u03ac\0\u03db\0\u040a"+ + "\0\u0439\0\u0468\0\u0497\0\u04c6\0\u04f5\0\u01a7\0\u0524\0\u0553"+ + "\0\u0582\0\u05b1\0\u05e0\0\u060f\0\u063e\0\u066d\0\u01a7\0\u01a7"+ + "\0\u01a7\0\u01a7\0\u069c\0\u01a7\0\u06cb\0\u06fa\0\u0729\0\u0758"+ + "\0\u0787\0\u07b6\0\u07e5\0\u0814\0\u0843\0\u0872\0\u08a1\0\u08d0"+ + "\0\u08ff\0\u092e\0\u095d\0\u098c\0\u09bb\0\u09ea\0\u0a19\0\u0a48"+ + "\0\u0a77\0\u0aa6\0\u0ad5\0\u0b04\0\u0b33\0\u0b62\0\u0b91\0\u0bc0"+ + "\0\u0bef\0\u0c1e\0\u0c4d\0\u0c7c\0\u0cab\0\u0cda\0\u0d09\0\u0d38"+ + "\0\u0d67\0\u0d96\0\u0dc5\0\u0df4\0\u0e23\0\u0e52\0\u0e81\0\u0eb0"+ + "\0\u0edf\0\u0f0e\0\u0f3d\0\u0f6c\0\u0f9b\0\u0fca\0\u0ff9\0\u01a7"+ + "\0\u1028\0\u01a7\0\u1057\0\u1086\0\u10b5\0\u10e4\0\u1113\0\u1142"+ + "\0\u1171\0\u11a0\0\u11cf\0\u11fe\0\u122d\0\u125c\0\u128b\0\u12ba"+ + "\0\u12e9\0\u1318\0\u1347\0\u1376\0\u13a5\0\u13d4\0\u1403\0\u1432"+ + "\0\u1461\0\u1490\0\u14bf\0\u14ee\0\u151d\0\u154c\0\u157b\0\u15aa"+ + "\0\u15d9\0\u1608\0\u1637\0\u1666\0\u1695\0\u16c4\0\u16f3\0\u1722"+ + "\0\u1751\0\u1780\0\u17af\0\u17de\0\u180d\0\u183c\0\u186b\0\u189a"+ + "\0\u18c9\0\u18f8\0\u1927\0\u1956\0\u1985\0\u19b4\0\u19e3\0\u1a12"+ + "\0\u1a41\0\u1a70\0\u1a9f\0\u1ace\0\u1afd\0\u1b2c\0\u1b5b\0\u1b8a"+ + "\0\u1bb9\0\u1be8\0\u1c17\0\u1c46\0\u1c75\0\u1ca4\0\u1cd3\0\u1d02"+ + "\0\u1d31\0\u1d60\0\u1d8f\0\u1dbe\0\u1ded\0\u1e1c\0\u1e4b\0\u1e7a"+ + "\0\u1ea9\0\u1ed8\0\u1f07\0\u1f36\0\u1f65\0\u1f94\0\u1fc3\0\u1ff2"+ + "\0\u2021\0\u2050\0\u207f\0\u20ae\0\u20dd\0\u210c\0\u213b\0\u216a"+ + "\0\u2199\0\u21c8\0\u21f7\0\u2226\0\u2255\0\u2284\0\u22b3\0\u22e2"+ + "\0\u2311\0\u2340\0\353\0\u236f\0\u239e\0\u23cd\0\u23fc\0\u242b"+ + "\0\u245a\0\u2489\0\u24b8\0\u24e7\0\u2516\0\u2545\0\u2574\0\u25a3"+ + "\0\u25d2\0\u2601\0\u2630\0\u265f\0\u268e\0\u26bd\0\u26ec\0\u271b"+ + "\0\u274a\0\u2779\0\u27a8\0\u27d7\0\u2806\0\u2835\0\u2864\0\u2893"+ + "\0\u28c2\0\u28f1\0\u2920\0\u294f\0\u297e\0\u29ad\0\u29dc\0\u2a0b"+ + "\0\u2a3a\0\u2a69\0\u2a98\0\u2ac7\0\u2af6\0\u2b25\0\u2b54\0\u2b83"+ + "\0\u2bb2\0\u2be1\0\u2c10\0\u2c3f\0\u2c6e\0\u2c9d\0\u2ccc\0\u2cfb"+ + "\0\u2d2a\0\u2d59\0\u2d88\0\u2db7\0\u2de6\0\u2e15\0\u2e44\0\u2e73"+ + "\0\u2ea2\0\u2ed1\0\u2f00\0\u2f2f\0\u2f5e\0\u2f8d\0\u2fbc\0\u2feb"+ + "\0\u301a\0\u3049\0\u3078\0\u30a7\0\u30d6\0\u3105\0\u3134\0\u3163"+ + "\0\u3192\0\u31c1\0\u31f0\0\u321f\0\u324e\0\u327d\0\u32ac\0\u32db"+ + "\0\u330a\0\u2601\0\u3339\0\u3368\0\u3397\0\u33c6\0\u33f5\0\u3424"+ + "\0\u3453\0\u3482\0\u34b1\0\u34e0\0\u350f\0\u353e\0\u356d\0\u359c"+ + "\0\u35cb\0\u35fa\0\u3629\0\u3658\0\u3687\0\u36b6\0\u36e5\0\u3714"+ + "\0\u3743\0\u3772\0\u37a1\0\u37d0\0\u37ff\0\u382e\0\u385d\0\u388c"+ + "\0\u38bb\0\u38ea\0\u3919\0\u3948\0\u3977\0\u39a6\0\u39d5\0\u3a04"+ + "\0\u3a33\0\u3a62\0\u3a91\0\u3ac0\0\u3aef\0\u3b1e\0\u3b4d\0\u3b7c"+ + "\0\u3bab\0\u3bda\0\u3c09\0\u3c38\0\u3c67\0\u3c96\0\u3cc5\0\u3cf4"+ + "\0\u3d23\0\u3d52\0\u3d81\0\u3db0\0\u3ddf\0\u3e0e\0\u3e3d\0\u3e6c"+ + "\0\u3368\0\u3e9b\0\u3eca\0\u3ef9\0\u3f28\0\u3f57\0\u3f86\0\u3fb5"+ + "\0\u3fe4\0\u4013\0\u4042\0\u4071\0\u40a0\0\u40cf\0\u40fe\0\u412d"+ + "\0\u415c\0\u418b\0\u41ba\0\u41e9\0\u4218\0\u4247\0\u4276\0\u42a5"+ + "\0\u42d4\0\u4303\0\u4332\0\u4361\0\u4390\0\u43bf\0\u43ee\0\u441d"+ + "\0\u444c\0\u447b\0\u44aa\0\u44d9\0\u4508\0\u4537\0\u4566\0\u4595"+ + "\0\u45c4\0\u45f3\0\u4622\0\u4651\0\u4680\0\u46af\0\u46de\0\u470d"+ + "\0\u473c\0\u476b\0\u479a\0\u47c9\0\u47f8\0\u4827\0\u4856\0\u4885"+ + "\0\u48b4\0\u48e3\0\u4912\0\u4941\0\u4970\0\u499f\0\u49ce\0\u49fd"+ + "\0\u4a2c\0\u4a5b\0\u4a8a\0\u4ab9\0\u4ae8\0\u4b17\0\u4b46\0\u4b75"+ + "\0\u4ba4\0\u4bd3\0\u4c02\0\u4c31\0\u4c60\0\u4c8f\0\u4cbe\0\u4ced"+ + "\0\u4d1c\0\u4d4b\0\u4d7a\0\u4da9\0\u4dd8\0\u4e07\0\u4e36\0\u4e65"+ + "\0\u4e94\0\u4ec3\0\u4ef2\0\u4f21\0\u4f50\0\u4f7f\0\u4fae\0\u4fdd"+ + "\0\u500c\0\u503b\0\u506a\0\u5099\0\u50c8\0\u50f7\0\u5126\0\u5155"+ + "\0\u5184\0\u51b3\0\u51e2\0\u5211\0\u5240\0\u526f\0\u529e\0\u52cd"+ + "\0\u52fc\0\u532b\0\u535a\0\u5389\0\u53b8\0\u53e7\0\u5416\0\u5445"+ + "\0\u5474\0\u54a3\0\u54d2\0\u5501\0\u5530\0\u555f\0\u558e\0\u55bd"+ + "\0\u55ec\0\u561b\0\u564a\0\u5679\0\u56a8\0\u56d7\0\u5706\0\u5735"+ + "\0\u5764\0\u5793\0\u57c2\0\u57f1\0\u5820\0\u584f\0\u587e\0\u58ad"+ + "\0\u58dc\0\u590b\0\u593a\0\u5969\0\u5998\0\u59c7\0\u59f6\0\u5a25"+ + "\0\u5a54\0\u5a83\0\u5ab2\0\u5ae1\0\u5b10\0\u5b3f\0\u5b6e\0\u5b9d"+ + "\0\u5bcc\0\u5bfb\0\u5c2a\0\u5c59\0\u5c88\0\u5cb7\0\u5ce6\0\u5d15"+ + "\0\u5d44\0\u5d73\0\u5da2\0\u5dd1\0\u5e00\0\u5e2f\0\u5e5e\0\u5e8d"+ + "\0\u5ebc\0\u5eeb\0\u5f1a\0\u5f49\0\u5f78\0\u5fa7\0\u5fd6\0\u6005"+ + "\0\u6034\0\u6063\0\u6092\0\u60c1\0\u60f0\0\u611f\0\u614e\0\u617d"+ + "\0\u61ac\0\u61db\0\u620a\0\u6239\0\u6268\0\u6297\0\u62c6\0\u62f5"+ + "\0\u6324\0\u6353\0\u6382\0\u63b1\0\u63e0\0\u640f\0\u643e\0\u646d"+ + "\0\u649c\0\u64cb\0\u64fa\0\u6529\0\u6558\0\u6587\0\u65b6\0\u65e5"+ + "\0\u6614\0\u6643\0\u6672\0\u66a1\0\u66d0\0\u66ff\0\u672e\0\u675d"+ + "\0\u678c\0\u67bb\0\u67ea\0\u6819\0\u6848\0\u6877\0\u68a6\0\u68d5"+ + "\0\u6904\0\u6933\0\u6962\0\u6991\0\u69c0\0\u69ef\0\u6a1e\0\u6a4d"+ + "\0\u6a7c\0\u6aab\0\u6ada\0\u6b09\0\u6b38\0\u6b67\0\u6b96\0\u6bc5"+ + "\0\u6bf4\0\u6c23\0\u6c52\0\u6c81\0\u6cb0\0\u6cdf\0\u6d0e\0\u6d3d"+ + "\0\u6d6c\0\u6d9b\0\u6dca\0\u6df9\0\u6e28\0\u6e57\0\u6e86\0\u6eb5"+ + "\0\u6ee4\0\u6f13\0\u6f42\0\u6f71\0\u6fa0\0\u6fcf\0\u6ffe\0\u702d"+ + "\0\u705c\0\u708b\0\u70ba\0\u70e9\0\u7118\0\u7147\0\u7176\0\u71a5"+ + "\0\u71d4\0\u7203\0\u7232\0\u7261\0\u7290\0\u72bf\0\u72ee\0\u731d"+ + "\0\u734c\0\u737b\0\u73aa\0\u73d9\0\u7408\0\u7437\0\u7466\0\u7495"+ + "\0\u74c4\0\u74f3\0\u7522\0\u7551\0\u7580\0\u75af\0\u75de\0\u760d"+ + "\0\u763c\0\u766b\0\u769a\0\u76c9\0\u76f8\0\u7727\0\u7756\0\u7785"+ + "\0\u77b4\0\u77e3\0\u7812\0\u7841\0\u7870\0\u789f\0\u78ce\0\u78fd"+ + "\0\u792c\0\u795b\0\u798a\0\u79b9\0\u79e8\0\u7a17\0\u7a46\0\u7a75"+ + "\0\u7aa4\0\u7ad3\0\u7b02\0\u7b31\0\u7b60\0\u7b8f\0\u7bbe\0\u7bed"+ + "\0\u7c1c\0\u7c4b\0\u7c7a\0\u7ca9\0\u7cd8\0\u7d07\0\u7d36\0\u7d65"+ + "\0\u7d94\0\u7dc3\0\u7df2\0\u7e21\0\u7e50\0\u7e7f\0\u7eae\0\u7edd"+ + "\0\u7f0c\0\u7f3b\0\u7f6a\0\u7f99\0\u7fc8\0\u7ff7\0\u8026\0\u8055"+ + "\0\u8084\0\u80b3\0\u80e2\0\u8111\0\u8140\0\u816f\0\u819e\0\u81cd"+ + "\0\u81fc\0\u822b\0\u825a\0\u8289\0\u82b8\0\u82e7\0\u8316\0\u8345"+ + "\0\u8374\0\u83a3\0\u83d2\0\u8401\0\u8430\0\u845f\0\u848e\0\u84bd"+ + "\0\u84ec\0\u851b\0\u854a\0\u8579\0\u85a8\0\u85d7\0\u8606\0\u8635"+ + "\0\u8664\0\u8693\0\u86c2\0\u86f1\0\u8720\0\u874f\0\u877e\0\u87ad"+ + "\0\u87dc\0\u880b\0\u883a\0\u8869\0\u8898\0\u88c7\0\u88f6\0\u8925"+ + "\0\u8954\0\u8983\0\u89b2\0\u89e1\0\u8a10\0\u8a3f\0\u8a6e\0\u8a9d"+ + "\0\u8acc\0\u8afb\0\u8b2a\0\u8b59\0\u8b88\0\u8bb7\0\u8be6\0\u8c15"+ + "\0\u8c44\0\u8c73\0\u8ca2\0\u8cd1\0\u8d00\0\u8d2f\0\u8d5e\0\u8d8d"+ + "\0\u8dbc\0\u8deb\0\u8e1a\0\u8e49\0\u8e78\0\u8ea7\0\u8ed6\0\u8f05"+ + "\0\u8f34\0\u8b2a\0\u8f63"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[795]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\3\6\1\7\1\10\1\11\1\6\1\12\1\13\1\6"+ + "\1\14\7\6\1\15\1\6\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\2\6\1\24\1\25\1\6\1\26\1\27"+ + "\1\30\2\6\1\31\1\32\1\33\3\6\1\34\1\6"+ + "\1\15\1\20\1\6\7\35\1\36\12\35\1\37\3\35"+ + "\1\40\3\35\1\41\21\35\1\42\1\43\1\44\3\45"+ + "\1\46\1\45\1\11\1\47\1\0\2\45\1\50\3\45"+ + "\1\51\34\45\1\52\3\45\12\53\1\54\44\53\16\55"+ + "\1\54\40\55\4\6\2\0\1\6\2\0\51\6\1\7"+ + "\1\0\1\11\1\6\2\0\46\6\1\0\1\56\11\0"+ + "\1\57\1\0\1\56\1\0\1\56\2\0\11\56\1\0"+ + "\17\56\1\0\3\56\3\0\1\11\1\0\1\11\130\0"+ + "\4\14\2\60\1\14\1\61\1\60\1\62\1\6\44\14"+ + "\4\6\2\0\1\6\2\0\20\6\1\63\31\6\2\0"+ + "\1\6\2\0\23\6\1\64\26\6\2\0\1\6\2\0"+ + "\14\6\1\65\3\6\1\66\2\6\1\67\1\70\25\6"+ + "\2\0\1\6\2\0\16\6\1\71\7\6\1\72\23\6"+ + "\2\0\1\6\2\0\14\6\1\73\10\6\1\74\7\6"+ + "\1\75\14\6\2\0\1\6\2\0\16\6\1\76\4\6"+ + "\1\77\26\6\2\0\1\6\2\0\25\6\1\100\5\6"+ + "\1\101\5\6\1\102\10\6\2\0\1\6\2\0\17\6"+ + "\1\103\4\6\1\104\1\105\1\6\1\106\4\6\1\107"+ + "\15\6\2\0\1\6\2\0\11\6\1\110\14\6\1\111"+ + "\3\6\1\112\10\6\1\110\6\6\2\0\1\6\2\0"+ + "\13\6\1\113\17\6\1\114\16\6\2\0\1\6\2\0"+ + "\16\6\1\115\1\6\1\116\31\6\2\0\1\6\2\0"+ + "\33\6\1\117\16\6\2\0\1\6\2\0\17\6\1\120"+ + "\1\121\31\6\2\0\1\6\2\0\25\6\1\122\24\6"+ + "\2\0\1\6\2\0\20\6\1\123\13\6\1\124\15\6"+ + "\2\0\1\6\2\0\30\6\1\125\15\6\7\35\1\0"+ + "\44\35\3\0\7\35\1\0\13\35\1\126\30\35\3\0"+ + "\7\35\1\0\13\35\1\127\3\35\1\130\24\35\3\0"+ + "\7\35\1\0\22\35\1\131\21\35\2\0\1\132\23\0"+ + "\1\133\56\0\1\134\3\0\1\135\61\0\1\132\23\0"+ + "\1\132\5\45\3\0\2\45\1\0\3\45\1\0\34\45"+ + "\1\0\6\45\1\46\1\45\1\11\2\0\2\45\1\0"+ + "\3\45\1\0\34\45\1\0\3\45\12\53\1\0\44\53"+ + "\16\55\1\0\40\55\1\0\2\56\12\0\1\56\1\0"+ + "\2\56\1\0\31\56\1\0\3\56\1\0\1\136\13\0"+ + "\1\136\1\0\1\136\2\0\11\136\1\0\17\136\1\0"+ + "\3\136\7\60\1\61\1\60\1\137\1\140\44\60\11\61"+ + "\1\141\1\142\44\61\4\14\2\60\1\14\1\0\1\60"+ + "\46\14\4\6\2\0\1\6\2\0\23\6\1\143\26\6"+ + "\2\0\1\6\2\0\14\6\1\144\35\6\2\0\1\6"+ + "\2\0\16\6\1\145\1\146\32\6\2\0\1\6\2\0"+ + "\12\6\1\147\20\6\1\150\16\6\2\0\1\6\2\0"+ + "\12\6\1\151\37\6\2\0\1\6\2\0\33\6\1\152"+ + "\16\6\2\0\1\6\2\0\17\6\1\153\32\6\2\0"+ + "\1\6\2\0\33\6\1\154\16\6\2\0\1\6\2\0"+ + "\23\6\1\155\26\6\2\0\1\6\2\0\27\6\1\156"+ + "\22\6\2\0\1\6\2\0\23\6\1\157\26\6\2\0"+ + "\1\6\2\0\35\6\1\160\14\6\2\0\1\6\2\0"+ + "\25\6\1\161\24\6\2\0\1\6\2\0\23\6\1\162"+ + "\26\6\2\0\1\6\2\0\33\6\1\163\16\6\2\0"+ + "\1\6\2\0\13\6\1\164\7\6\1\165\26\6\2\0"+ + "\1\6\2\0\17\6\1\166\32\6\2\0\1\6\2\0"+ + "\12\6\1\167\11\6\1\170\25\6\2\0\1\6\2\0"+ + "\26\6\1\171\23\6\2\0\1\6\2\0\27\6\1\172"+ + "\22\6\2\0\1\6\2\0\12\6\1\173\37\6\2\0"+ + "\1\6\2\0\20\6\1\174\2\6\1\175\26\6\2\0"+ + "\1\6\2\0\25\6\1\176\1\177\23\6\2\0\1\6"+ + "\2\0\16\6\1\200\33\6\2\0\1\6\2\0\12\6"+ + "\1\201\37\6\2\0\1\6\2\0\27\6\1\202\22\6"+ + "\2\0\1\6\2\0\33\6\1\203\16\6\2\0\1\6"+ + "\2\0\15\6\1\204\7\6\1\205\16\6\1\204\5\6"+ + "\2\0\1\6\2\0\26\6\1\206\23\6\2\0\1\6"+ + "\2\0\16\6\1\207\33\6\2\0\1\6\2\0\21\6"+ + "\1\210\1\6\1\211\3\6\1\212\5\6\1\213\1\6"+ + "\1\214\5\6\1\210\4\6\2\0\1\6\2\0\14\6"+ + "\1\215\35\6\2\0\1\6\2\0\12\6\1\216\37\6"+ + "\2\0\1\6\2\0\17\6\1\217\32\6\2\0\1\6"+ + "\2\0\16\6\1\220\27\6\7\35\1\0\13\35\1\221"+ + "\30\35\3\0\7\35\1\0\14\35\1\222\27\35\3\0"+ + "\7\35\1\0\20\35\1\223\23\35\3\0\7\35\1\0"+ + "\22\35\1\224\21\35\2\0\1\225\32\0\1\225\23\0"+ + "\1\225\23\0\1\226\57\0\1\227\62\0\1\230\27\0"+ + "\2\136\12\0\1\136\1\0\2\136\1\0\31\136\1\0"+ + "\3\136\7\60\1\0\47\60\7\61\1\0\47\61\4\6"+ + "\2\0\1\6\2\0\27\6\1\231\22\6\2\0\1\6"+ + "\2\0\14\6\1\232\35\6\2\0\1\6\2\0\12\6"+ + "\1\233\5\6\1\234\31\6\2\0\1\6\2\0\13\6"+ + "\1\235\10\6\1\236\1\6\1\237\4\6\1\240\1\241"+ + "\1\6\1\242\13\6\2\0\1\6\2\0\11\6\1\243"+ + "\4\6\1\244\1\6\1\245\5\6\1\246\14\6\1\243"+ + "\6\6\2\0\1\6\2\0\36\6\1\247\13\6\2\0"+ + "\1\6\2\0\16\6\1\250\33\6\2\0\1\6\2\0"+ + "\16\6\1\251\33\6\2\0\1\6\2\0\20\6\1\252"+ + "\31\6\2\0\1\6\2\0\24\6\1\253\25\6\2\0"+ + "\1\6\2\0\13\6\1\254\36\6\2\0\1\6\2\0"+ + "\20\6\1\255\31\6\2\0\1\6\2\0\13\6\1\256"+ + "\36\6\2\0\1\6\2\0\16\6\1\257\33\6\2\0"+ + "\1\6\2\0\32\6\1\260\17\6\2\0\1\6\2\0"+ + "\30\6\1\261\21\6\2\0\1\6\2\0\26\6\1\262"+ + "\23\6\2\0\1\6\2\0\16\6\1\263\33\6\2\0"+ + "\1\6\2\0\35\6\1\264\14\6\2\0\1\6\2\0"+ + "\26\6\1\265\23\6\2\0\1\6\2\0\16\6\1\266"+ + "\33\6\2\0\1\6\2\0\20\6\1\267\31\6\2\0"+ + "\1\6\2\0\25\6\1\270\24\6\2\0\1\6\2\0"+ + "\11\6\1\243\1\271\3\6\1\272\1\273\1\274\2\6"+ + "\1\275\1\276\1\6\1\277\1\300\13\6\1\243\6\6"+ + "\2\0\1\6\2\0\11\6\1\301\31\6\1\301\6\6"+ + "\2\0\1\6\2\0\24\6\1\302\25\6\2\0\1\6"+ + "\2\0\33\6\1\303\16\6\2\0\1\6\2\0\12\6"+ + "\1\304\37\6\2\0\1\6\2\0\40\6\1\305\11\6"+ + "\2\0\1\6\2\0\35\6\1\306\14\6\2\0\1\6"+ + "\2\0\16\6\1\307\33\6\2\0\1\6\2\0\20\6"+ + "\1\310\31\6\2\0\1\6\2\0\20\6\1\311\31\6"+ + "\2\0\1\6\2\0\23\6\1\312\26\6\2\0\1\6"+ + "\2\0\31\6\1\313\20\6\2\0\1\6\2\0\21\6"+ + "\1\314\23\6\1\314\4\6\2\0\1\6\2\0\35\6"+ + "\1\315\14\6\2\0\1\6\2\0\33\6\1\316\16\6"+ + "\2\0\1\6\2\0\27\6\1\317\22\6\2\0\1\6"+ + "\2\0\16\6\1\320\33\6\2\0\1\6\2\0\26\6"+ + "\1\321\23\6\2\0\1\6\2\0\34\6\1\322\15\6"+ + "\2\0\1\6\2\0\20\6\1\323\31\6\2\0\1\6"+ + "\2\0\23\6\1\324\26\6\2\0\1\6\2\0\12\6"+ + "\1\325\37\6\2\0\1\6\2\0\12\6\1\326\33\6"+ + "\7\35\1\0\14\35\1\327\27\35\3\0\7\35\1\0"+ + "\5\35\1\330\36\35\3\0\7\35\1\0\21\35\1\222"+ + "\22\35\3\0\7\35\1\0\23\35\1\331\20\35\36\0"+ + "\1\332\47\0\1\333\47\0\1\334\72\0\1\227\25\0"+ + "\4\6\2\0\1\6\2\0\20\6\1\335\31\6\2\0"+ + "\1\6\2\0\20\6\1\336\31\6\2\0\1\6\2\0"+ + "\16\6\1\337\33\6\2\0\1\6\2\0\33\6\1\340"+ + "\16\6\2\0\1\6\2\0\33\6\1\341\16\6\2\0"+ + "\1\6\2\0\16\6\1\342\33\6\2\0\1\6\2\0"+ + "\13\6\1\113\36\6\2\0\1\6\2\0\20\6\1\343"+ + "\31\6\2\0\1\6\2\0\14\6\1\344\35\6\2\0"+ + "\1\6\2\0\20\6\1\345\31\6\2\0\1\6\2\0"+ + "\23\6\1\346\26\6\2\0\1\6\2\0\25\6\1\347"+ + "\24\6\2\0\1\6\2\0\25\6\1\350\24\6\2\0"+ + "\1\6\2\0\34\6\1\351\15\6\2\0\1\6\2\0"+ + "\20\6\1\352\31\6\2\0\1\6\2\0\14\6\1\353"+ + "\35\6\2\0\1\6\2\0\13\6\1\354\36\6\2\0"+ + "\1\6\2\0\20\6\1\355\31\6\2\0\1\6\2\0"+ + "\20\6\1\356\31\6\2\0\1\6\2\0\16\6\1\357"+ + "\33\6\2\0\1\6\2\0\41\6\1\360\10\6\2\0"+ + "\1\6\2\0\27\6\1\361\1\362\4\6\1\363\14\6"+ + "\2\0\1\6\2\0\12\6\1\364\37\6\2\0\1\6"+ + "\2\0\34\6\1\365\15\6\2\0\1\6\2\0\17\6"+ + "\1\366\32\6\2\0\1\6\2\0\33\6\1\367\16\6"+ + "\2\0\1\6\2\0\33\6\1\370\16\6\2\0\1\6"+ + "\2\0\13\6\1\371\36\6\2\0\1\6\2\0\21\6"+ + "\1\313\23\6\1\313\4\6\2\0\1\6\2\0\26\6"+ + "\1\372\23\6\2\0\1\6\2\0\13\6\1\373\36\6"+ + "\2\0\1\6\2\0\31\6\1\374\20\6\2\0\1\6"+ + "\2\0\31\6\1\375\20\6\2\0\1\6\2\0\24\6"+ + "\1\376\1\347\24\6\2\0\1\6\2\0\23\6\1\377"+ + "\26\6\2\0\1\6\2\0\25\6\1\u0100\24\6\2\0"+ + "\1\6\2\0\17\6\1\u0101\32\6\2\0\1\6\2\0"+ + "\11\6\1\u0102\31\6\1\u0102\6\6\2\0\1\6\2\0"+ + "\34\6\1\u0103\15\6\2\0\1\6\2\0\20\6\1\u0104"+ + "\31\6\2\0\1\6\2\0\12\6\1\271\4\6\1\u0105"+ + "\3\6\1\u0106\1\6\1\u0107\1\6\1\u0108\1\u0109\1\6"+ + "\1\u010a\1\6\1\u010b\15\6\2\0\1\6\2\0\40\6"+ + "\1\u010c\11\6\2\0\1\6\2\0\14\6\1\u010d\35\6"+ + "\2\0\1\6\2\0\20\6\1\u010e\31\6\2\0\1\6"+ + "\2\0\16\6\1\u010f\33\6\2\0\1\6\2\0\23\6"+ + "\1\u0110\26\6\2\0\1\6\2\0\26\6\1\u0111\23\6"+ + "\2\0\1\6\2\0\33\6\1\313\16\6\2\0\1\6"+ + "\2\0\24\6\1\u0112\25\6\2\0\1\6\2\0\34\6"+ + "\1\u0113\15\6\2\0\1\6\2\0\14\6\1\u0114\35\6"+ + "\2\0\1\6\2\0\16\6\1\u0115\33\6\2\0\1\6"+ + "\2\0\16\6\1\u0116\33\6\2\0\1\6\2\0\35\6"+ + "\1\u0117\14\6\2\0\1\6\2\0\33\6\1\u0118\16\6"+ + "\2\0\1\6\2\0\36\6\1\u0119\13\6\2\0\1\6"+ + "\2\0\16\6\1\u011a\1\6\1\u011b\31\6\2\0\1\6"+ + "\2\0\12\6\1\232\37\6\2\0\1\6\2\0\14\6"+ + "\1\u011c\1\u011d\11\6\1\u011e\14\6\1\u011d\5\6\2\0"+ + "\1\6\2\0\16\6\1\u011f\33\6\2\0\1\6\2\0"+ + "\11\6\1\u0120\31\6\1\u0120\2\6\7\35\1\0\5\35"+ + "\1\330\7\35\1\222\26\35\3\0\7\35\1\0\3\35"+ + "\1\u0121\40\35\3\0\1\35\2\331\4\35\1\0\1\331"+ + "\2\35\41\331\3\332\1\0\2\u0122\5\0\1\u0122\2\0"+ + "\1\332\3\u0122\14\332\1\u0122\17\332\1\u0122\3\332\15\0"+ + "\1\334\7\0\1\227\44\0\1\u0123\43\0\4\6\2\0"+ + "\1\6\2\0\33\6\1\u0124\16\6\2\0\1\6\2\0"+ + "\25\6\1\u0125\24\6\2\0\1\6\2\0\35\6\1\u0126"+ + "\14\6\2\0\1\6\2\0\33\6\1\u0127\16\6\2\0"+ + "\1\6\2\0\26\6\1\u0128\23\6\2\0\1\6\2\0"+ + "\13\6\1\u0129\36\6\2\0\1\6\2\0\37\6\1\u012a"+ + "\12\6\2\0\1\6\2\0\20\6\1\u012b\31\6\2\0"+ + "\1\6\2\0\33\6\1\u012c\16\6\2\0\1\6\2\0"+ + "\25\6\1\u012d\24\6\2\0\1\6\2\0\13\6\1\u012e"+ + "\36\6\2\0\1\6\2\0\36\6\1\u012f\13\6\2\0"+ + "\1\6\2\0\12\6\1\347\37\6\2\0\1\6\2\0"+ + "\33\6\1\u0130\16\6\2\0\1\6\2\0\15\6\1\205"+ + "\26\6\1\205\5\6\2\0\1\6\2\0\12\6\1\u0131"+ + "\37\6\2\0\1\6\2\0\12\6\1\u0132\37\6\2\0"+ + "\1\6\2\0\12\6\1\271\4\6\1\u0133\32\6\2\0"+ + "\1\6\2\0\15\6\1\u0134\1\6\1\u0135\3\6\1\u0136"+ + "\7\6\1\u0137\10\6\1\u0134\5\6\2\0\1\6\2\0"+ + "\16\6\1\u0138\7\6\1\u0139\23\6\2\0\1\6\2\0"+ + "\20\6\1\u013a\31\6\2\0\1\6\2\0\23\6\1\u013b"+ + "\26\6\2\0\1\6\2\0\20\6\1\u013c\31\6\2\0"+ + "\1\6\2\0\33\6\1\u013d\5\6\1\u013e\10\6\2\0"+ + "\1\6\2\0\23\6\1\u013f\26\6\2\0\1\6\2\0"+ + "\20\6\1\u0140\31\6\2\0\1\6\2\0\27\6\1\u0141"+ + "\22\6\2\0\1\6\2\0\20\6\1\u0142\31\6\2\0"+ + "\1\6\2\0\17\6\1\u0143\32\6\2\0\1\6\2\0"+ + "\25\6\1\313\24\6\2\0\1\6\2\0\12\6\1\u0144"+ + "\37\6\2\0\1\6\2\0\35\6\1\u0145\14\6\2\0"+ + "\1\6\2\0\13\6\1\u0143\36\6\2\0\1\6\2\0"+ + "\26\6\1\u0146\23\6\2\0\1\6\2\0\25\6\1\u0147"+ + "\24\6\2\0\1\6\2\0\24\6\1\u0148\25\6\2\0"+ + "\1\6\2\0\12\6\1\u0149\37\6\2\0\1\6\2\0"+ + "\23\6\1\u014a\26\6\2\0\1\6\2\0\12\6\1\u014b"+ + "\37\6\2\0\1\6\2\0\14\6\1\u014c\1\u014d\26\6"+ + "\1\u014d\5\6\2\0\1\6\2\0\27\6\1\u014e\22\6"+ + "\2\0\1\6\2\0\34\6\1\u014f\15\6\2\0\1\6"+ + "\2\0\23\6\1\u0150\26\6\2\0\1\6\2\0\16\6"+ + "\1\u0151\11\6\1\u0152\21\6\2\0\1\6\2\0\23\6"+ + "\1\u0153\26\6\2\0\1\6\2\0\33\6\1\u0154\16\6"+ + "\2\0\1\6\2\0\14\6\1\u0155\35\6\2\0\1\6"+ + "\2\0\14\6\1\u0156\35\6\2\0\1\6\2\0\20\6"+ + "\1\u0157\31\6\2\0\1\6\2\0\25\6\1\u0158\24\6"+ + "\2\0\1\6\2\0\20\6\1\u0159\31\6\2\0\1\6"+ + "\2\0\13\6\1\u015a\36\6\2\0\1\6\2\0\25\6"+ + "\1\u015b\24\6\2\0\1\6\2\0\12\6\1\u015c\37\6"+ + "\2\0\1\6\2\0\17\6\1\u015d\32\6\2\0\1\6"+ + "\2\0\20\6\1\u015e\31\6\2\0\1\6\2\0\12\6"+ + "\1\u015f\37\6\2\0\1\6\2\0\12\6\1\u0160\37\6"+ + "\2\0\1\6\2\0\20\6\1\u0161\31\6\2\0\1\6"+ + "\2\0\20\6\1\u0162\31\6\2\0\1\6\2\0\20\6"+ + "\1\u0163\31\6\2\0\1\6\2\0\33\6\1\u0143\16\6"+ + "\2\0\1\6\2\0\14\6\1\u0164\35\6\2\0\1\6"+ + "\2\0\34\6\1\u0165\15\6\2\0\1\6\2\0\16\6"+ + "\1\u0166\33\6\2\0\1\6\2\0\16\6\1\310\33\6"+ + "\2\0\1\6\2\0\36\6\1\u0167\13\6\2\0\1\6"+ + "\2\0\23\6\1\u0168\22\6\7\35\1\0\3\35\1\331"+ + "\40\35\16\0\1\332\43\0\4\6\2\0\1\6\2\0"+ + "\25\6\1\u0107\24\6\2\0\1\6\2\0\36\6\1\313"+ + "\13\6\2\0\1\6\2\0\20\6\1\u0169\31\6\2\0"+ + "\1\6\2\0\26\6\1\u016a\23\6\2\0\1\6\2\0"+ + "\41\6\1\u016b\10\6\2\0\1\6\2\0\11\6\1\u016c"+ + "\31\6\1\u016c\6\6\2\0\1\6\2\0\34\6\1\u016d"+ + "\15\6\2\0\1\6\2\0\33\6\1\u0161\16\6\2\0"+ + "\1\6\2\0\16\6\1\u016e\33\6\2\0\1\6\2\0"+ + "\27\6\1\u016f\22\6\2\0\1\6\2\0\34\6\1\u0170"+ + "\15\6\2\0\1\6\2\0\16\6\1\u0171\33\6\2\0"+ + "\1\6\2\0\14\6\1\u0172\35\6\2\0\1\6\2\0"+ + "\16\6\1\u0173\33\6\2\0\1\6\2\0\23\6\1\u0174"+ + "\26\6\2\0\1\6\2\0\23\6\1\77\26\6\2\0"+ + "\1\6\2\0\23\6\1\u0175\26\6\2\0\1\6\2\0"+ + "\26\6\1\u0176\23\6\2\0\1\6\2\0\13\6\1\u0177"+ + "\36\6\2\0\1\6\2\0\20\6\1\u0178\31\6\2\0"+ + "\1\6\2\0\32\6\1\u0179\17\6\2\0\1\6\2\0"+ + "\13\6\1\113\17\6\1\u017a\16\6\2\0\1\6\2\0"+ + "\15\6\1\u017b\26\6\1\u017b\5\6\2\0\1\6\2\0"+ + "\14\6\1\u0143\35\6\2\0\1\6\2\0\25\6\1\u017c"+ + "\24\6\2\0\1\6\2\0\20\6\1\u017d\31\6\2\0"+ + "\1\6\2\0\35\6\1\u017e\14\6\2\0\1\6\2\0"+ + "\32\6\1\u017f\17\6\2\0\1\6\2\0\14\6\1\u0180"+ + "\20\6\1\u0181\14\6\2\0\1\6\2\0\26\6\1\u0182"+ + "\23\6\2\0\1\6\2\0\14\6\1\u0183\35\6\2\0"+ + "\1\6\2\0\20\6\1\313\31\6\2\0\1\6\2\0"+ + "\13\6\1\u0184\36\6\2\0\1\6\2\0\26\6\1\u0185"+ + "\23\6\2\0\1\6\2\0\25\6\1\u0149\24\6\2\0"+ + "\1\6\2\0\32\6\1\u0186\17\6\2\0\1\6\2\0"+ + "\26\6\1\u0187\23\6\2\0\1\6\2\0\30\6\1\u0188"+ + "\21\6\2\0\1\6\2\0\33\6\1\u0189\16\6\2\0"+ + "\1\6\2\0\13\6\1\u018a\36\6\2\0\1\6\2\0"+ + "\24\6\1\u018b\25\6\2\0\1\6\2\0\23\6\1\u018c"+ + "\26\6\2\0\1\6\2\0\23\6\1\u018d\26\6\2\0"+ + "\1\6\2\0\12\6\1\u018e\37\6\2\0\1\6\2\0"+ + "\35\6\1\u0143\14\6\2\0\1\6\2\0\32\6\1\u018f"+ + "\17\6\2\0\1\6\2\0\35\6\1\u0190\14\6\2\0"+ + "\1\6\2\0\14\6\1\u0191\35\6\2\0\1\6\2\0"+ + "\26\6\1\u0192\23\6\2\0\1\6\2\0\20\6\1\u0193"+ + "\31\6\2\0\1\6\2\0\13\6\1\u0194\36\6\2\0"+ + "\1\6\2\0\12\6\1\u0195\37\6\2\0\1\6\2\0"+ + "\12\6\1\u0196\37\6\2\0\1\6\2\0\12\6\1\u0197"+ + "\1\6\1\u0198\3\6\1\u0199\4\6\1\u0107\1\6\1\u019a"+ + "\22\6\2\0\1\6\2\0\20\6\1\u019b\31\6\2\0"+ + "\1\6\2\0\14\6\1\313\35\6\2\0\1\6\2\0"+ + "\26\6\1\u019c\23\6\2\0\1\6\2\0\12\6\1\u019d"+ + "\37\6\2\0\1\6\2\0\33\6\1\u019e\16\6\2\0"+ + "\1\6\2\0\24\6\1\u019f\1\u01a0\7\6\1\u01a1\14\6"+ + "\2\0\1\6\2\0\20\6\1\u01a2\31\6\2\0\1\6"+ + "\2\0\24\6\1\u01a3\25\6\2\0\1\6\2\0\11\6"+ + "\1\243\1\271\3\6\1\244\1\273\1\274\3\6\1\276"+ + "\1\6\1\246\14\6\1\243\6\6\2\0\1\6\2\0"+ + "\12\6\1\u01a4\37\6\2\0\1\6\2\0\15\6\1\u01a5"+ + "\26\6\1\u01a5\5\6\2\0\1\6\2\0\17\6\1\u01a6"+ + "\32\6\2\0\1\6\2\0\16\6\1\u01a7\33\6\2\0"+ + "\1\6\2\0\24\6\1\u01a8\25\6\2\0\1\6\2\0"+ + "\15\6\1\u01a9\26\6\1\u01a9\5\6\2\0\1\6\2\0"+ + "\33\6\1\u01aa\16\6\2\0\1\6\2\0\31\6\1\u01ab"+ + "\20\6\2\0\1\6\2\0\20\6\1\u01ac\31\6\2\0"+ + "\1\6\2\0\16\6\1\u01ad\33\6\2\0\1\6\2\0"+ + "\15\6\1\u01ae\26\6\1\u01ae\5\6\2\0\1\6\2\0"+ + "\17\6\1\202\32\6\2\0\1\6\2\0\12\6\1\u01af"+ + "\37\6\2\0\1\6\2\0\15\6\1\u01b0\26\6\1\u01b0"+ + "\5\6\2\0\1\6\2\0\16\6\1\u01b1\33\6\2\0"+ + "\1\6\2\0\25\6\1\u01b2\24\6\2\0\1\6\2\0"+ + "\32\6\1\313\17\6\2\0\1\6\2\0\40\6\1\u01b3"+ + "\11\6\2\0\1\6\2\0\32\6\1\u01b4\17\6\2\0"+ + "\1\6\2\0\13\6\1\u01b5\36\6\2\0\1\6\2\0"+ + "\23\6\1\u01b6\26\6\2\0\1\6\2\0\25\6\1\u01b7"+ + "\24\6\2\0\1\6\2\0\27\6\1\u01b8\22\6\2\0"+ + "\1\6\2\0\23\6\1\u01b9\26\6\2\0\1\6\2\0"+ + "\34\6\1\313\15\6\2\0\1\6\2\0\37\6\1\u01ba"+ + "\12\6\2\0\1\6\2\0\17\6\1\u01bb\32\6\2\0"+ + "\1\6\2\0\20\6\1\u01bc\31\6\2\0\1\6\2\0"+ + "\20\6\1\u01bd\31\6\2\0\1\6\2\0\35\6\1\u01be"+ + "\14\6\2\0\1\6\2\0\24\6\1\u01bf\25\6\2\0"+ + "\1\6\2\0\23\6\1\u01c0\3\6\1\361\1\u01c1\21\6"+ + "\2\0\1\6\2\0\23\6\1\u01c2\26\6\2\0\1\6"+ + "\2\0\34\6\1\u01c3\15\6\2\0\1\6\2\0\34\6"+ + "\1\u01c4\15\6\2\0\1\6\2\0\27\6\1\u01c5\22\6"+ + "\2\0\1\6\2\0\31\6\1\u01c6\20\6\2\0\1\6"+ + "\2\0\14\6\1\u01c7\35\6\2\0\1\6\2\0\34\6"+ + "\1\u01c8\15\6\2\0\1\6\2\0\33\6\1\u01c9\16\6"+ + "\2\0\1\6\2\0\34\6\1\u01ca\15\6\2\0\1\6"+ + "\2\0\13\6\1\u01cb\36\6\2\0\1\6\2\0\11\6"+ + "\1\u01cc\31\6\1\u01cc\6\6\2\0\1\6\2\0\20\6"+ + "\1\u01cd\31\6\2\0\1\6\2\0\12\6\1\271\10\6"+ + "\1\u0106\6\6\1\u010a\1\6\1\u010b\15\6\2\0\1\6"+ + "\2\0\16\6\1\u01ce\33\6\2\0\1\6\2\0\34\6"+ + "\1\u01cf\15\6\2\0\1\6\2\0\33\6\1\u01d0\16\6"+ + "\2\0\1\6\2\0\20\6\1\u01d1\31\6\2\0\1\6"+ + "\2\0\14\6\1\u01d2\11\6\1\237\1\361\22\6\2\0"+ + "\1\6\2\0\27\6\1\u01d3\22\6\2\0\1\6\2\0"+ + "\33\6\1\u01d4\16\6\2\0\1\6\2\0\12\6\1\u01d5"+ + "\37\6\2\0\1\6\2\0\41\6\1\u01d6\10\6\2\0"+ + "\1\6\2\0\26\6\1\u01d7\23\6\2\0\1\6\2\0"+ + "\41\6\1\u01d8\10\6\2\0\1\6\2\0\33\6\1\u01d9"+ + "\16\6\2\0\1\6\2\0\12\6\1\271\3\6\1\u01da"+ + "\1\273\32\6\2\0\1\6\2\0\35\6\1\u01db\14\6"+ + "\2\0\1\6\2\0\13\6\1\u017c\36\6\2\0\1\6"+ + "\2\0\13\6\1\u01dc\36\6\2\0\1\6\2\0\20\6"+ + "\1\u01dd\31\6\2\0\1\6\2\0\20\6\1\u01de\3\6"+ + "\1\u01df\1\6\1\237\1\6\1\362\2\6\1\u01e0\16\6"+ + "\2\0\1\6\2\0\12\6\1\u01e1\37\6\2\0\1\6"+ + "\2\0\11\6\1\u01e2\31\6\1\u01e2\6\6\2\0\1\6"+ + "\2\0\15\6\1\u01e3\26\6\1\u01e3\5\6\2\0\1\6"+ + "\2\0\20\6\1\u015b\31\6\2\0\1\6\2\0\20\6"+ + "\1\u01e4\31\6\2\0\1\6\2\0\40\6\1\313\11\6"+ + "\2\0\1\6\2\0\26\6\1\u01e5\23\6\2\0\1\6"+ + "\2\0\35\6\1\u01e6\14\6\2\0\1\6\2\0\24\6"+ + "\1\236\11\6\1\u01e7\13\6\2\0\1\6\2\0\33\6"+ + "\1\u01e8\16\6\2\0\1\6\2\0\33\6\1\u01e9\16\6"+ + "\2\0\1\6\2\0\31\6\1\u01ea\20\6\2\0\1\6"+ + "\2\0\15\6\1\u01eb\26\6\1\u01eb\5\6\2\0\1\6"+ + "\2\0\25\6\1\u01ec\24\6\2\0\1\6\2\0\32\6"+ + "\1\u01ed\17\6\2\0\1\6\2\0\12\6\1\u01ee\37\6"+ + "\2\0\1\6\2\0\20\6\1\u01ef\31\6\2\0\1\6"+ + "\2\0\25\6\1\u01f0\24\6\2\0\1\6\2\0\20\6"+ + "\1\u01f1\31\6\2\0\1\6\2\0\27\6\1\u01f2\22\6"+ + "\2\0\1\6\2\0\26\6\1\u011a\23\6\2\0\1\6"+ + "\2\0\20\6\1\u01f3\31\6\2\0\1\6\2\0\34\6"+ + "\1\u01f4\15\6\2\0\1\6\2\0\34\6\1\u01f5\15\6"+ + "\2\0\1\6\2\0\33\6\1\u013d\16\6\2\0\1\6"+ + "\2\0\13\6\1\u01f6\36\6\2\0\1\6\2\0\25\6"+ + "\1\u01f7\24\6\2\0\1\6\2\0\23\6\1\u01f8\26\6"+ + "\2\0\1\6\2\0\34\6\1\u01f9\15\6\2\0\1\6"+ + "\2\0\24\6\1\u01fa\25\6\2\0\1\6\2\0\31\6"+ + "\1\u01fb\20\6\2\0\1\6\2\0\12\6\1\u01fc\37\6"+ + "\2\0\1\6\2\0\14\6\1\u01fd\35\6\2\0\1\6"+ + "\2\0\23\6\1\u01fe\26\6\2\0\1\6\2\0\16\6"+ + "\1\u01ff\33\6\2\0\1\6\2\0\12\6\1\271\5\6"+ + "\1\274\31\6\2\0\1\6\2\0\20\6\1\u0200\31\6"+ + "\2\0\1\6\2\0\12\6\1\u0201\37\6\2\0\1\6"+ + "\2\0\16\6\1\u0202\33\6\2\0\1\6\2\0\17\6"+ + "\1\u0203\32\6\2\0\1\6\2\0\15\6\1\u0204\2\6"+ + "\1\u0205\2\6\1\u0106\1\u0206\2\6\1\u0207\1\u0208\1\6"+ + "\1\u0209\1\u020a\1\u020b\7\6\1\u0204\5\6\2\0\1\6"+ + "\2\0\26\6\1\u020c\23\6\2\0\1\6\2\0\14\6"+ + "\1\u020d\35\6\2\0\1\6\2\0\24\6\1\u020e\25\6"+ + "\2\0\1\6\2\0\13\6\1\u01d0\36\6\2\0\1\6"+ + "\2\0\15\6\1\u020f\26\6\1\u020f\5\6\2\0\1\6"+ + "\2\0\17\6\1\u0210\32\6\2\0\1\6\2\0\26\6"+ + "\1\u0211\23\6\2\0\1\6\2\0\16\6\1\u0212\33\6"+ + "\2\0\1\6\2\0\23\6\1\u0213\26\6\2\0\1\6"+ + "\2\0\31\6\1\371\20\6\2\0\1\6\2\0\13\6"+ + "\1\u0214\36\6\2\0\1\6\2\0\35\6\1\u0215\14\6"+ + "\2\0\1\6\2\0\12\6\1\u0216\37\6\2\0\1\6"+ + "\2\0\31\6\1\u0217\20\6\2\0\1\6\2\0\24\6"+ + "\1\266\25\6\2\0\1\6\2\0\23\6\1\u0218\26\6"+ + "\2\0\1\6\2\0\33\6\1\u0219\16\6\2\0\1\6"+ + "\2\0\35\6\1\313\14\6\2\0\1\6\2\0\25\6"+ + "\1\u021a\24\6\2\0\1\6\2\0\26\6\1\u021b\23\6"+ + "\2\0\1\6\2\0\34\6\1\371\15\6\2\0\1\6"+ + "\2\0\12\6\1\u021c\1\u021d\21\6\1\u021e\14\6\2\0"+ + "\1\6\2\0\20\6\1\u021f\31\6\2\0\1\6\2\0"+ + "\16\6\1\u0220\33\6\2\0\1\6\2\0\21\6\1\u0221"+ + "\23\6\1\u0221\4\6\2\0\1\6\2\0\33\6\1\u0222"+ + "\16\6\2\0\1\6\2\0\14\6\1\u0174\35\6\2\0"+ + "\1\6\2\0\20\6\1\u0223\31\6\2\0\1\6\2\0"+ + "\14\6\1\u0224\35\6\2\0\1\6\2\0\20\6\1\u0225"+ + "\31\6\2\0\1\6\2\0\24\6\1\u0226\2\6\1\u0227"+ + "\22\6\2\0\1\6\2\0\16\6\1\u0228\33\6\2\0"+ + "\1\6\2\0\26\6\1\u0229\23\6\2\0\1\6\2\0"+ + "\25\6\1\u022a\24\6\2\0\1\6\2\0\20\6\1\u022b"+ + "\31\6\2\0\1\6\2\0\23\6\1\u022c\26\6\2\0"+ + "\1\6\2\0\26\6\1\u022d\23\6\2\0\1\6\2\0"+ + "\25\6\1\u022e\24\6\2\0\1\6\2\0\23\6\1\u022f"+ + "\26\6\2\0\1\6\2\0\33\6\1\u0230\16\6\2\0"+ + "\1\6\2\0\17\6\1\u0200\32\6\2\0\1\6\2\0"+ + "\20\6\1\u0231\31\6\2\0\1\6\2\0\33\6\1\u0232"+ + "\16\6\2\0\1\6\2\0\27\6\1\u01d0\22\6\2\0"+ + "\1\6\2\0\13\6\1\313\36\6\2\0\1\6\2\0"+ + "\35\6\1\u0233\14\6\2\0\1\6\2\0\12\6\1\u0234"+ + "\37\6\2\0\1\6\2\0\12\6\1\271\37\6\2\0"+ + "\1\6\2\0\11\6\1\u0235\31\6\1\u0235\3\6\1\u0236"+ + "\2\6\2\0\1\6\2\0\52\6\2\0\1\6\2\0"+ + "\32\6\1\u0143\17\6\2\0\1\6\2\0\25\6\1\u0174"+ + "\24\6\2\0\1\6\2\0\12\6\1\313\37\6\2\0"+ + "\1\6\2\0\15\6\1\u0237\26\6\1\u0237\5\6\2\0"+ + "\1\6\2\0\13\6\1\u0238\36\6\2\0\1\6\2\0"+ + "\12\6\1\u0239\37\6\2\0\1\6\2\0\33\6\1\u023a"+ + "\16\6\2\0\1\6\2\0\25\6\1\u023b\24\6\2\0"+ + "\1\6\2\0\26\6\1\u023c\23\6\2\0\1\6\2\0"+ + "\20\6\1\u023d\31\6\2\0\1\6\2\0\16\6\1\u023e"+ + "\33\6\2\0\1\6\2\0\33\6\1\u023f\16\6\2\0"+ + "\1\6\2\0\20\6\1\u0240\31\6\2\0\1\6\2\0"+ + "\33\6\1\u0241\16\6\2\0\1\6\2\0\33\6\1\u0242"+ + "\16\6\2\0\1\6\2\0\12\6\1\u0243\37\6\2\0"+ + "\1\6\2\0\13\6\1\u0244\7\6\1\u0106\26\6\2\0"+ + "\1\6\2\0\16\6\1\371\33\6\2\0\1\6\2\0"+ + "\17\6\1\u01c5\32\6\2\0\1\6\2\0\34\6\1\u0245"+ + "\15\6\2\0\1\6\2\0\32\6\1\u0246\17\6\2\0"+ + "\1\6\2\0\24\6\1\u0247\25\6\2\0\1\6\2\0"+ + "\16\6\1\u0248\33\6\2\0\1\6\2\0\23\6\1\u0249"+ + "\26\6\2\0\1\6\2\0\20\6\1\u024a\31\6\2\0"+ + "\1\6\2\0\14\6\1\u024b\1\6\1\u024c\33\6\2\0"+ + "\1\6\2\0\12\6\1\u024d\37\6\2\0\1\6\2\0"+ + "\26\6\1\u024e\23\6\2\0\1\6\2\0\32\6\1\u024f"+ + "\17\6\2\0\1\6\2\0\25\6\1\u0250\24\6\2\0"+ + "\1\6\2\0\20\6\1\u0251\31\6\2\0\1\6\2\0"+ + "\20\6\1\u0252\31\6\2\0\1\6\2\0\23\6\1\u0253"+ + "\26\6\2\0\1\6\2\0\23\6\1\114\26\6\2\0"+ + "\1\6\2\0\41\6\1\313\10\6\2\0\1\6\2\0"+ + "\14\6\1\u0254\35\6\2\0\1\6\2\0\35\6\1\u0255"+ + "\14\6\2\0\1\6\2\0\33\6\1\u0256\16\6\2\0"+ + "\1\6\2\0\34\6\1\u0257\15\6\2\0\1\6\2\0"+ + "\14\6\1\u0258\35\6\2\0\1\6\2\0\17\6\1\u0259"+ + "\32\6\2\0\1\6\2\0\20\6\1\u025a\31\6\2\0"+ + "\1\6\2\0\17\6\1\u025b\32\6\2\0\1\6\2\0"+ + "\24\6\1\362\25\6\2\0\1\6\2\0\23\6\1\u025c"+ + "\26\6\2\0\1\6\2\0\33\6\1\u025d\16\6\2\0"+ + "\1\6\2\0\14\6\1\u025e\35\6\2\0\1\6\2\0"+ + "\12\6\1\u025f\37\6\2\0\1\6\2\0\27\6\1\u0260"+ + "\22\6\2\0\1\6\2\0\11\6\1\u0261\31\6\1\u0261"+ + "\6\6\2\0\1\6\2\0\27\6\1\361\22\6\2\0"+ + "\1\6\2\0\14\6\1\u0262\35\6\2\0\1\6\2\0"+ + "\16\6\1\u0263\33\6\2\0\1\6\2\0\20\6\1\u0264"+ + "\31\6\2\0\1\6\2\0\16\6\1\u0265\33\6\2\0"+ + "\1\6\2\0\16\6\1\u0266\33\6\2\0\1\6\2\0"+ + "\17\6\1\u0267\3\6\1\u0106\1\6\1\u0268\7\6\1\u0269"+ + "\1\u026a\13\6\2\0\1\6\2\0\16\6\1\u026b\33\6"+ + "\2\0\1\6\2\0\12\6\1\167\37\6\2\0\1\6"+ + "\2\0\24\6\1\276\25\6\2\0\1\6\2\0\26\6"+ + "\1\u026c\23\6\2\0\1\6\2\0\23\6\1\u026d\26\6"+ + "\2\0\1\6\2\0\35\6\1\u026e\14\6\2\0\1\6"+ + "\2\0\33\6\1\u026f\16\6\2\0\1\6\2\0\25\6"+ + "\1\u0270\24\6\2\0\1\6\2\0\26\6\1\u0271\23\6"+ + "\2\0\1\6\2\0\35\6\1\u0272\14\6\2\0\1\6"+ + "\2\0\17\6\1\313\32\6\2\0\1\6\2\0\16\6"+ + "\1\u0273\33\6\2\0\1\6\2\0\15\6\1\u020f\5\6"+ + "\1\u0274\1\6\1\u0275\1\6\1\u019a\2\6\1\u010a\4\6"+ + "\1\u0276\4\6\1\u020f\5\6\2\0\1\6\2\0\33\6"+ + "\1\u0277\16\6\2\0\1\6\2\0\33\6\1\u0278\16\6"+ + "\2\0\1\6\2\0\20\6\1\u0279\31\6\2\0\1\6"+ + "\2\0\40\6\1\u01c5\11\6\2\0\1\6\2\0\33\6"+ + "\1\u01a6\16\6\2\0\1\6\2\0\16\6\1\372\33\6"+ + "\2\0\1\6\2\0\25\6\1\u027a\24\6\2\0\1\6"+ + "\2\0\17\6\1\u027b\32\6\2\0\1\6\2\0\25\6"+ + "\1\u027c\24\6\2\0\1\6\2\0\24\6\1\u027d\25\6"+ + "\2\0\1\6\2\0\24\6\1\313\25\6\2\0\1\6"+ + "\2\0\16\6\1\u027e\33\6\2\0\1\6\2\0\27\6"+ + "\1\313\22\6\2\0\1\6\2\0\35\6\1\u01f8\14\6"+ + "\2\0\1\6\2\0\33\6\1\u027f\16\6\2\0\1\6"+ + "\2\0\12\6\1\u0280\37\6\2\0\1\6\2\0\35\6"+ + "\1\u021e\14\6\2\0\1\6\2\0\23\6\1\u0200\26\6"+ + "\2\0\1\6\2\0\16\6\1\u0281\33\6\2\0\1\6"+ + "\2\0\16\6\1\u0282\33\6\2\0\1\6\2\0\14\6"+ + "\1\u0241\35\6\2\0\1\6\2\0\16\6\1\u0233\33\6"+ + "\2\0\1\6\2\0\13\6\1\u0283\36\6\2\0\1\6"+ + "\2\0\12\6\1\202\37\6\2\0\1\6\2\0\12\6"+ + "\1\u0284\37\6\2\0\1\6\2\0\13\6\1\u0285\36\6"+ + "\2\0\1\6\2\0\31\6\1\u0286\20\6\2\0\1\6"+ + "\2\0\14\6\1\u0287\35\6\2\0\1\6\2\0\17\6"+ + "\1\u0288\32\6\2\0\1\6\2\0\20\6\1\u0289\31\6"+ + "\2\0\1\6\2\0\12\6\1\u028a\37\6\2\0\1\6"+ + "\2\0\26\6\1\u028b\23\6\2\0\1\6\2\0\25\6"+ + "\1\u0200\24\6\2\0\1\6\2\0\36\6\1\u0143\13\6"+ + "\2\0\1\6\2\0\25\6\1\u028c\24\6\2\0\1\6"+ + "\2\0\26\6\1\u028d\23\6\2\0\1\6\2\0\26\6"+ + "\1\u028e\23\6\2\0\1\6\2\0\34\6\1\u028f\15\6"+ + "\2\0\1\6\2\0\20\6\1\u0290\31\6\2\0\1\6"+ + "\2\0\17\6\1\u0291\32\6\2\0\1\6\2\0\25\6"+ + "\1\u0292\24\6\2\0\1\6\2\0\30\6\1\u0293\21\6"+ + "\2\0\1\6\2\0\13\6\1\u0294\36\6\2\0\1\6"+ + "\2\0\20\6\1\u0295\31\6\2\0\1\6\2\0\27\6"+ + "\1\u0296\22\6\2\0\1\6\2\0\34\6\1\u0297\15\6"+ + "\2\0\1\6\2\0\26\6\1\u0298\23\6\2\0\1\6"+ + "\2\0\12\6\1\u0299\37\6\2\0\1\6\2\0\17\6"+ + "\1\u029a\32\6\2\0\1\6\2\0\26\6\1\u029b\23\6"+ + "\2\0\1\6\2\0\26\6\1\u01f8\23\6\2\0\1\6"+ + "\2\0\26\6\1\u029c\23\6\2\0\1\6\2\0\24\6"+ + "\1\u029d\25\6\2\0\1\6\2\0\14\6\1\u0200\35\6"+ + "\2\0\1\6\2\0\14\6\1\167\35\6\2\0\1\6"+ + "\2\0\23\6\1\u029e\26\6\2\0\1\6\2\0\27\6"+ + "\1\u029f\22\6\2\0\1\6\2\0\11\6\1\u01b0\31\6"+ + "\1\u01b0\6\6\2\0\1\6\2\0\25\6\1\u0143\24\6"+ + "\2\0\1\6\2\0\35\6\1\u02a0\14\6\2\0\1\6"+ + "\2\0\24\6\1\u02a1\25\6\2\0\1\6\2\0\15\6"+ + "\1\u02a2\26\6\1\u02a2\5\6\2\0\1\6\2\0\12\6"+ + "\1\u0143\37\6\2\0\1\6\2\0\12\6\1\u02a1\37\6"+ + "\2\0\1\6\2\0\34\6\1\u011a\15\6\2\0\1\6"+ + "\2\0\33\6\1\u02a3\16\6\2\0\1\6\2\0\25\6"+ + "\1\u024e\24\6\2\0\1\6\2\0\34\6\1\u02a4\15\6"+ + "\2\0\1\6\2\0\26\6\1\u02a5\23\6\2\0\1\6"+ + "\2\0\23\6\1\u02a6\26\6\2\0\1\6\2\0\30\6"+ + "\1\u02a7\21\6\2\0\1\6\2\0\33\6\1\u02a8\16\6"+ + "\2\0\1\6\2\0\15\6\1\u02a9\26\6\1\u02a9\5\6"+ + "\2\0\1\6\2\0\32\6\1\u02aa\17\6\2\0\1\6"+ + "\2\0\34\6\1\u02ab\15\6\2\0\1\6\2\0\14\6"+ + "\1\u02ac\35\6\2\0\1\6\2\0\33\6\1\u02ad\16\6"+ + "\2\0\1\6\2\0\12\6\1\u02ae\37\6\2\0\1\6"+ + "\2\0\12\6\1\u02af\37\6\2\0\1\6\2\0\17\6"+ + "\1\u02b0\32\6\2\0\1\6\2\0\23\6\1\u02b1\26\6"+ + "\2\0\1\6\2\0\15\6\1\u02b2\26\6\1\u02b2\5\6"+ + "\2\0\1\6\2\0\13\6\1\u02b3\13\6\1\372\22\6"+ + "\2\0\1\6\2\0\13\6\1\u02b4\36\6\2\0\1\6"+ + "\2\0\12\6\1\u02b5\37\6\2\0\1\6\2\0\23\6"+ + "\1\u01fa\26\6\2\0\1\6\2\0\32\6\1\u02b6\17\6"+ + "\2\0\1\6\2\0\25\6\1\u02b7\24\6\2\0\1\6"+ + "\2\0\36\6\1\u02b8\13\6\2\0\1\6\2\0\20\6"+ + "\1\u02b9\31\6\2\0\1\6\2\0\14\6\1\u02a1\35\6"+ + "\2\0\1\6\2\0\20\6\1\u0220\31\6\2\0\1\6"+ + "\2\0\23\6\1\u02ba\26\6\2\0\1\6\2\0\11\6"+ + "\1\313\31\6\1\313\6\6\2\0\1\6\2\0\31\6"+ + "\1\u02bb\20\6\2\0\1\6\2\0\20\6\1\u02bc\31\6"+ + "\2\0\1\6\2\0\13\6\1\u02bd\36\6\2\0\1\6"+ + "\2\0\32\6\1\u02be\17\6\2\0\1\6\2\0\27\6"+ + "\1\u02bf\22\6\2\0\1\6\2\0\26\6\1\u02c0\23\6"+ + "\2\0\1\6\2\0\16\6\1\u02c1\33\6\2\0\1\6"+ + "\2\0\26\6\1\313\23\6\2\0\1\6\2\0\20\6"+ + "\1\u02c2\31\6\2\0\1\6\2\0\14\6\1\u02c3\35\6"+ + "\2\0\1\6\2\0\12\6\1\u02c4\37\6\2\0\1\6"+ + "\2\0\16\6\1\u02c5\33\6\2\0\1\6\2\0\20\6"+ + "\1\u02c6\31\6\2\0\1\6\2\0\13\6\1\u02c7\36\6"+ + "\2\0\1\6\2\0\20\6\1\u0250\31\6\2\0\1\6"+ + "\2\0\33\6\1\u02c8\16\6\2\0\1\6\2\0\20\6"+ + "\1\u02c9\31\6\2\0\1\6\2\0\23\6\1\u02ca\26\6"+ + "\2\0\1\6\2\0\23\6\1\u02cb\26\6\2\0\1\6"+ + "\2\0\20\6\1\u02cc\31\6\2\0\1\6\2\0\26\6"+ + "\1\u02cd\23\6\2\0\1\6\2\0\24\6\1\u02ce\25\6"+ + "\2\0\1\6\2\0\16\6\1\114\33\6\2\0\1\6"+ + "\2\0\20\6\1\u0286\31\6\2\0\1\6\2\0\25\6"+ + "\1\u0233\24\6\2\0\1\6\2\0\27\6\1\u0227\22\6"+ + "\2\0\1\6\2\0\12\6\1\u02cf\37\6\2\0\1\6"+ + "\2\0\13\6\1\u02d0\36\6\2\0\1\6\2\0\12\6"+ + "\1\u02d1\37\6\2\0\1\6\2\0\30\6\1\u02d2\21\6"+ + "\2\0\1\6\2\0\27\6\1\205\22\6\2\0\1\6"+ + "\2\0\12\6\1\205\37\6\2\0\1\6\2\0\35\6"+ + "\1\u02d3\14\6\2\0\1\6\2\0\20\6\1\u02d4\31\6"+ + "\2\0\1\6\2\0\32\6\1\u02d5\17\6\2\0\1\6"+ + "\2\0\15\6\1\u02d6\26\6\1\u02d6\5\6\2\0\1\6"+ + "\2\0\33\6\1\u02d7\16\6\2\0\1\6\2\0\23\6"+ + "\1\u02d8\26\6\2\0\1\6\2\0\20\6\1\u02d9\31\6"+ + "\2\0\1\6\2\0\33\6\1\u02da\16\6\2\0\1\6"+ + "\2\0\14\6\1\u02db\35\6\2\0\1\6\2\0\12\6"+ + "\1\u02dc\37\6\2\0\1\6\2\0\34\6\1\u02dd\15\6"+ + "\2\0\1\6\2\0\33\6\1\u02de\16\6\2\0\1\6"+ + "\2\0\20\6\1\u02df\31\6\2\0\1\6\2\0\20\6"+ + "\1\u02e0\31\6\2\0\1\6\2\0\26\6\1\u02e1\23\6"+ + "\2\0\1\6\2\0\26\6\1\u02e2\23\6\2\0\1\6"+ + "\2\0\34\6\1\u02e3\15\6\2\0\1\6\2\0\23\6"+ + "\1\u02e4\26\6\2\0\1\6\2\0\33\6\1\u02e5\16\6"+ + "\2\0\1\6\2\0\16\6\1\u02e6\33\6\2\0\1\6"+ + "\2\0\31\6\1\u02aa\20\6\2\0\1\6\2\0\30\6"+ + "\1\u01c1\21\6\2\0\1\6\2\0\32\6\1\u02e7\17\6"+ + "\2\0\1\6\2\0\27\6\1\u02e8\22\6\2\0\1\6"+ + "\2\0\20\6\1\u02e9\31\6\2\0\1\6\2\0\14\6"+ + "\1\u02ea\35\6\2\0\1\6\2\0\12\6\1\u02eb\37\6"+ + "\2\0\1\6\2\0\14\6\1\u02ec\35\6\2\0\1\6"+ + "\2\0\16\6\1\u02ed\33\6\2\0\1\6\2\0\15\6"+ + "\1\u01a9\1\6\1\u02ee\24\6\1\u01a9\5\6\2\0\1\6"+ + "\2\0\33\6\1\u02ef\16\6\2\0\1\6\2\0\33\6"+ + "\1\u02f0\16\6\2\0\1\6\2\0\20\6\1\u02f1\16\6"+ + "\1\u02f2\12\6\2\0\1\6\2\0\15\6\1\u02f3\26\6"+ + "\1\u02f3\5\6\2\0\1\6\2\0\16\6\1\u0241\33\6"+ + "\2\0\1\6\2\0\16\6\1\u0250\33\6\2\0\1\6"+ + "\2\0\36\6\1\u02f4\13\6\2\0\1\6\2\0\20\6"+ + "\1\326\31\6\2\0\1\6\2\0\25\6\1\u02f5\24\6"+ + "\2\0\1\6\2\0\25\6\1\u02f6\24\6\2\0\1\6"+ + "\2\0\21\6\1\u02f7\23\6\1\u02f7\4\6\2\0\1\6"+ + "\2\0\33\6\1\u02f8\16\6\2\0\1\6\2\0\20\6"+ + "\1\u02f9\31\6\2\0\1\6\2\0\12\6\1\u02fa\37\6"+ + "\2\0\1\6\2\0\16\6\1\u02fb\33\6\2\0\1\6"+ + "\2\0\14\6\1\u02fc\35\6\2\0\1\6\2\0\12\6"+ + "\1\u02b0\37\6\2\0\1\6\2\0\33\6\1\u02fd\16\6"+ + "\2\0\1\6\2\0\34\6\1\u02fe\15\6\2\0\1\6"+ + "\2\0\15\6\1\202\26\6\1\202\5\6\2\0\1\6"+ + "\2\0\20\6\1\u02aa\31\6\2\0\1\6\2\0\26\6"+ + "\1\u02ff\23\6\2\0\1\6\2\0\24\6\1\u0300\25\6"+ + "\2\0\1\6\2\0\26\6\1\u0301\23\6\2\0\1\6"+ + "\2\0\16\6\1\u0302\33\6\2\0\1\6\2\0\33\6"+ + "\1\u0303\16\6\2\0\1\6\2\0\11\6\1\u01dd\31\6"+ + "\1\u01dd\6\6\2\0\1\6\2\0\15\6\1\u0304\26\6"+ + "\1\u0304\5\6\2\0\1\6\2\0\26\6\1\u0305\23\6"+ + "\2\0\1\6\2\0\33\6\1\u0306\16\6\2\0\1\6"+ + "\2\0\20\6\1\u0307\31\6\2\0\1\6\2\0\25\6"+ + "\1\u0308\24\6\2\0\1\6\2\0\20\6\1\u0309\31\6"+ + "\2\0\1\6\2\0\33\6\1\u0250\16\6\2\0\1\6"+ + "\2\0\30\6\1\u030a\21\6\2\0\1\6\2\0\16\6"+ + "\1\u030b\33\6\2\0\1\6\2\0\20\6\1\u030c\31\6"+ + "\2\0\1\6\2\0\34\6\1\u030d\15\6\2\0\1\6"+ + "\2\0\26\6\1\u030e\23\6\2\0\1\6\2\0\33\6"+ + "\1\205\16\6\2\0\1\6\2\0\14\6\1\u030f\35\6"+ + "\2\0\1\6\2\0\23\6\1\u0310\26\6\2\0\1\6"+ + "\2\0\34\6\1\u0311\15\6\2\0\1\6\2\0\14\6"+ + "\1\u0312\35\6\2\0\1\6\2\0\12\6\1\u0313\37\6"+ + "\2\0\1\6\2\0\33\6\1\u0314\16\6\2\0\1\6"+ + "\2\0\33\6\1\u015b\16\6\2\0\1\6\2\0\20\6"+ + "\1\u0315\31\6\2\0\1\6\2\0\17\6\1\u0316\32\6"+ + "\2\0\1\6\2\0\12\6\1\u0317\37\6\2\0\1\6"+ + "\2\0\27\6\1\372\22\6\2\0\1\6\2\0\16\6"+ + "\1\u0150\33\6\2\0\1\6\2\0\24\6\1\u0143\25\6"+ + "\2\0\1\6\2\0\33\6\1\u0318\16\6\2\0\1\6"+ + "\2\0\16\6\1\u0319\33\6\2\0\1\6\2\0\20\6"+ + "\1\u031a\31\6\2\0\1\6\2\0\36\6\1\202\13\6"+ + "\2\0\1\6\2\0\23\6\1\u031b\26\6\2\0\1\6"+ + "\2\0\14\6\1\u01a6\31\6"; + + private static int [] zzUnpackTrans() { + int [] result = new int[36754]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\6\1\2\11\22\1\1\11\10\1\4\11\1\1"+ + "\1\11\2\1\1\0\52\1\4\0\2\1\1\11\1\1"+ + "\1\11\62\1\4\0\102\1\2\0\105\1\2\0\u01f8\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[795]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to HtaccessTokenMaker denoting a line ending with an + * unclosed XML tag; thus a new line is beginning still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public HtaccessTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns how to transform a line into a line comment. + * + * @return The line comment start and end text for .htaccess files. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + default: + state = YYINITIAL; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public HtaccessTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public HtaccessTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 172) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 12: + { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 20: break; + case 4: + { addNullToken(); return firstToken; + } + case 21: break; + case 15: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-2), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + case 22: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 23: break; + case 17: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 24: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 25: break; + case 6: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 26: break; + case 18: + { addToken(Token.FUNCTION); + } + case 27: break; + case 14: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 28: break; + case 13: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-(count-1), zzMarkedPos-1, Token.MARKUP_TAG_NAME); + yybegin(INTAG); + } + case 29: break; + case 9: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 30: break; + case 8: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 31: break; + case 16: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 32: break; + case 10: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 33: break; + case 19: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 34: break; + case 5: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 35: break; + case 11: + { addToken(Token.OPERATOR); + } + case 36: break; + case 7: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 37: break; + case 1: + { + } + case 38: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 796: break; + case INTAG: { + addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; + } + case 797: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; + } + case 798: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 799: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; + } + case 800: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex old mode 100644 new mode 100755 similarity index 68% rename from tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex rename to tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex index 1169d29ca..84cb66aa3 --- a/tools/script_filter/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.flex @@ -1,24 +1,10 @@ /* - * 03/21/2005 + * 11/04/2016 * - * PropertiesFileTokenMaker.java - Scanner for properties files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * IniTokenMaker.java - Scanner for .ini files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,7 +15,7 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * This class splits up text into tokens representing a Java properties file.

                      + * This class splits up text into tokens representing a .ini file.

                      * * This implementation was created using * JFlex 1.4.1; however, the generated file @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *

                        - *
                      • The generated PropertiesFileTokenMaker.java file will + *
                      • The generated IniTokenMaker.java file will * contain two definitions of both zzRefill and * yyreset. You should hand-delete the second of each * definition (the ones generated by the lexer), as these generated @@ -69,9 +55,8 @@ import org.fife.ui.rsyntaxtextarea.*; %% %public -%class PropertiesFileTokenMaker +%class IniTokenMaker %extends AbstractJFlexTokenMaker -%implements TokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -83,7 +68,7 @@ import org.fife.ui.rsyntaxtextarea.*; * Constructor. This must be here because JFlex does not generate a * no-parameter constructor. */ - public PropertiesFileTokenMaker() { + public IniTokenMaker() { super(); } @@ -119,6 +104,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -126,14 +112,11 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "#", null }; + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; } @@ -149,22 +132,14 @@ import org.fife.ui.rsyntaxtextarea.*; * @return The first Token in a linked list representing * the syntax highlighted text. */ + @Override public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = VALUE; - start = text.offset; - break; - default: - state = Token.NULL; - } - + int state = YYINITIAL; s = text; try { yyreset(zzReader); @@ -172,7 +147,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -183,7 +158,6 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; @@ -200,7 +174,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -222,29 +196,30 @@ import org.fife.ui.rsyntaxtextarea.*; %} -Equals = ([=\:]) -Name = ([^=\: \t\n#!]*) +Equals = ([=]) +Identifier = ([^ \t\n#;\[=]*) Whitespace = ([ \t]+) -Comment = ([#!].*) -SingleQuote = (') +Comment = ([#;].*) +Section = ([\[][^\]]*[\]]?) %state VALUE %% { - {Name} { addToken(Token.RESERVED_WORD); } + {Identifier} { addToken(Token.DATA_TYPE); } {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); } {Whitespace} { addToken(Token.WHITESPACE); } {Comment} { addToken(Token.COMMENT_EOL); } - <> { addNullToken(); return firstToken; } + {Section} { addToken(Token.PREPROCESSOR); } + <> { addNullToken(); return firstToken; } } { - {SingleQuote}[^']*{SingleQuote}? { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; } - [^'\{\\]+ {} - "{"[^\}]*"}"? { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } - [\\]. {} - [\\] { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; } + {Identifier} { addToken(Token.IDENTIFIER); } + {Equals} { start = zzMarkedPos; addToken(Token.OPERATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {Comment} { addToken(Token.COMMENT_EOL); } + {Section} { addToken(Token.PREPROCESSOR); } + <> { addNullToken(); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java new file mode 100755 index 000000000..6fc7a58df --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/IniTokenMaker.java @@ -0,0 +1,646 @@ +/* The following code was generated by JFlex 1.4.1 on 11/4/16 11:29 PM */ + +/* + * 11/04/2016 + * + * IniTokenMaker.java - Scanner for .ini files. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.IOException; +import java.io.Reader; + +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + + +/** + * This class splits up text into tokens representing a .ini file.

                        + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                          + *
                        • The generated IniTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. + *
                        + * + * @author Robert Futrell + * @version 0.4 + * + */ + +public class IniTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int VALUE = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\5\25\0\1\3\2\0\1\4\27\0\1\4\1\0"+ + "\1\1\35\0\1\2\1\0\1\6\uffa2\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\1\1\2\1\1\1\3\1\4\1\5\1\6\1\2"+ + "\1\7\1\4"; + + private static int [] zzUnpackAction() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\7\0\16\0\25\0\34\0\43\0\52\0\61"+ + "\0\25\0\25"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\5\1\6\1\7\1\0\1\3\1\10"+ + "\1\11\1\5\1\6\1\7\1\0\1\10\1\3\5\0"+ + "\1\3\7\0\6\5\1\12\3\0\1\6\3\0\5\7"+ + "\1\0\1\7\1\10\5\0\1\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[56]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\1\1\11\4\1\2\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[10]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public IniTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { ";", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public IniTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public IniTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 32) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); + } + case 8: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 9: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 10: break; + case 7: + { start = zzMarkedPos; addToken(Token.OPERATOR); + } + case 11: break; + case 6: + { addToken(Token.COMMENT_EOL); + } + case 12: break; + case 4: + { addToken(Token.PREPROCESSOR); + } + case 13: break; + case 1: + { addToken(Token.DATA_TYPE); + } + case 14: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 11: break; + case VALUE: { + addNullToken(); return firstToken; + } + case 12: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex old mode 100644 new mode 100755 index 37630d4bf..6d2e16d66 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.flex @@ -2,28 +2,15 @@ * 02/11/2008 * * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; +import java.util.Stack; import org.fife.ui.rsyntaxtextarea.*; @@ -49,7 +36,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                          - *
                        • The generated JSPTokenMaker.java file will contain two + *
                        • The generated JSPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,8 +50,7 @@ import org.fife.ui.rsyntaxtextarea.*; *
                        * * @author Robert Futrell - * @version 0.7 - * + * @version 0.9 */ %% @@ -77,72 +63,200 @@ import org.fife.ui.rsyntaxtextarea.*; %{ + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ - public static final int INTERNAL_INTAG = -1; + private static final int INTERNAL_INTAG = -3; /** * Token type specific to JSPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ - public static final int INTERNAL_INTAG_SCRIPT = -2; + private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; /** - * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. */ - public static final int INTERNAL_IN_HIDDEN_COMMENT = -5; + private static final int INTERNAL_INTAG_STYLE = -7; /** - * Token type specifying we're in a Java documentation comment. + * Token type specifying we're in a double-qouted attribute in a + * style tag. */ - public static final int INTERNAL_IN_JAVA_DOCCOMMENT = -6; + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; /** - * Token type specifying we're in Java code. + * Token type specifying we're in a single-qouted attribute in a + * style tag. */ - public static final int INTERNAL_IN_JAVA_EXPRESSION = -7; + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** - * Token type specifying we're in Java multiline comment. + * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). */ - public static final int INTERNAL_IN_JAVA_MLC = -8; + private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; /** * Token type specifying we're in a JSP directive (either include, page * or taglib). */ - public static final int INTERNAL_IN_JSP_DIRECTIVE = -9; + private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; /** * Token type specifying we're in JavaScript. */ - public static final int INTERNAL_IN_JS = -10; + static final int INTERNAL_IN_JS = -12; + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -13; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -15; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -17; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -18; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -19; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -20; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); /** - * Token type specifying we're in a JavaScript multiline comment. + * Token type specifying we're in a Java documentation comment. + */ + private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); + + /** + * Token type specifying we're in Java code. + */ + static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); + + /** + * Token type specifying we're in Java multiline comment. + */ + private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). */ - public static final int INTERNAL_IN_JS_MLC = -11; + private int jspInState; /** * Whether closing markup tags are automatically completed for JSP. */ private static boolean completeCloseTags; + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + /** * Constructor. This must be here because JFlex does not generate a @@ -164,6 +278,18 @@ import org.fife.ui.rsyntaxtextarea.*; } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + /** * Adds the token specified to the current linked list of tokens. * @@ -195,12 +321,22 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually @@ -209,11 +345,61 @@ import org.fife.ui.rsyntaxtextarea.*; * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ + @Override public boolean getCompleteCloseTags() { return completeCloseTags; } + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + /** * Returns the first token in the linked list of tokens generated * from text. This method must be implemented by @@ -226,82 +412,154 @@ import org.fife.ui.rsyntaxtextarea.*; * @return The first Token in a linked list representing * the syntax highlighted text. */ + @Override public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; + jspInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { - case Token.COMMENT_MULTILINE: + case Token.MARKUP_COMMENT: state = COMMENT; - start = text.offset; break; case Token.PREPROCESSOR: state = PI; - start = text.offset; break; case Token.VARIABLE: state = DTD; - start = text.offset; break; case INTERNAL_INTAG: state = INTAG; - start = text.offset; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; - start = text.offset; break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; - start = text.offset; break; - case Token.LITERAL_CHAR: + case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; - start = text.offset; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; - start = text.offset; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; - start = text.offset; break; - case INTERNAL_IN_HIDDEN_COMMENT: - state = HIDDEN_COMMENT; - start = text.offset; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; break; - case INTERNAL_IN_JAVA_DOCCOMMENT: - state = JAVA_DOCCOMMENT; - start = text.offset; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; break; - case INTERNAL_IN_JAVA_EXPRESSION: - state = JAVA_EXPRESSION; - start = text.offset; - break; - case INTERNAL_IN_JAVA_MLC: - state = JAVA_MLC; - start = text.offset; + case INTERNAL_IN_HIDDEN_COMMENT: + state = HIDDEN_COMMENT; break; case INTERNAL_IN_JSP_DIRECTIVE: state = JSP_DIRECTIVE; - start = text.offset; break; case INTERNAL_IN_JS: state = JAVASCRIPT; - start = text.offset; + languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; - start = text.offset; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; break; default: - state = Token.NULL; + if (initialTokenType<-1024) { + // INTERNAL_IN_JAVAxxx - jspInState or + // INTERNAL_IN_CSSxxx - cssPrevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_JAVA_DOCCOMMENT: + state = JAVA_DOCCOMMENT; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_EXPRESSION: + state = JAVA_EXPRESSION; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_MLC: + state = JAVA_MLC; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = Token.NULL; + } + break; } + setLanguageIndex(languageIndex); + start = text.offset; s = text; try { yyreset(zzReader); @@ -309,7 +567,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -349,7 +607,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -372,30 +630,41 @@ import org.fife.ui.rsyntaxtextarea.*; %} // HTML-specific stuff. -Whitespace = ([ \t\f]) -LineTerminator = ([\n]) -Identifier = ([^ \t\n<&]+) -AmperItem = ([&][^; \t]*[;]?) -InTagIdentifier = ([^ \t\n\"\'/=>]+) -UnclosedStringLiteral = ([\"][^\"]*) -StringLiteral = ({UnclosedStringLiteral}[\"]) -UnclosedCharLiteral = ([\'][^\']*) -CharLiteral = ({UnclosedCharLiteral}[\']) -EndScriptTag = ("") - - -// Java stuff. +Whitespace = ([ \t\f]) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +UnclosedStringLiteral = ([\"][^\"]*) +StringLiteral = ({UnclosedStringLiteral}[\"]) +UnclosedCharLiteral = ([\'][^\']*) +CharLiteral = ({UnclosedCharLiteral}[\']) +EndScriptTag = ("") +EndStyleTag = ("") + +JspExpressionStart = ("<%=") +JspScriptletStart = ("<%") +JspDeclarationStart = ("<%!") +JspStart = ({JspExpressionStart}|{JspScriptletStart}|{JspDeclarationStart}) + +// General stuff. Letter = [A-Za-z] -NonzeroDigit = [1-9] +NonzeroDigit = [1-9] +BinaryDigit = ([0-1]) Digit = ("0"|{NonzeroDigit}) -HexDigit = ({Digit}|[A-Fa-f]) +HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) +LetterOrUnderscore = ({Letter}|"_") +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + + +// Java stuff. AnyCharacterButApostropheOrBackSlash = ([^\\']) AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) -NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") -IdentifierStart = ({Letter}|"_"|"$") +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) WhiteSpace = ([ \t\f]) JCharLiteral = ([\']({AnyCharacterButApostropheOrBackSlash}|{Escape})[\']) @@ -404,43 +673,61 @@ JErrorCharLiteral = ({UnclosedCharLiteral}[\']) JStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*[\"]) JUnclosedStringLiteral = ([\"]([\\].|[^\\\"])*[^\"]?) JErrorStringLiteral = ({UnclosedStringLiteral}[\"]) + MLCBegin = "/*" MLCEnd = "*/" DocCommentBegin = "/**" LineCommentBegin = "//" -IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") -IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) -IntegerLiteral = ({IntegerHelper1}[lL]?) -HexLiteral = ({IntegerHelper2}[lL]?) + +DigitOrUnderscore = ({Digit}|[_]) +DigitsAndUnderscoresEnd = ({DigitOrUnderscore}*{Digit}) +IntegerHelper = (({NonzeroDigit}{DigitsAndUnderscoresEnd}?)|"0") +IntegerLiteral = ({IntegerHelper}[lL]?) + +BinaryDigitOrUnderscore = ({BinaryDigit}|[_]) +BinaryDigitsAndUnderscores = ({BinaryDigit}({BinaryDigitOrUnderscore}*{BinaryDigit})?) +BinaryLiteral = ("0"[bB]{BinaryDigitsAndUnderscores}) + +HexDigitOrUnderscore = ({HexDigit}|[_]) +HexDigitsAndUnderscores = ({HexDigit}({HexDigitOrUnderscore}*{HexDigit})?) +OctalDigitOrUnderscore = ({OctalDigit}|[_]) +OctalDigitsAndUnderscoresEnd= ({OctalDigitOrUnderscore}*{OctalDigit}) +HexHelper = ("0"(([xX]{HexDigitsAndUnderscores})|({OctalDigitsAndUnderscoresEnd}))) +HexLiteral = ({HexHelper}[lL]?) + FloatHelper1 = ([fFdD]?) FloatHelper2 = ([eE][+-]?{Digit}+{FloatHelper1}) FloatLiteral1 = ({Digit}+"."({FloatHelper1}|{FloatHelper2}|{Digit}+({FloatHelper1}|{FloatHelper2}))) FloatLiteral2 = ("."{Digit}+({FloatHelper1}|{FloatHelper2})) FloatLiteral3 = ({Digit}+{FloatHelper2}) FloatLiteral = ({FloatLiteral1}|{FloatLiteral2}|{FloatLiteral3}|({Digit}+[fFdD])) + ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparator}+) BooleanLiteral = ("true"|"false") Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;,.]) -NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"||"|"&&"|">>>") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") Operator = ({NonAssignmentOperator}|{AssignmentOperator}) -DocumentationKeyword = ("author"|"deprecated"|"exception"|"link"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") JIdentifier = ({IdentifierStart}{IdentifierPart}*) -ErrorIdentifier = ({NonSeparator}+) +ErrorIdentifier = (({NonSeparator}|\`)+) Annotation = ("@"{JIdentifier}?) PrimitiveTypes = ("boolean"|"byte"|"char"|"double" |"float"|"int"|"long"|"short") +CurrentBlockTag = ("author"|"deprecated"|"exception"|"param"|"return"|"see"|"serial"|"serialData"|"serialField"|"since"|"throws"|"version") +ProposedBlockTag = ("category"|"example"|"tutorial"|"index"|"exclude"|"todo"|"internal"|"obsolete"|"threadsafety") +BlockTag = ({CurrentBlockTag}|{ProposedBlockTag}) +InlineTag = ("code"|"docRoot"|"inheritDoc"|"link"|"linkplain"|"literal"|"value") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) // JavaScript stuff. -JS_UnclosedCharLiteral = ("'"({AnyCharacterButApostropheOrBackSlash}|{Escape})) -JS_CharLiteral = ({JS_UnclosedCharLiteral}"'") -JS_UnclosedErrorCharLiteral = ([\'][^\'\n]*) -JS_ErrorCharLiteral = (([\'][\'])|{JS_UnclosedErrorCharLiteral}[\']) -JS_UnclosedStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*) -JS_StringLiteral = ({JS_UnclosedStringLiteral}[\"]) -JS_UnclosedErrorStringLiteral = ([\"]([^\"\n]|"\\\"")*) -JS_ErrorStringLiteral = ({JS_UnclosedErrorStringLiteral}[\"]) JS_MLCBegin = ({MLCBegin}) JS_MLCEnd = ({MLCEnd}) JS_LineCommentBegin = ({LineCommentBegin}) @@ -452,7 +739,27 @@ JS_Separator = ({Separator}) JS_Separator2 = ({Separator2}) JS_Operator = ({Operator}) JS_Identifier = ({JIdentifier}) -JS_ErrorIdentifier = ({ErrorIdentifier}) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) + +JS_TemplateLiteralExprStart = ("${") + + +// CSS stuff. +CSS_SelectorPiece = (("*"|"."|{LetterOrUnderscoreOrDash})({LetterOrUnderscoreOrDash}|"."|{Digit})*) +CSS_PseudoClass = (":"("root"|"nth-child"|"nth-last-child"|"nth-of-type"|"nth-last-of-type"|"first-child"|"last-child"|"first-of-type"|"last-of-type"|"only-child"|"only-of-type"|"empty"|"link"|"visited"|"active"|"hover"|"focus"|"target"|"lang"|"enabled"|"disabled"|"checked"|":first-line"|":first-letter"|":before"|":after"|"not")) +CSS_AtKeyword = ("@"{CSS_SelectorPiece}) +CSS_Id = ("#"{CSS_SelectorPiece}) +CSS_Separator = ([;\(\)\[\]]) +CSS_MlcStart = ({JS_MLCBegin}) +CSS_MlcEnd = ({JS_MLCEnd}) +CSS_Property = ([\*]?{LetterOrUnderscoreOrDash}({LetterOrUnderscoreOrDash}|{Digit})*) +CSS_ValueChar = ({LetterOrUnderscoreOrDash}|[\\/]) +CSS_Value = ({CSS_ValueChar}*) +CSS_Function = ({CSS_Value}\() +CSS_Digits = ([\-]?{Digit}+([0-9\.]+)?(pt|pc|in|mm|cm|em|ex|px|ms|s|%)?) +CSS_Hex = ("#"[0-9a-fA-F]+) +CSS_Number = ({CSS_Digits}|{CSS_Hex}) %state COMMENT @@ -465,31 +772,48 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) %state INTAG_SCRIPT %state INATTR_DOUBLE_SCRIPT %state INATTR_SINGLE_SCRIPT +%state INTAG_STYLE +%state INATTR_DOUBLE_STYLE +%state INATTR_SINGLE_STYLE %state JAVASCRIPT +%state JS_STRING +%state JS_CHAR %state JS_MLC +%state JS_EOL_COMMENT %state HIDDEN_COMMENT %state JAVA_DOCCOMMENT %state JAVA_EXPRESSION %state JAVA_MLC %state JSP_DIRECTIVE +%state CSS +%state CSS_PROPERTY +%state CSS_VALUE +%state CSS_STRING +%state CSS_CHAR_LITERAL +%state CSS_C_STYLE_COMMENT +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR %% { - "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "-->" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { - [^\n\-]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } - "--%>" { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "--%>" { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } } { [^\n\?]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } - "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} - <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } - ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.VARIABLE); } - <> { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { @@ -675,6 +1003,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) } { + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } @@ -687,51 +1016,84 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) } { - [^\"]* {} - [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\"<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\"] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { - [^\']* {} - [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\'<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\'] { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } - ">" { yybegin(JAVASCRIPT); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } } { - [^\"]* {} - [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\"<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { + {JspStart} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + [^\'<]* {} + "<" { /* Allowing JSP expressions, etc. */ } + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + [^\"]* {} + [\"] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { [^\']* {} - [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } + [\'] { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { - yybegin(YYINITIAL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } - // ECMA keywords. + // ECMA 3+ keywords. "break" | "continue" | "delete" | @@ -741,13 +1103,18 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "if" | "in" | "new" | - "return" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" | @@ -791,12 +1158,12 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. - "eval" { addToken(Token.FUNCTION); } - "parseInt" { addToken(Token.FUNCTION); } - "parseFloat" { addToken(Token.FUNCTION); } - "escape" { addToken(Token.FUNCTION); } - "unescape" { addToken(Token.FUNCTION); } - "isNaN" { addToken(Token.FUNCTION); } + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } @@ -804,24 +1171,46 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) {Whitespace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ - {JS_CharLiteral} { addToken(Token.LITERAL_CHAR); } - {JS_UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_UnclosedErrorCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } - {JS_UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_UnclosedErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } - {JS_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } + {JspStart} { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); } + /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } @@ -842,9 +1231,138 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) } + { + [^\n\\\"]+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\']+ {} + \n { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + { // JavaScript MLC's. This state is essentially Java's MLC state. - [^\n\*]+ {} + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} @@ -852,8 +1370,126 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) } + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + [^\n\\\"]+ {} + \\.? { /* Skip escaped chars. */ } + \" { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + [^\n\\\']+ {} + \\.? { /* Skip escaped chars. */ } + \' { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {CSS_MlcEnd} { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + + { + "%>" { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); } + /* Keywords */ "abstract"| "assert" | @@ -884,7 +1520,6 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "private" | "protected" | "public" | - "return" | "static" | "strictfp" | "super" | @@ -898,6 +1533,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "void" | "volatile" | "while" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } /* Data types. */ {PrimitiveTypes} { addToken(Token.DATA_TYPE); } @@ -905,14 +1541,16 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) /* Booleans. */ {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } - /* java.lang stuff */ + /* java.lang classes */ "Appendable" | + "AutoCloseable" | "CharSequence" | "Cloneable" | "Comparable" | "Iterable" | "Readable" | "Runnable" | + "Thread.UncaughtExceptionHandler" | "Boolean" | "Byte" | "Character" | @@ -920,6 +1558,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "Character.UnicodeBlock" | "Class" | "ClassLoader" | + "ClassValue" | "Compiler" | "Double" | "Enum" | @@ -933,6 +1572,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "Package" | "Process" | "ProcessBuilder" | + "ProcessBuilder.Redirect" | "Runtime" | "RuntimePermission" | "SecurityManager" | @@ -948,6 +1588,8 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "ThreadLocal" | "Throwable" | "Void" | + "Character.UnicodeScript" | + "ProcessBuilder.Redirect.Type" | "Thread.State" | "ArithmeticException" | "ArrayIndexOutOfBoundsException" | @@ -977,6 +1619,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "UnsupportedOperationException" | "AbstractMethodError" | "AssertionError" | + "BootstrapMethodError" | "ClassCircularityError" | "ClassFormatError" | "Error" | @@ -996,51 +1639,261 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) "UnsatisfiedLinkError" | "UnsupportedClassVersionError" | "VerifyError" | - "VirtualMachineError" { addToken(Token.FUNCTION); } - -} - - - { - - {LineTerminator} { addEndToken(INTERNAL_IN_JAVA_EXPRESSION); return firstToken; } + "VirtualMachineError" | + + /* java.io classes*/ + "Closeable" | + "DataInput" | + "DataOutput" | + "Externalizable" | + "FileFilter" | + "FilenameFilter" | + "Flushable" | + "ObjectInput" | + "ObjectInputValidation" | + "ObjectOutput" | + "ObjectStreamConstants" | + "Serializable" | + + "BufferedInputStream" | + "BufferedOutputStream" | + "BufferedReader" | + "BufferedWriter" | + "ByteArrayInputStream" | + "ByteArrayOutputStream" | + "CharArrayReader" | + "CharArrayWriter" | + "Console" | + "DataInputStream" | + "DataOutputStream" | + "File" | + "FileDescriptor" | + "FileInputStream" | + "FileOutputStream" | + "FilePermission" | + "FileReader" | + "FileWriter" | + "FilterInputStream" | + "FilterOutputStream" | + "FilterReader" | + "FilterWriter" | + "InputStream" | + "InputStreamReader" | + "LineNumberInputStream" | + "LineNumberReader" | + "ObjectInputStream" | + "ObjectInputStream.GetField" | + "ObjectOutputStream" | + "ObjectOutputStream.PutField" | + "ObjectStreamClass" | + "ObjectStreamField" | + "OutputStream" | + "OutputStreamWriter" | + "PipedInputStream" | + "PipedOutputStream" | + "PipedReader" | + "PipedWriter" | + "PrintStream" | + "PrintWriter" | + "PushbackInputStream" | + "PushbackReader" | + "RandomAccessFile" | + "Reader" | + "SequenceInputStream" | + "SerializablePermission" | + "StreamTokenizer" | + "StringBufferInputStream" | + "StringReader" | + "StringWriter" | + "Writer" | + + "CharConversionException" | + "EOFException" | + "FileNotFoundException" | + "InterruptedIOException" | + "InvalidClassException" | + "InvalidObjectException" | + "IOException" | + "NotActiveException" | + "NotSerializableException" | + "ObjectStreamException" | + "OptionalDataException" | + "StreamCorruptedException" | + "SyncFailedException" | + "UncheckedIOException" | + "UnsupportedEncodingException" | + "UTFDataFormatException" | + "WriteAbortedException" | + + "IOError" | + + /* java.util classes */ + "Collection" | + "Comparator" | + "Deque" | + "Enumeration" | + "EventListener" | + "Formattable" | + "Iterator" | + "List" | + "ListIterator" | + "Map" | + "Map.Entry" | + "NavigableMap" | + "NavigableSet" | + "Observer" | + "PrimitiveIterator" | + "PrimitiveIterator.OfDouble" | + "PrimitiveIterator.OfInt" | + "PrimitiveIterator.OfLong" | + "Queue" | + "RandomAccess" | + "Set" | + "SortedMap" | + "SortedSet" | + "Spliterator" | + "Spliterator.OfDouble" | + "Spliterator.OfInt" | + "Spliterator.OfLong" | + "Spliterator.OfPrimitive" | + + "AbstractCollection" | + "AbstractList" | + "AbstractMap" | + "AbstractMap.SimpleEntry" | + "AbstractMap.SimpleImmutableEntry" | + "AbstractQueue" | + "AbstractSequentialList" | + "AbstractSet" | + "ArrayDeque" | + "ArrayList" | + "Arrays" | + "Base64" | + "Base64.Decoder" | + "Base64.Encoder" | + "BitSet" | + "Calendar" | + "Calendar.Builder" | + "Collections" | + "Currency" | + "Date" | + "Dictionary" | + "DoubleSummaryStatistics" | + "EnumMap" | + "EnumSet" | + "EventListenerProxy" | + "EventObject" | + "FormattableFlags" | + "Formatter" | + "GregorianCalendar" | + "HashMap" | + "HashSet" | + "Hashtable" | + "IdentityHashMap" | + "IntSummaryStatistics" | + "LinkedHashMap" | + "LinkedHashSet" | + "LinkedList" | + "ListResourceBundle" | + "Locale" | + "Locale.Builder" | + "Locale.LanguageRange" | + "LongSummaryStatistics" | + "Objects" | + "Observable" | + "Optional" | + "OptionalDouble" | + "OptionalInt" | + "OptionalLong" | + "PriorityQueue" | + "Properties" | + "PropertyPermission" | + "PropertyResourceBundle" | + "Random" | + "ResourceBundle" | + "ResourceBundle.Control" | + "Scanner" | + "ServiceLoader" | + "SimpleTimeZone" | + "Spliterators" | + "Spliterators.AbstractDoubleSpliterator" | + "Spliterators.AbstractIntSpliterator" | + "Spliterators.AbstractLongSpliterator" | + "Spliterators.AbstractSpliterator" | + "SpliteratorRandom" | + "Stack" | + "StringJoiner" | + "StringTokenizer" | + "Timer" | + "TimerTask" | + "TimeZone" | + "TreeMap" | + "TreeSet" | + "UUID" | + "Vector" | + "WeakHashMap" | + + "Formatter.BigDecimalLayoutForm" | + "Locale.Category" | + "Locale.FilteringMode" | + + "ConcurrentModificationException" | + "DuplicateFormatFlagsException" | + "EmptyStackException" | + "FormatFlagsConversionMismatchException" | + "FormatterClosedException" | + "IllegalFormatCodePointException" | + "IllegalFormatConversionException" | + "IllegalFormatException" | + "IllegalFormatFlagsException" | + "IllegalFormatPrecisionException" | + "IllegalFormatWidthException" | + "IllformedLocaleException" | + "InputMismatchException" | + "InvalidPropertiesFormatException" | + "MissingFormatArgumentException" | + "MissingFormatWidthException" | + "MissingResourceException" | + "NoSuchElementException" | + "TooManyListenersException" | + "UnknownFormatConversionException" | + "UnknownFormatFlagsException" | + + "ServiceConfigurationError" { addToken(Token.FUNCTION); } + + {LineTerminator} { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JIdentifier} { addToken(Token.IDENTIFIER); } -/* - * How should we handle generics? -"<"[^\[\]\{\}\(\)\+\-\*\/\%\&\|\!\~]+">" {addToken(Token.PREPROCESSOR); } -*/ - {WhiteSpace}+ { addToken(Token.WHITESPACE); } /* String/Character literals. */ {JCharLiteral} { addToken(Token.LITERAL_CHAR); } - {JUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION); return firstToken; } + {JUnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JErrorCharLiteral} { addToken(Token.ERROR_CHAR); } {JStringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } - {JUnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION); return firstToken; } + {JUnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } {JErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {MLCBegin} { start = zzMarkedPos-2; yybegin(JAVA_MLC); } {DocCommentBegin} { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); } - {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION); return firstToken; } + {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } /* Annotations. */ - {Annotation} { addToken(Token.VARIABLE); /* FIXME: Add token type to Token? */ } + {Annotation} { addToken(Token.ANNOTATION); } /* Separators. */ {Separator} { addToken(Token.SEPARATOR); } {Separator2} { addToken(Token.IDENTIFIER); } /* Operators. */ - "%>" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } {Operator} { addToken(Token.OPERATOR); } /* Numbers */ {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {BinaryLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } {FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } @@ -1048,7 +1901,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) {ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ - <> { addEndToken(INTERNAL_IN_JAVA_EXPRESSION); return firstToken; } + <> { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } /* Catch any other (unhandled) characters and flag them as bad. */ . { addToken(Token.ERROR_IDENTIFIER); } @@ -1057,37 +1910,32 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) { - - [^\n\*]+ {} -/* [^\h\w\n\*]+ {} - {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addToken(temp,zzMarkedPos-1, Token.HYPERLINK); start = zzMarkedPos; } - "h" {} - "w" {} -*/ - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC); return firstToken; } + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC); return firstToken; } - + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } } { - [^\@\n\<\*]+ {} -/* [^\h\w\@\n\<\*]+ {} - {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.HYPERLINK); start = zzMarkedPos; } - "h" {} - "w" {} -*/ - "@"{DocumentationKeyword} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } - "@" {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT); return firstToken; } - "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.PREPROCESSOR); start = zzMarkedPos; } - \< {} + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} {MLCEnd} { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } - \* {} - <> { yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT); return firstToken; } + \* {} + <> { yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } } @@ -1100,7 +1948,7 @@ JS_ErrorIdentifier = ({ErrorIdentifier}) {InTagIdentifier} { addToken(Token.IDENTIFIER); } {Whitespace}+ { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } - "%>" { yybegin(YYINITIAL); addToken(Token.SEPARATOR); } + "%>" { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); } "%" { addToken(Token.IDENTIFIER); } ">" { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java old mode 100644 new mode 100755 index a1eac1a32..1040a1e88 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JSPTokenMaker.java @@ -1,3929 +1,8137 @@ -/* The following code was generated by JFlex 1.4.1 on 10/6/09 5:51 PM */ +/* The following code was generated by JFlex 1.4.1 on 12/30/16 12:53 AM */ /* * 02/11/2008 * * JSPTokenMaker.java - Generates tokens for JSP syntax highlighting. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.io.Reader; +import java.util.Stack; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** * Scanner for JSP files (supporting HTML 5). - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                        - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                        - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * * If you wish to regenerate this file yourself, keep in mind the following: *

                          - *
                        • The generated JSPTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                        • - *
                        • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                        • - *
                        • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                        • + *
                        • The generated JSPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • *
                        - * + * * @author Robert Futrell - * @version 0.7 - * + * @version 0.9 */ public class JSPTokenMaker extends AbstractMarkupTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int INATTR_SINGLE_SCRIPT = 10; - public static final int JAVA_EXPRESSION = 15; - public static final int HIDDEN_COMMENT = 13; - public static final int JS_MLC = 12; - public static final int INTAG_SCRIPT = 8; - public static final int JAVA_DOCCOMMENT = 14; - public static final int JSP_DIRECTIVE = 17; - public static final int COMMENT = 1; - public static final int INATTR_DOUBLE_SCRIPT = 9; - public static final int PI = 2; - public static final int JAVASCRIPT = 11; - public static final int INTAG = 4; - public static final int INTAG_CHECK_TAG_NAME = 5; - public static final int DTD = 3; - public static final int INATTR_SINGLE = 7; - public static final int YYINITIAL = 0; - public static final int INATTR_DOUBLE = 6; - public static final int JAVA_MLC = 16; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\4\1\2\1\0\1\1\1\36\22\0\1\4\1\61\1\10" + - "\1\0\1\37\1\60\1\5\1\11\2\54\1\40\1\56\1\55\1\46" + - "\1\47\1\12\1\24\3\35\3\116\1\26\2\23\1\63\1\6\1\3" + - "\1\7\1\21\1\62\1\100\1\103\1\25\1\14\1\75\1\45\1\43" + - "\1\111\1\115\1\16\1\117\1\112\1\42\1\107\1\105\1\104\1\17" + - "\1\113\1\15\1\13\1\20\1\110\1\114\1\22\1\41\1\106\1\22" + - "\1\54\1\27\1\54\1\57\1\37\1\0\1\51\1\34\1\70\1\66" + - "\1\50\1\44\1\102\1\64\1\72\1\122\1\73\1\52\1\74\1\33" + - "\1\65\1\67\1\121\1\31\1\53\1\32\1\30\1\77\1\76\1\71" + - "\1\101\1\120\1\54\1\57\1\54\1\63\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\6\0\2\1\1\0\2\1\7\0\2\2\1\3\1\4" + - "\1\5\1\6\1\1\1\7\2\1\1\10\2\1\1\11" + - "\1\12\1\13\1\5\1\14\1\15\1\16\1\17\1\20" + - "\1\21\1\22\1\23\2\21\2\23\1\21\2\23\4\21" + - "\1\23\6\21\1\23\1\1\1\24\1\1\1\25\1\13" + - "\1\26\1\27\1\17\1\30\1\31\1\32\1\33\1\34" + - "\2\14\1\2\1\14\1\35\1\36\1\14\2\2\1\14" + - "\2\37\5\2\1\33\1\2\1\14\5\2\1\40\1\14" + - "\10\2\1\1\1\41\1\1\1\42\2\1\1\43\3\1" + - "\1\44\1\14\1\45\1\46\1\14\17\2\1\14\6\2" + - "\1\47\6\2\1\50\1\1\2\2\1\51\1\52\1\53" + - "\1\54\4\2\1\4\2\55\1\56\1\57\1\60\1\6" + - "\1\0\1\61\32\21\1\23\11\21\1\23\5\21\1\23" + - "\30\21\1\62\2\0\1\63\1\35\3\52\1\36\1\64" + - "\1\65\1\33\1\2\1\14\1\66\1\37\1\67\1\66" + - "\1\67\1\66\1\70\1\66\35\2\1\53\7\2\2\53" + - "\7\2\1\71\3\0\1\72\1\73\11\0\2\45\1\46" + - "\1\0\1\46\1\74\1\75\33\2\1\76\4\2\1\47" + - "\16\2\1\77\1\100\1\2\1\101\2\2\1\102\1\55" + - "\1\56\1\0\1\103\1\0\1\104\14\21\1\23\63\21" + - "\1\0\3\35\1\36\2\52\1\36\1\0\1\33\1\2" + - "\1\67\1\0\2\70\52\2\1\6\11\2\13\0\1\51" + - "\1\45\1\0\2\45\1\46\1\0\3\46\1\105\41\2" + - "\1\33\25\2\1\55\1\106\1\107\17\21\1\23\14\21" + - "\1\23\6\21\1\0\1\35\1\63\1\35\1\36\1\110" + - "\1\33\2\2\1\111\6\2\1\6\6\2\1\112\23\2" + - "\1\113\6\0\1\114\4\0\3\45\1\46\31\2\1\112" + - "\3\2\1\33\22\2\1\53\1\2\1\55\11\21\1\23" + - "\12\21\1\0\1\35\1\36\1\33\3\2\1\53\3\2" + - "\1\53\16\2\11\0\3\45\1\46\5\2\1\112\25\2" + - "\1\33\21\2\1\55\12\21\1\0\1\35\1\36\1\33" + - "\15\2\7\0\2\45\1\46\1\112\24\2\1\112\6\2" + - "\1\33\7\2\1\112\10\2\1\115\3\21\1\0\5\2" + - "\1\114\1\0\1\45\14\2\1\112\7\2\1\112\1\2" + - "\1\0\6\2\1\33\20\2\1\21\1\0\2\2\3\0" + - "\1\45\31\2\1\0\21\2\1\21\1\116\1\2\3\0" + - "\13\2\1\112\15\2\1\0\3\2\1\112\15\2\3\0" + - "\10\2\1\0\14\2\1\0\24\2\2\0\12\2\1\0" + - "\17\2\2\0\11\2\1\112\15\2\2\0\20\2\2\0" + - "\11\2\2\0\7\2\1\0\5\2\1\0\5\2\1\0" + - "\4\2\1\0\4\2\1\0\2\2\1\0\1\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[1257]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } + /** This character denotes the end of file */ + public static final int YYEOF = -1; - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } + /** lexical states */ + public static final int INATTR_SINGLE_SCRIPT = 10; + public static final int JS_CHAR = 16; + public static final int JAVA_EXPRESSION = 21; + public static final int CSS_STRING = 27; + public static final int HIDDEN_COMMENT = 19; + public static final int JS_MLC = 17; + public static final int CSS_CHAR_LITERAL = 28; + public static final int JAVA_DOCCOMMENT = 20; + public static final int INTAG_SCRIPT = 8; + public static final int JS_TEMPLATE_LITERAL_EXPR = 31; + public static final int CSS_PROPERTY = 25; + public static final int CSS_C_STYLE_COMMENT = 29; + public static final int CSS = 24; + public static final int CSS_VALUE = 26; + public static final int JSP_DIRECTIVE = 23; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 9; + public static final int PI = 2; + public static final int JAVASCRIPT = 14; + public static final int INTAG = 4; + public static final int INTAG_CHECK_TAG_NAME = 5; + public static final int INATTR_SINGLE_STYLE = 13; + public static final int DTD = 3; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 12; + public static final int INATTR_SINGLE = 7; + public static final int JS_TEMPLATE_LITERAL = 30; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 6; + public static final int JS_STRING = 15; + public static final int JAVA_MLC = 22; + public static final int INTAG_STYLE = 11; - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\123\0\246\0\371\0\u014c\0\u019f\0\u01f2\0\u0245" + - "\0\u0298\0\u02eb\0\u033e\0\u0391\0\u03e4\0\u0437\0\u048a\0\u04dd" + - "\0\u0530\0\u0583\0\u05d6\0\u0629\0\u067c\0\u06cf\0\u0722\0\u0775" + - "\0\u07c8\0\u067c\0\u081b\0\u086e\0\u067c\0\u08c1\0\u0914\0\u067c" + - "\0\u067c\0\u0967\0\u067c\0\u067c\0\u067c\0\u067c\0\u09ba\0\u067c" + - "\0\u0a0d\0\u067c\0\u0a60\0\u0ab3\0\u0b06\0\u0b59\0\u0bac\0\u0bff" + - "\0\u0c52\0\u0ca5\0\u0cf8\0\u0d4b\0\u0d9e\0\u0df1\0\u0e44\0\u0e97" + - "\0\u0eea\0\u0f3d\0\u0f90\0\u0fe3\0\u1036\0\u0a0d\0\u1089\0\u067c" + - "\0\u10dc\0\u067c\0\u112f\0\u067c\0\u067c\0\u1182\0\u067c\0\u067c" + - "\0\u067c\0\u11d5\0\u067c\0\u1228\0\u127b\0\u067c\0\u12ce\0\u1321" + - "\0\u1374\0\u13c7\0\u141a\0\u146d\0\u14c0\0\u1513\0\u1566\0\u15b9" + - "\0\u160c\0\u165f\0\u16b2\0\u1705\0\u067c\0\u1758\0\u17ab\0\u17fe" + - "\0\u1851\0\u18a4\0\u18f7\0\u194a\0\u067c\0\u199d\0\u19f0\0\u1a43" + - "\0\u1a96\0\u1ae9\0\u1b3c\0\u1b8f\0\u1be2\0\u1c35\0\u1c88\0\u067c" + - "\0\u1cdb\0\u067c\0\u1d2e\0\u1d81\0\u067c\0\u1dd4\0\u1e27\0\u1e7a" + - "\0\u067c\0\u1ecd\0\u1f20\0\u1f73\0\u1fc6\0\u2019\0\u206c\0\u20bf" + - "\0\u2112\0\u2165\0\u21b8\0\u220b\0\u225e\0\u22b1\0\u2304\0\u2357" + - "\0\u23aa\0\u23fd\0\u2450\0\u24a3\0\u24f6\0\u2549\0\u259c\0\u25ef" + - "\0\u2642\0\u2695\0\u26e8\0\u273b\0\u278e\0\u27e1\0\u2834\0\u2887" + - "\0\u28da\0\u292d\0\u067c\0\u2980\0\u29d3\0\u2a26\0\u2a79\0\u2acc" + - "\0\u067c\0\u067c\0\u2b1f\0\u2b72\0\u2bc5\0\u2c18\0\u2c6b\0\u2cbe" + - "\0\u2d11\0\u2d64\0\u2db7\0\u067c\0\u067c\0\u2e0a\0\u067c\0\u2e5d" + - "\0\u2eb0\0\u2f03\0\u2f56\0\u2fa9\0\u2ffc\0\u304f\0\u30a2\0\u30f5" + - "\0\u3148\0\u319b\0\u31ee\0\u3241\0\u3294\0\u32e7\0\u333a\0\u338d" + - "\0\u33e0\0\u3433\0\u3486\0\u34d9\0\u352c\0\u357f\0\u35d2\0\u3625" + - "\0\u3678\0\u36cb\0\u371e\0\u3771\0\u37c4\0\u3817\0\u386a\0\u38bd" + - "\0\u3910\0\u3963\0\u39b6\0\u3a09\0\u3a5c\0\u3aaf\0\u3b02\0\u3b55" + - "\0\u3ba8\0\u3bfb\0\u3c4e\0\u3ca1\0\u3cf4\0\u3d47\0\u3d9a\0\u3ded" + - "\0\u3e40\0\u3e93\0\u3ee6\0\u3f39\0\u3f8c\0\u3fdf\0\u4032\0\u4085" + - "\0\u40d8\0\u412b\0\u417e\0\u41d1\0\u4224\0\u4277\0\u42ca\0\u431d" + - "\0\u4370\0\u43c3\0\u067c\0\u12ce\0\u4416\0\u067c\0\u4469\0\u44bc" + - "\0\u450f\0\u067c\0\u4562\0\u45b5\0\u4608\0\u465b\0\u46ae\0\u4701" + - "\0\u4754\0\u4754\0\u4754\0\u47a7\0\u47fa\0\u484d\0\u48a0\0\u48f3" + - "\0\u4946\0\u4999\0\u49ec\0\u4a3f\0\u4a92\0\u4ae5\0\u4b38\0\u4b8b" + - "\0\u4bde\0\u4c31\0\u4c84\0\u4cd7\0\u4d2a\0\u4d7d\0\u4dd0\0\u4e23" + - "\0\u4e76\0\u4ec9\0\u4f1c\0\u4f6f\0\u4fc2\0\u5015\0\u5068\0\u50bb" + - "\0\u510e\0\u5161\0\u51b4\0\u5207\0\u525a\0\u52ad\0\u5300\0\u5353" + - "\0\u53a6\0\u53f9\0\u544c\0\u549f\0\u54f2\0\u5545\0\u141a\0\u5598" + - "\0\u55eb\0\u563e\0\u5691\0\u56e4\0\u5737\0\u578a\0\u067c\0\u57dd" + - "\0\u5830\0\u5883\0\u067c\0\u067c\0\u58d6\0\u5929\0\u597c\0\u59cf" + - "\0\u5a22\0\u5a75\0\u5ac8\0\u5b1b\0\u5b6e\0\u5bc1\0\u5c14\0\u5c67" + - "\0\u5cba\0\u5d0d\0\u5d60\0\u5db3\0\u5e06\0\u5e59\0\u5eac\0\u5eff" + - "\0\u5f52\0\u5fa5\0\u5ff8\0\u604b\0\u609e\0\u60f1\0\u6144\0\u6197" + - "\0\u61ea\0\u623d\0\u6290\0\u62e3\0\u6336\0\u6389\0\u63dc\0\u642f" + - "\0\u6482\0\u64d5\0\u6528\0\u657b\0\u65ce\0\u6621\0\u6674\0\u067c" + - "\0\u66c7\0\u671a\0\u5545\0\u676d\0\u67c0\0\u6813\0\u6866\0\u68b9" + - "\0\u690c\0\u695f\0\u69b2\0\u6a05\0\u6a58\0\u6aab\0\u6afe\0\u6b51" + - "\0\u6ba4\0\u6bf7\0\u6c4a\0\u067c\0\u067c\0\u6c9d\0\u067c\0\u6cf0" + - "\0\u6d43\0\u2c6b\0\u6d96\0\u067c\0\u6de9\0\u067c\0\u6e3c\0\u067c" + - "\0\u6e8f\0\u6ee2\0\u6f35\0\u6f88\0\u6fdb\0\u702e\0\u7081\0\u70d4" + - "\0\u7127\0\u717a\0\u71cd\0\u7220\0\u7273\0\u72c6\0\u7319\0\u736c" + - "\0\u73bf\0\u7412\0\u7465\0\u74b8\0\u750b\0\u755e\0\u75b1\0\u7604" + - "\0\u7657\0\u3a09\0\u76aa\0\u76fd\0\u7750\0\u77a3\0\u77f6\0\u7849" + - "\0\u789c\0\u78ef\0\u7942\0\u7995\0\u79e8\0\u7a3b\0\u7a8e\0\u7ae1" + - "\0\u7b34\0\u7b87\0\u7bda\0\u7c2d\0\u7c80\0\u7cd3\0\u7d26\0\u7d79" + - "\0\u7dcc\0\u7e1f\0\u7e72\0\u0ca5\0\u7ec5\0\u7f18\0\u7f6b\0\u7fbe" + - "\0\u8011\0\u8064\0\u80b7\0\u810a\0\u815d\0\u81b0\0\u8203\0\u8256" + - "\0\u82a9\0\u82fc\0\u834f\0\u83a2\0\u83f5\0\u8448\0\u849b\0\u84ee" + - "\0\u8541\0\u8594\0\u85e7\0\u863a\0\u868d\0\u4754\0\u86e0\0\u8733" + - "\0\u8786\0\u87d9\0\u882c\0\u887f\0\u88d2\0\u8925\0\u8978\0\u89cb" + - "\0\u8a1e\0\u8a71\0\u8ac4\0\u8b17\0\u8b6a\0\u8bbd\0\u8c10\0\u8c63" + - "\0\u8cb6\0\u8d09\0\u8d5c\0\u8daf\0\u8e02\0\u8e55\0\u8ea8\0\u8efb" + - "\0\u8f4e\0\u8fa1\0\u8ff4\0\u9047\0\u909a\0\u90ed\0\u9140\0\u9193" + - "\0\u91e6\0\u9239\0\u928c\0\u92df\0\u9332\0\u9385\0\u93d8\0\u942b" + - "\0\u947e\0\u94d1\0\u9524\0\u9577\0\u95ca\0\u961d\0\u9670\0\u96c3" + - "\0\u9716\0\u9769\0\u97bc\0\u980f\0\u9862\0\u98b5\0\u9908\0\u995b" + - "\0\u99ae\0\u9a01\0\u9a54\0\u9aa7\0\u9afa\0\u9b4d\0\u067c\0\u9ba0" + - "\0\u9bf3\0\u9c46\0\u9c99\0\u9cec\0\u9d3f\0\u9d92\0\u9de5\0\u9e38" + - "\0\u8541\0\u9e8b\0\u9ede\0\u9f31\0\u9f84\0\u9fd7\0\ua02a\0\ua07d" + - "\0\ua0d0\0\ua123\0\ua176\0\ua1c9\0\ua21c\0\ua26f\0\ua2c2\0\ua315" + - "\0\ua368\0\ua3bb\0\ua40e\0\ua461\0\ua4b4\0\ua507\0\ua55a\0\ua5ad" + - "\0\ua600\0\ua653\0\ua6a6\0\ua6f9\0\ua74c\0\ua79f\0\ua7f2\0\ua845" + - "\0\ua898\0\ua8eb\0\ua93e\0\ua991\0\ua9e4\0\uaa37\0\uaa8a\0\uaadd" + - "\0\uab30\0\uab83\0\uabd6\0\uac29\0\uac7c\0\uaccf\0\uad22\0\uad75" + - "\0\uadc8\0\uae1b\0\uae6e\0\uaec1\0\uaf14\0\uaf67\0\uafba\0\ub00d" + - "\0\ub060\0\u067c\0\u067c\0\ub0b3\0\ub106\0\ub159\0\ub1ac\0\ub1ff" + - "\0\ub252\0\ub2a5\0\ub2f8\0\ub34b\0\ub39e\0\ub3f1\0\ub444\0\ub497" + - "\0\ub4ea\0\ub53d\0\ub590\0\ub5e3\0\ub636\0\u3bfb\0\ub689\0\ub6dc" + - "\0\ub72f\0\ub782\0\ub7d5\0\ub828\0\ub87b\0\ub8ce\0\ub921\0\u7a3b" + - "\0\ub974\0\ub9c7\0\uba1a\0\uba6d\0\ubac0\0\ubb13\0\ubb66\0\ubbb9" + - "\0\u82fc\0\ubc0c\0\ubc5f\0\u067c\0\ubcb2\0\ubd05\0\ubd58\0\u141a" + - "\0\ubdab\0\ubdfe\0\ube51\0\ubea4\0\ubef7\0\ubf4a\0\u141a\0\ubf9d" + - "\0\ubff0\0\uc043\0\uc096\0\uc0e9\0\uc13c\0\u141a\0\uc18f\0\uc1e2" + - "\0\uc235\0\uc288\0\uc2db\0\uc32e\0\uc381\0\uc3d4\0\uc427\0\uc47a" + - "\0\uc4cd\0\uc520\0\uc573\0\uc5c6\0\uc619\0\uc66c\0\uc6bf\0\uc712" + - "\0\uc765\0\u067c\0\uc7b8\0\uc80b\0\uc85e\0\uc8b1\0\uc904\0\uc957" + - "\0\u067c\0\uc9aa\0\uc9fd\0\uca50\0\ucaa3\0\ucaf6\0\ucb49\0\ucb9c" + - "\0\ucbef\0\ucc42\0\ucc95\0\ucce8\0\ucd3b\0\ucd8e\0\ucde1\0\uce34" + - "\0\uce87\0\uceda\0\ucf2d\0\ucf80\0\ucfd3\0\ud026\0\ud079\0\ud0cc" + - "\0\ud11f\0\ud172\0\ud1c5\0\ud218\0\ud26b\0\ud2be\0\ud311\0\ud364" + - "\0\ud3b7\0\ud40a\0\ud45d\0\ud4b0\0\ud503\0\ud556\0\ud5a9\0\ud5fc" + - "\0\ud64f\0\ud6a2\0\ud6f5\0\ud748\0\ud79b\0\ud7ee\0\ud841\0\ud894" + - "\0\ud8e7\0\ud93a\0\ud98d\0\ud9e0\0\uda33\0\uda86\0\udad9\0\udb2c" + - "\0\udb7f\0\u29d3\0\udbd2\0\udc25\0\udc78\0\udccb\0\udd1e\0\udd71" + - "\0\uddc4\0\ude17\0\ude6a\0\udebd\0\udf10\0\udf63\0\udf63\0\udfb6" + - "\0\ue009\0\ue05c\0\ue0af\0\ue102\0\ue155\0\ue1a8\0\ue1fb\0\ue24e" + - "\0\ue2a1\0\ue2f4\0\ue347\0\ue39a\0\ue3ed\0\ue440\0\ue493\0\u88d2" + - "\0\ue4e6\0\ue539\0\ue58c\0\ue5df\0\ue632\0\ue685\0\ue6d8\0\ue72b" + - "\0\ue77e\0\ue7d1\0\ue824\0\ue877\0\ue8ca\0\ue91d\0\ue970\0\ue9c3" + - "\0\uea16\0\uea69\0\ueabc\0\ueb0f\0\ueb62\0\uebb5\0\uec08\0\uec5b" + - "\0\uecae\0\ued01\0\ued54\0\ueda7\0\uedfa\0\uee4d\0\ueea0\0\ueef3" + - "\0\uef46\0\uef99\0\uefec\0\uf03f\0\uf092\0\uf0e5\0\uf138\0\uf18b" + - "\0\uf1de\0\uf231\0\uf284\0\uf2d7\0\uf32a\0\uf37d\0\uf3d0\0\uf423" + - "\0\uf476\0\uf4c9\0\uf51c\0\uf56f\0\uf5c2\0\uf615\0\uf668\0\uf6bb" + - "\0\uf70e\0\uf761\0\uf7b4\0\uf807\0\uf85a\0\uf8ad\0\uf900\0\uf953" + - "\0\uf9a6\0\uf9f9\0\ufa4c\0\ufa9f\0\ufaf2\0\ufb45\0\ufb98\0\ufbeb" + - "\0\ufc3e\0\ufc91\0\ufce4\0\ufd37\0\ufd8a\0\ufddd\0\ufe30\0\ufe83" + - "\0\ufed6\0\uff29\0\uff7c\0\uffcf\1\42\1\165\1\310\1\u011b" + - "\1\u016e\1\u01c1\1\u0214\1\u0267\1\u02ba\1\u030d\1\u0360\1\u03b3" + - "\1\u0406\1\u0459\1\u04ac\1\u04ff\1\u0552\1\u05a5\1\u05f8\1\u064b" + - "\1\u069e\1\u06f1\1\u0744\1\u0797\1\u07ea\1\u083d\1\u0890\1\u08e3" + - "\1\u0936\1\u0989\1\u09dc\1\u0a2f\1\u0a82\1\u0ad5\1\u0b28\1\u0b7b" + - "\1\u0bce\1\u0c21\1\u0c74\1\u0cc7\1\u0d1a\1\u0d6d\1\u0dc0\1\u0e13" + - "\1\u0e66\1\u0eb9\1\u0f0c\1\u0f5f\1\u0fb2\1\u1005\1\u1058\1\u10ab" + - "\1\u10fe\1\u1151\1\u11a4\1\u11f7\1\u124a\1\u129d\1\u12f0\1\u1343" + - "\1\u1396\1\u13e9\1\u143c\1\u148f\1\u14e2\1\u1535\1\u1588\1\u15db" + - "\1\u162e\1\u1681\1\u16d4\1\u1727\1\u177a\1\u17cd\1\u1820\0\u2cbe" + - "\1\u1873\1\u18c6\1\u1919\1\u196c\1\u19bf\1\u1a12\1\u1a65\1\u1ab8" + - "\1\u1b0b\1\u1b5e\1\u1bb1\1\u1c04\1\u1c57\1\u1caa\1\u1cfd\1\u1d50" + - "\1\u1da3\1\u1df6\1\u1e49\1\u1e9c\1\u1eef\1\u1f42\1\u1f95\1\u1fe8" + - "\1\u203b\1\u208e\1\u20e1\1\u2134\1\u2187\1\u21da\1\u222d\1\u2280" + - "\1\u22d3\1\u2326\1\u2379\1\u23cc\1\u241f\1\u2472\1\u24c5\1\u2518" + - "\1\u256b\1\u25be\1\u2611\1\u2664\1\u26b7\1\u270a\1\u275d\1\u27b0" + - "\1\u2803\1\u2856\1\u28a9\1\u28fc\1\u294f\1\u29a2\1\u29f5\1\u2a48" + - "\1\u2a9b\1\u2aee\1\u2b41\1\u2b94\1\u2be7\1\u2c3a\1\u2c8d\1\u2ce0" + - "\1\u2d33\1\u2d86\1\u2dd9\1\u2e2c\1\u2e7f\1\u2ed2\1\u2f25\1\u2f78" + - "\1\u2fcb\1\u301e\1\u3071\1\u30c4\1\u3117\1\u316a\1\u31bd\1\u3210" + - "\1\u3263\1\u32b6\1\u3309\1\u335c\1\u33af\1\u3402\1\u3455\1\u34a8" + - "\1\u34fb\1\u354e\1\u35a1\1\u35f4\1\u3647\1\u369a\1\u36ed\1\u3740" + - "\1\u3793\1\u37e6\1\u3839\1\u388c\1\u38df\1\u3932\1\u3985\1\u39d8" + - "\1\u3a2b\1\u3a7e\1\u3ad1\1\u3b24\1\u3b77\1\u3bca\0\u067c\1\u3c1d" + - "\1\u3c70\1\u3cc3\1\u3d16\1\u3d69\1\u3dbc\1\u3e0f\1\u3e62\1\u3eb5" + - "\1\u3f08\1\u3f5b\1\u3fae\1\u4001\1\u4054\1\u40a7\1\u40fa\1\u414d" + - "\1\u41a0\1\u41f3\1\u4246\1\u4299\1\u42ec\1\u433f\1\u4392\1\u43e5" + - "\1\u4438\1\u448b\1\u44de\1\u4531\1\u4584\1\u45d7\1\u462a\1\u467d" + - "\1\u46d0\1\u4723\1\u4776\1\u47c9\1\u481c\1\u486f\1\u48c2\1\u4915" + - "\1\u4968\1\u49bb\1\u4a0e\1\u4a61\1\u4ab4\1\u4b07\1\u4b5a\1\u4bad" + - "\1\u4c00\1\u4c53\1\u4ca6\1\u4cf9\1\u4d4c\1\u4d9f\1\u4df2\1\u4e45" + - "\1\u4e98\1\u4eeb\1\u4f3e\1\u4f91\1\u4fe4\1\u5037\1\u508a\1\u50dd" + - "\1\u5130\1\u5183\1\u51d6\1\u5229\1\u527c\1\u52cf\1\u5322\1\u5375" + - "\1\u53c8\1\u541b\1\u546e\1\u54c1\1\u5514\1\u5567\1\u55ba\1\u560d" + - "\1\u5660\1\u56b3\1\u5706\1\u5759\1\u57ac\1\u57ff\1\u5852\1\u58a5" + - "\1\u58f8\1\u594b\1\u599e\1\u59f1\1\u5a44\1\u5a97\1\u5aea\1\u5b3d" + - "\1\u5b90\1\u5be3\1\u5c36\1\u5c89\1\u5cdc\1\u5d2f\1\u5d82\1\u5dd5" + - "\1\u5e28\1\u5e7b\1\u5ece\1\u5f21\1\u5f74\1\u5fc7\1\u601a\1\u606d" + - "\1\u60c0\1\u6113\1\u6166\1\u61b9\1\u620c\1\u625f\1\u62b2\1\u6305" + - "\1\u6358\1\u63ab\1\u63fe\1\u6451\1\u64a4\1\u64f7\1\u654a\1\u659d" + - "\1\u65f0\1\u6643\0\u067c\1\u6696\1\u66e9\1\u673c\1\u678f\1\u67e2" + - "\1\u6835\1\u6888\1\u68db\1\u692e\1\u6981\1\u69d4\1\u6a27\1\u6a7a" + - "\1\u6acd\1\u6b20\1\u6b73\1\u6bc6\1\u6c19\1\u6c6c\1\u6cbf\1\u6d12" + - "\1\u6d65\1\u6db8\1\u6e0b\1\u6e5e\1\u6eb1\1\u6f04\1\u6f57\1\u6faa" + - "\1\u6ffd\1\u7050\1\u70a3\1\u70f6\1\u7149\1\u719c\1\u71ef\1\u7242" + - "\1\u7295\1\u72e8\1\u733b\1\u738e\1\u73e1\1\u7434\1\u7487\1\u74da" + - "\1\u752d\1\u7580\1\u75d3\1\u7626\1\u7679\1\u76cc\1\u771f\1\u7772" + - "\1\u77c5\1\u7818\1\u786b\1\u78be\1\u7911\1\u7964\1\u79b7\1\u7a0a" + - "\1\u7a5d\1\u7ab0\1\u7b03\1\u7b56\1\u7ba9\1\u7bfc\1\u7c4f\1\u7ca2" + - "\1\u7cf5\1\u7d48\1\u7d9b\1\u7dee\1\u7e41\1\u7e94\1\u7ee7\1\u7f3a" + - "\1\u7f8d"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[1257]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\46\22\0\1\4\1\26\1\10"+ + "\1\47\1\50\1\25\1\5\1\11\1\116\1\114\1\51\1\56\1\65"+ + "\1\36\1\57\1\12\1\31\1\32\2\45\1\137\1\130\1\136\1\34"+ + "\2\30\1\70\1\6\1\3\1\7\1\21\1\67\1\74\1\33\1\52"+ + "\1\14\1\107\1\24\1\55\1\123\1\127\1\16\1\131\1\124\1\23"+ + "\1\121\1\120\1\117\1\17\1\125\1\15\1\13\1\20\1\122\1\126"+ + "\1\135\1\54\1\22\1\27\1\113\1\37\1\113\1\66\1\35\1\73"+ + "\1\61\1\53\1\77\1\101\1\60\1\44\1\103\1\100\1\102\1\134"+ + "\1\112\1\62\1\106\1\43\1\75\1\104\1\133\1\41\1\63\1\42"+ + "\1\40\1\111\1\110\1\105\1\76\1\132\1\115\1\72\1\64\1\71"+ + "\uff81\0"; - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\23\1\24\1\25\1\26\1\27\1\30\115\23\2\31" + - "\1\32\43\31\1\33\54\31\2\34\1\35\57\34\1\36" + - "\40\34\2\37\1\40\16\37\1\41\101\37\2\42\1\0" + - "\1\42\1\43\2\42\1\44\1\45\1\46\1\47\6\42" + - "\1\50\101\42\2\51\1\0\1\51\1\52\2\51\4\52" + - "\1\53\1\54\1\55\1\56\1\57\1\60\1\52\3\51" + - "\1\61\2\51\1\62\1\55\1\60\1\63\1\61\5\51" + - "\1\64\2\65\1\66\2\51\1\66\1\67\1\64\1\53" + - "\10\51\1\70\1\71\1\72\1\57\1\54\1\51\1\56" + - "\1\73\1\74\1\72\1\51\1\75\3\51\1\67\1\71" + - "\1\63\1\51\1\74\1\62\1\51\1\73\1\76\1\75" + - "\1\70\3\51\1\76\1\51\10\77\1\100\112\77\11\101" + - "\1\102\111\101\1\42\1\103\1\0\1\42\1\27\2\42" + - "\1\44\1\104\1\105\1\106\6\42\1\107\101\42\10\77" + - "\1\110\112\77\11\101\1\111\111\101\1\112\1\27\1\113" + - "\1\114\1\27\1\115\1\116\1\117\1\120\1\121\1\122" + - "\3\123\1\124\2\123\1\125\1\123\1\126\1\127\1\123" + - "\1\126\1\112\1\130\1\131\1\132\1\133\1\134\1\126" + - "\1\135\1\123\1\117\3\123\1\136\1\123\1\137\1\140" + - "\1\141\1\142\1\143\1\144\1\145\1\116\1\146\3\117" + - "\2\44\2\123\1\147\1\150\1\151\1\123\1\152\3\123" + - "\1\153\1\154\1\112\1\123\1\155\2\123\1\156\10\123" + - "\1\126\4\123\2\157\1\160\35\157\1\161\62\157\2\31" + - "\1\162\43\31\1\163\54\31\2\164\1\165\1\166\34\164" + - "\1\167\37\164\1\170\22\164\1\112\1\27\1\171\1\172" + - "\1\27\1\115\1\116\1\117\1\173\1\174\1\175\1\176" + - "\1\177\1\200\1\201\1\202\1\203\1\125\1\123\1\126" + - "\1\127\1\204\1\126\1\112\1\123\1\131\1\205\1\133" + - "\1\134\1\126\1\135\1\123\1\117\1\123\1\206\1\207" + - "\1\210\1\211\1\137\1\140\1\212\1\213\1\143\1\214" + - "\1\145\1\116\1\146\1\117\1\215\1\117\2\44\2\123" + - "\1\216\1\217\1\151\1\123\1\220\2\123\1\221\1\222" + - "\1\223\1\224\1\123\1\155\1\225\1\226\1\227\1\123" + - "\1\230\1\231\3\123\1\232\1\123\1\126\4\123\2\157" + - "\1\233\35\157\1\234\62\157\1\235\1\236\1\0\1\235" + - "\1\27\2\235\1\44\1\237\1\240\1\241\6\235\1\242" + - "\10\235\1\243\25\235\1\244\6\235\1\245\2\235\1\246" + - "\30\235\2\23\4\0\116\23\1\24\2\0\1\27\1\0" + - "\115\23\135\0\1\247\6\250\1\0\5\250\1\0\6\250" + - "\3\0\5\250\2\0\3\250\1\251\4\0\1\252\1\253" + - "\1\254\1\0\14\250\1\0\22\250\1\0\1\27\2\0" + - "\1\27\116\0\4\30\1\0\1\30\1\255\114\30\2\31" + - "\1\0\43\31\1\0\54\31\46\0\1\256\54\0\2\34" + - "\1\0\57\34\1\0\40\34\21\0\1\257\101\0\2\37" + - "\1\0\16\37\1\0\101\37\2\42\1\0\1\42\1\0" + - "\2\42\4\0\6\42\1\0\101\42\21\0\1\50\101\0" + - "\2\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\103\51\1\0\1\51\1\0\2\51\4\0\1\51\1\260" + - "\2\51\1\261\1\262\1\0\6\51\1\263\1\51\1\262" + - "\12\51\1\264\2\51\1\264\1\265\13\51\1\266\1\51" + - "\1\261\1\260\3\51\1\267\6\51\1\265\1\266\2\51" + - "\1\267\1\263\14\51\1\0\1\51\1\0\2\51\4\0" + - "\3\51\1\270\2\51\1\0\23\51\1\271\2\51\1\271" + - "\1\272\13\51\1\273\4\51\1\270\10\51\1\272\1\273" + - "\20\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\6\51\1\274\57\51\1\274\14\51\1\0\1\51\1\0" + - "\2\51\4\0\1\275\5\51\1\0\11\51\1\276\6\51" + - "\1\277\2\300\5\51\1\277\1\275\20\51\1\301\10\51" + - "\1\276\1\51\1\301\15\51\1\0\1\51\1\0\2\51" + - "\4\0\2\51\1\302\3\51\1\0\7\51\1\302\10\51" + - "\1\303\6\51\1\304\1\303\30\51\1\304\21\51\1\0" + - "\1\51\1\0\2\51\4\0\2\51\1\76\1\305\1\51" + - "\1\76\1\0\3\51\1\306\3\51\2\76\1\51\1\306" + - "\6\51\2\307\1\310\2\51\1\310\1\311\12\51\1\312" + - "\1\51\1\76\3\51\1\305\2\51\1\76\5\51\1\311" + - "\11\51\1\312\7\51\1\0\1\51\1\0\2\51\4\0" + - "\2\51\1\76\1\301\2\51\1\0\6\51\1\313\1\76" + - "\10\51\1\314\6\51\1\315\1\314\12\51\1\316\1\317" + - "\3\51\1\301\2\51\1\317\4\51\1\320\1\315\1\316" + - "\3\51\1\313\1\320\13\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\20\51\1\76\7\51\1\76\52\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\23\51" + - "\1\321\2\51\1\321\1\322\13\51\1\323\15\51\1\322" + - "\1\323\20\51\1\0\1\51\1\0\2\51\4\0\3\51" + - "\1\324\2\51\1\0\23\51\1\325\2\51\1\325\1\326" + - "\20\51\1\324\10\51\1\326\21\51\1\0\1\51\1\0" + - "\2\51\4\0\2\51\1\327\1\330\2\51\1\0\7\51" + - "\1\327\33\51\1\331\4\51\1\330\11\51\1\331\20\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\52\51" + - "\1\332\2\51\1\333\7\51\1\332\4\51\1\333\10\51" + - "\1\0\1\51\1\0\2\51\4\0\1\334\1\335\1\336" + - "\1\51\1\337\1\51\1\0\3\51\1\340\2\51\1\341" + - "\1\336\2\51\1\340\16\51\1\334\12\51\1\342\1\337" + - "\1\335\4\51\1\342\12\51\1\341\14\51\1\0\1\51" + - "\1\0\2\51\4\0\2\51\1\76\2\51\1\343\1\0" + - "\7\51\1\76\1\343\2\51\1\76\7\51\1\344\2\51" + - "\1\344\45\51\1\76\6\51\1\0\1\51\1\0\2\51" + - "\4\0\4\51\1\345\1\51\1\0\3\51\1\346\2\51" + - "\1\347\3\51\1\346\5\51\1\76\7\51\1\76\14\51" + - "\1\345\20\51\1\347\14\51\1\0\1\51\1\0\2\51" + - "\4\0\3\51\1\350\1\51\1\76\1\0\10\51\1\76" + - "\7\51\1\76\2\351\1\352\2\51\1\352\1\353\1\76" + - "\13\51\1\76\3\51\1\350\2\51\1\76\5\51\1\353" + - "\21\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\3\51\1\354\6\51\1\354\10\51\1\355\2\51\1\355" + - "\54\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\6\51\1\356\14\51\1\357\2\51\1\357\1\360\31\51" + - "\1\360\4\51\1\356\14\51\1\0\1\51\1\0\2\51" + - "\4\0\3\51\1\361\2\51\1\0\27\51\1\362\20\51" + - "\1\361\10\51\1\362\17\51\10\77\1\0\112\77\11\101" + - "\1\0\111\101\1\42\1\103\1\0\1\42\1\27\2\42" + - "\4\0\6\42\1\0\101\42\21\0\1\363\101\0\1\112" + - "\12\0\6\112\1\0\14\112\1\0\1\112\1\0\5\112" + - "\2\0\4\112\10\0\37\112\3\0\1\364\3\0\1\44" + - "\2\0\1\365\115\0\1\44\1\0\1\44\122\0\1\44" + - "\113\0\2\120\1\0\5\120\1\366\16\120\1\367\73\120" + - "\2\370\1\371\6\370\1\372\15\370\1\373\73\370\7\0" + - "\1\44\2\0\1\374\25\0\1\375\62\0\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\377\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\7\0\1\44\11\0\1\u0100\101\0\1\u0101" + - "\12\0\6\u0101\1\0\1\u0101\2\126\1\u0101\1\126\6\u0101" + - "\1\126\1\0\1\u0101\1\0\1\u0101\1\u0102\2\u0103\1\u0104" + - "\1\0\1\u0105\1\u0104\1\u0101\1\u0102\1\u0101\10\0\2\u0101" + - "\1\u0103\6\u0101\1\u0103\20\u0101\1\126\5\u0101\12\0\6\u0101" + - "\1\0\1\u0101\1\u0106\1\u0107\1\u0101\1\u0107\6\u0101\1\u0107" + - "\1\0\1\u0101\1\0\1\u0108\1\u0102\2\u0103\1\u0104\1\0" + - "\1\u0105\1\u0104\1\u0101\1\u0102\1\u0101\10\0\2\u0101\1\u0103" + - "\2\u0101\1\u0108\3\u0101\1\u0103\20\u0101\1\u0107\4\u0101\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\u0109\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u010a\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u010b\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\u010c\13\123\1\112\1\u010d" + - "\21\123\1\112\12\0\6\123\1\0\5\123\1\376\1\u010e" + - "\5\123\1\0\1\123\1\0\5\123\2\0\1\u010f\1\u0110" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u0111\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0112\12\123" + - "\1\112\1\u0113\21\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u0114\5\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u0115\1\u0116\1\123\10\0\1\123\1\u0117\4\123" + - "\1\u0118\5\123\1\112\22\123\7\0\1\44\36\0\1\44" + - "\77\0\2\u0105\1\0\1\u0105\6\0\1\u0105\60\0\1\u0105" + - "\4\0\1\112\12\0\6\123\1\0\5\123\1\376\3\123" + - "\1\u0119\2\123\1\0\1\123\1\0\5\123\2\0\2\123" + - "\1\u011a\1\u011b\10\0\5\123\1\u011c\5\123\1\u011d\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\4\123" + - "\1\u011e\1\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\123\1\u011f\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\u0120\1\123\1\u0121" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\u0122\11\123\1\u0123\1\123\1\112\1\u0124\21\123\7\0" + - "\1\44\46\0\1\44\44\0\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u0125\3\123\10\0\1\123\1\u0126\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\u0127\1\u0128" + - "\4\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u0129" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u012a\1\u012b\1\123\10\0\1\u012c\1\u012d" + - "\12\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u012e\2\123\1\0\1\123\1\0\3\123" + - "\1\u012f\1\123\2\0\3\123\1\u0130\10\0\10\123\1\u0131" + - "\3\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\u0132\5\123\1\u0133\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0117\2\123\10\0\1\123" + - "\1\u0134\12\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\123\1\u0135\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0136\2\123\10\0\14\123" + - "\1\112\22\123\2\157\1\0\35\157\1\0\62\157\12\0" + - "\1\u0137\156\0\1\u0138\54\0\2\164\2\0\34\164\1\0" + - "\37\164\1\0\22\164\12\0\1\u0139\6\u013a\1\u013b\1\u013a" + - "\2\0\1\u013a\2\0\5\u013a\4\0\5\u013a\2\0\4\u013a" + - "\10\0\14\u013a\1\0\15\u013a\1\0\4\u013a\12\0\1\u013c" + - "\141\0\1\u013d\1\u013e\15\0\1\u013f\1\u0140\1\u0141\1\u0142" + - "\12\0\1\u0143\1\u0144\7\0\1\u0145\26\0\1\364\3\0" + - "\1\44\113\0\2\173\1\u0146\5\173\1\366\16\173\1\u0147" + - "\73\173\2\u0148\1\u0149\6\u0148\1\372\15\u0148\1\u014a\73\u0148" + - "\7\0\1\44\2\0\1\u014b\25\0\1\u014c\62\0\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u014d\3\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u014e\3\123\10\0" + - "\1\u014f\13\123\1\112\1\u0150\21\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u0151\1\123\10\0\1\u0152\1\u0153\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\u0154\5\123\1\0\1\123\1\0\5\123\2\0\1\u0155" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u0156\1\u0157\2\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u0158\1\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u0159\4\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u015a\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\u015b\13\123" + - "\1\112\1\u015c\21\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u015d\12\123\1\112\1\u015e\21\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u010b\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\1\u010c" + - "\13\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u015f\4\123\1\u0160\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u0161\1\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u0115\1\u0116\1\123\10\0\1\123\1\u0117\4\123\1\u0118" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u0162\1\123\1\u0163\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\5\123\1\u0164\6\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0119\2\123\1\0\1\123\1\0\5\123\2\0" + - "\2\123\1\u011a\1\123\10\0\5\123\1\u0165\6\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\4\123" + - "\1\u011e\1\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u0166\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\u0120\1\123\1\u0167\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\u0122\11\123" + - "\1\u0123\1\123\1\112\1\u0124\21\123\7\0\1\44\11\0" + - "\1\u0168\101\0\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u0169\3\123" + - "\10\0\1\123\1\u0126\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u0127\1\u0128\4\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u016a\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u016b\2\123\1\0\1\123\1\0\3\123" + - "\1\u012f\1\123\2\0\4\123\10\0\10\123\1\u0131\3\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u016c\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\u0132\13\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0134\12\123" + - "\1\112\22\123\1\112\12\0\6\u016d\1\0\1\u016d\2\112" + - "\1\u016d\2\112\5\u016d\1\112\1\0\1\u016d\1\0\5\u016d" + - "\2\0\4\u016d\10\0\14\u016d\1\112\15\u016d\1\112\4\u016d" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u016e" + - "\2\123\1\u016f\1\123\1\0\1\123\1\0\5\123\2\0" + - "\3\123\1\u0170\10\0\3\123\1\u0171\10\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\u0172\3\123" + - "\1\u0173\1\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\u0174\5\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u0175\3\123\10\0\1\123\1\u0176\12\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u0177\2\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u0178\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u0179\3\123\10\0\1\123\1\u017a" + - "\4\123\1\u017b\5\123\1\112\22\123\12\0\1\u017c\110\0" + - "\2\235\1\0\1\235\1\0\2\235\4\0\6\235\1\0" + - "\102\235\1\236\1\0\1\235\1\27\2\235\4\0\6\235" + - "\1\0\101\235\10\237\1\366\112\237\11\240\1\u017d\111\240" + - "\2\235\1\0\1\235\1\0\2\235\4\0\6\235\1\0" + - "\27\235\1\u017e\53\235\1\0\1\235\1\0\2\235\4\0" + - "\6\235\1\u017f\103\235\1\0\1\235\1\0\2\235\4\0" + - "\6\235\1\0\27\235\1\u0180\53\235\1\0\1\235\1\0" + - "\2\235\4\0\6\235\1\0\11\235\1\u0181\67\235\13\0" + - "\6\u0182\1\0\5\u0182\1\0\6\u0182\3\0\5\u0182\2\0" + - "\4\u0182\10\0\14\u0182\1\0\22\u0182\13\0\6\250\1\0" + - "\5\250\1\0\6\250\3\0\5\250\2\0\4\250\10\0" + - "\14\250\1\0\22\250\13\0\6\250\1\0\5\250\1\0" + - "\6\250\3\0\5\250\2\0\4\250\10\0\4\250\1\u0183" + - "\7\250\1\0\22\250\7\0\1\u0184\36\0\1\u0185\12\0" + - "\1\u0184\16\0\1\u0186\70\0\1\u0187\75\0\1\u0188\101\0" + - "\2\51\1\0\1\51\1\0\2\51\4\0\2\51\1\u0189" + - "\3\51\1\0\7\51\1\u0189\73\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\27\51\1\u018a\31\51\1\u018a" + - "\21\51\1\0\1\51\1\0\2\51\4\0\2\51\1\u018b" + - "\3\51\1\0\7\51\1\u018b\47\51\1\274\4\51\1\274" + - "\16\51\1\0\1\51\1\0\2\51\4\0\4\51\1\76" + - "\1\51\1\0\3\51\1\76\6\51\1\76\32\51\1\76" + - "\35\51\1\0\1\51\1\0\2\51\4\0\1\51\1\u018c" + - "\1\u018d\3\51\1\0\7\51\1\u018d\10\51\1\u018e\7\51" + - "\1\u018e\15\51\1\u018c\34\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\52\51\1\u018f\12\51\1\u018f\15\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\6\51" + - "\1\u0190\57\51\1\u0190\14\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\27\51\1\u0191\31\51\1\u0191\21\51" + - "\1\0\1\51\1\0\2\51\4\0\5\51\1\u0192\1\0" + - "\10\51\1\u0192\72\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\11\51\1\u0193\51\51\1\u0193\17\51\1\0" + - "\1\51\1\0\2\51\4\0\4\51\1\u018c\1\51\1\0" + - "\11\51\1\u0194\33\51\1\u018c\15\51\1\u0194\17\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\20\51\1\u0195" + - "\7\51\1\u0195\13\51\1\u0192\5\51\1\u0196\1\u0192\11\51" + - "\1\u0196\15\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\20\51\1\u0192\7\51\1\u0192\52\51\1\0\1\51" + - "\1\0\2\51\4\0\3\51\1\u0197\2\51\1\0\50\51" + - "\1\u0197\32\51\1\0\1\51\1\0\2\51\4\0\1\76" + - "\3\51\1\u0198\1\51\1\0\31\51\1\76\13\51\1\u0198" + - "\35\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\27\51\1\u0199\31\51\1\u0199\21\51\1\0\1\51\1\0" + - "\2\51\4\0\2\51\1\u019a\3\51\1\0\7\51\1\u019a" + - "\73\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\60\51\1\76\6\51\1\76\13\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\23\51\1\76\2\51\1\76" + - "\14\51\1\u019b\16\51\1\u019b\20\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\27\51\1\u019c\31\51\1\u019c" + - "\21\51\1\0\1\51\1\0\2\51\4\0\2\51\1\u019d" + - "\3\51\1\0\7\51\1\u019d\73\51\1\0\1\51\1\0" + - "\2\51\4\0\5\51\1\274\1\0\10\51\1\274\41\51" + - "\1\u0192\12\51\1\u0192\15\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\43\51\1\316\16\51\1\316\20\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\43\51" + - "\1\u019e\16\51\1\u019e\20\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\17\51\1\u019f\27\51\1\u019f\33\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\3\51" + - "\1\274\6\51\1\274\70\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\23\51\1\u01a0\2\51\1\u01a0\54\51" + - "\1\0\1\51\1\0\2\51\4\0\5\51\1\u01a1\1\0" + - "\10\51\1\u01a1\72\51\1\0\1\51\1\0\2\51\4\0" + - "\3\51\1\u01a2\2\51\1\0\43\51\1\u01a3\4\51\1\u01a2" + - "\11\51\1\u01a3\20\51\1\0\1\51\1\0\2\51\4\0" + - "\1\u01a4\5\51\1\0\31\51\1\u01a4\51\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\44\51\1\u01a5\6\51" + - "\1\u01a5\27\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\43\51\1\76\16\51\1\76\20\51\1\0\1\51" + - "\1\0\2\51\4\0\1\u01a6\5\51\1\0\31\51\1\u01a6" + - "\51\51\1\0\1\51\1\0\2\51\4\0\1\u01a7\5\51" + - "\1\0\31\51\1\u01a7\51\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\55\51\1\76\14\51\1\76\10\51" + - "\1\0\1\51\1\0\2\51\4\0\1\u01a8\5\51\1\0" + - "\3\51\1\362\6\51\1\362\5\51\1\277\2\u01a9\1\u01aa" + - "\2\51\1\u01aa\1\51\1\277\1\u01a8\51\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\11\51\1\u01ab\51\51" + - "\1\u01ab\17\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\60\51\1\u01ac\6\51\1\u01ac\13\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\3\51\1\u01ad\6\51" + - "\1\u01ad\44\51\1\u01ae\4\51\1\u01ae\16\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\27\51\1\u01af\31\51" + - "\1\u01af\21\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\23\51\1\u01b0\2\51\1\u01b0\31\51\1\u01b1\6\51" + - "\1\u01b1\13\51\1\0\1\51\1\0\2\51\4\0\2\51" + - "\1\u01b2\3\51\1\0\7\51\1\u01b2\1\51\1\u01a7\31\51" + - "\1\u0193\16\51\1\u0193\1\u01a7\17\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\3\51\1\u01b3\6\51\1\u01b3" + - "\70\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\23\51\1\u01b4\2\51\1\u01b4\54\51\1\0\1\51\1\0" + - "\2\51\4\0\3\51\1\u01b5\2\51\1\0\50\51\1\u01b5" + - "\32\51\1\0\1\51\1\0\2\51\4\0\2\51\1\u01b6" + - "\3\51\1\0\7\51\1\u01b6\73\51\1\0\1\51\1\0" + - "\2\51\4\0\5\51\1\u01b7\1\0\10\51\1\u01b7\12\51" + - "\1\u01b8\2\51\1\u01b8\54\51\1\0\1\51\1\0\2\51" + - "\4\0\4\51\1\u01b9\1\51\1\0\45\51\1\u01b9\35\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\3\51" + - "\1\362\6\51\1\362\70\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\44\51\1\u01ba\6\51\1\u01ba\27\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\44\51" + - "\1\u01bb\6\51\1\u01bb\27\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\52\51\1\u01bc\12\51\1\u01bc\15\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\27\51" + - "\1\u01bd\31\51\1\u01bd\21\51\1\0\1\51\1\0\2\51" + - "\4\0\5\51\1\u01be\1\0\10\51\1\u01be\72\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\75\51\1\u018e" + - "\2\51\1\u018e\2\51\1\0\1\51\1\0\2\51\4\0" + - "\5\51\1\u01bf\1\0\10\51\1\u01bf\72\51\1\0\1\51" + - "\1\0\2\51\4\0\2\51\1\76\3\51\1\0\7\51" + - "\1\76\17\51\1\u01c0\25\51\1\76\3\51\1\u01c0\10\51" + - "\1\76\10\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\11\51\1\76\51\51\1\76\17\51\1\0\1\51" + - "\1\0\2\51\4\0\5\51\1\u01c1\1\0\10\51\1\u01c1" + - "\7\51\1\76\7\51\1\76\52\51\1\0\1\51\1\0" + - "\2\51\4\0\5\51\1\u01c2\1\0\10\51\1\u01c2\72\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\44\51" + - "\1\76\6\51\1\76\27\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\57\51\1\u01c3\4\51\1\u01c3\16\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\20\51" + - "\1\u01c4\7\51\1\u01c4\52\51\1\0\1\51\1\0\2\51" + - "\4\0\5\51\1\u01c5\1\0\10\51\1\u01c5\1\u01c6\51\51" + - "\1\u01c6\17\51\1\0\1\51\1\0\2\51\4\0\2\51" + - "\1\u01c7\1\51\1\76\1\51\1\0\7\51\1\u01c7\35\51" + - "\1\76\35\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\44\51\1\u01c8\6\51\1\u01c8\27\51\1\0\1\51" + - "\1\0\2\51\4\0\2\51\1\76\3\51\1\0\7\51" + - "\1\76\71\51\13\0\1\u01c9\37\0\1\u01c9\47\0\2\u01ca" + - "\1\0\5\u01ca\2\120\12\u01ca\1\120\1\u01ca\1\120\1\u01cb" + - "\1\u01cc\5\120\6\u01ca\1\120\51\u01ca\1\120\4\u01ca\2\u01cd" + - "\1\0\6\u01cd\1\u017d\111\u01cd\11\0\1\u017d\111\0\2\u01cd" + - "\1\0\5\u01cd\1\370\1\371\12\u01cd\1\u01ce\1\u01cd\1\u01cf" + - "\1\370\1\u01d0\4\370\1\u01ce\6\u01cd\1\370\51\u01cd\1\u01cf" + - "\4\u01cd\2\374\1\0\120\374\40\0\1\u01d1\62\0\1\112" + - "\12\0\6\112\1\0\6\112\1\u01d2\5\112\1\0\1\112" + - "\1\0\5\112\2\0\4\112\10\0\40\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\3\123" + - "\1\u01d3\1\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\7\0\1\44\11\0\1\117\101\0\1\u0101\12\0\6\u0101" + - "\1\0\14\u0101\1\0\1\u0101\1\0\5\u0101\2\0\4\u0101" + - "\10\0\40\u0101\12\0\6\u0101\1\0\1\u0101\2\u01d4\1\u0101" + - "\1\u01d4\6\u0101\1\u01d4\1\0\1\u0101\1\0\5\u0101\1\u01d5" + - "\1\0\4\u0101\2\0\1\u01d5\5\0\32\u0101\1\u01d4\5\u0101" + - "\12\0\6\u0101\1\0\1\u0101\2\u0105\1\u0101\1\u0105\6\u0101" + - "\1\u0105\1\0\1\u0101\1\0\2\u0101\2\u0103\1\u0104\2\0" + - "\1\u0104\3\u0101\10\0\2\u0101\1\u0103\6\u0101\1\u0103\20\u0101" + - "\1\u0105\5\u0101\12\0\6\u0101\1\0\1\u0101\2\u0106\1\u0101" + - "\1\u0106\6\u0101\1\u0106\1\0\1\u0101\1\0\2\u0101\2\u0103" + - "\1\u0104\1\0\1\u0105\1\u0104\3\u0101\10\0\2\u0101\1\u0103" + - "\6\u0101\1\u0103\20\u0101\1\u0106\5\u0101\12\0\6\u0101\1\0" + - "\1\u0101\1\u0106\1\u0107\1\u0101\1\u0107\6\u0101\1\u0107\1\0" + - "\1\u0101\1\0\1\u0101\1\u01d6\2\u0103\1\u0104\1\0\1\u0105" + - "\1\u0104\1\u0101\1\u01d6\1\u0101\10\0\2\u0101\1\u0103\6\u0101" + - "\1\u0103\20\u0101\1\u0107\5\u0101\12\0\1\u0101\1\u01d7\4\u0101" + - "\1\0\1\u0101\4\u01d7\5\u0101\2\u01d7\1\0\1\u0101\1\0" + - "\2\u0101\3\u01d7\2\0\2\u01d7\2\u0101\10\0\2\u0101\1\u01d7" + - "\1\u0101\1\u01d7\4\u0101\1\u01d7\5\u0101\1\u01d7\12\u0101\1\u01d7" + - "\4\u0101\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u01d8\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u01d9\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u01da\5\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u01db\2\123\10\0\14\123" + - "\1\112\1\u012f\21\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u01dc\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u01dd\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\3\123\1\u01de" + - "\10\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\2\123" + - "\1\u01df\1\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\12\123\1\u012f\1\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u01e0\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u01e1\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\123\1\u01e2\12\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u01e3\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u01e4\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u01e5\1\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u01e6\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u012f\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\3\123\1\u01e7" + - "\2\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u01e8\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u01e9\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\4\123\1\u01ea\7\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u01eb\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\3\123\1\u01ec\10\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u01ed\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\3\123\1\u01ee" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u01ef\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\3\123\1\u01f0\10\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u01f1" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u01f2\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u01f3" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u01f4\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\4\123\1\u01f5\1\123\1\0" + - "\1\123\1\0\3\123\1\u01f6\1\123\2\0\2\123\1\u01f7" + - "\1\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\u01f8\5\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\4\123\1\u01f9\1\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u01fa\4\123\1\u01fb\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u01fc\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\4\123" + - "\1\u01fd\7\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\2\123\1\u01fe\3\123\1\0\1\123\1\0" + - "\5\123\2\0\3\123\1\u01e9\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u01ff\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u0200\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u0201\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u0202\3\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u0203\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\2\123" + - "\1\u0204\2\123\2\0\4\123\10\0\14\123\1\112\4\123" + - "\1\u0205\15\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\3\123\1\u0206\10\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u0207\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u0208" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\2\123" + - "\1\u0209\1\123\10\0\6\123\1\u020a\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u020b" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\4\123\1\u012f\15\123\60\0\1\u020c" + - "\55\0\6\u013a\1\u013b\1\u013a\2\0\1\u013a\2\0\5\u013a" + - "\4\0\5\u013a\2\0\4\u013a\10\0\14\u013a\1\0\15\u013a" + - "\1\0\25\u013a\1\u013b\101\u013a\50\0\1\u020d\136\0\1\u020e" + - "\127\0\1\u020f\61\0\1\u0210\164\0\1\u0211\100\0\1\u0212" + - "\21\0\1\u0213\100\0\1\u0214\123\0\1\u0215\121\0\1\u0216" + - "\52\0\10\u0146\1\u0217\16\u0146\1\u0218\75\u0146\1\u0219\5\u0146" + - "\1\u021a\1\173\12\u0146\1\173\1\u0146\2\173\1\u021b\5\173" + - "\6\u0146\1\173\51\u0146\1\173\4\u0146\2\u021c\1\u021d\6\u021c" + - "\1\u017d\111\u021c\11\u021d\1\u017d\111\u021d\2\u021c\1\u021d\5\u021c" + - "\1\u0148\1\371\12\u021c\1\u021e\1\u021c\1\u021f\1\u0148\1\u0220" + - "\4\u0148\1\u021e\6\u021c\1\u0148\51\u021c\1\u021f\4\u021c\2\u014b" + - "\1\0\120\u014b\40\0\1\u0221\62\0\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u0222\4\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0223\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\4\123\1\u0224\7\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u0225\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\3\123\1\u0226\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u0227" + - "\2\123\10\0\1\123\1\u0228\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0229\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\10\123\1\u022a\3\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u022b\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u022c\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u022d" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u022e\3\123\1\0\1\123" + - "\1\0\5\123\2\0\3\123\1\u022f\10\0\1\u0230\1\123" + - "\1\u0231\1\123\1\u0232\7\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\2\123\1\u0233\1\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\1\123" + - "\1\u0234\12\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u0235\7\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u0236\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\3\123\1\u0237\10\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u0238\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u0239" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u023a\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u023b\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\1\123" + - "\1\u023c\12\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u023d\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\u023e\5\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\4\123" + - "\1\u023f\7\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\2\123\1\u01eb\3\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\3\123\1\u0240\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u0241\4\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u01f1\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\3\123\1\u01f6\1\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\4\123" + - "\1\u01fd\7\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\u0242\5\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\u016d\1\0\5\u016d\1\u0243\6\u016d\1\0\1\u016d\1\0" + - "\5\u016d\2\0\4\u016d\10\0\14\u016d\1\112\22\u016d\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u0244\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u0245\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\3\123\1\u0246\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\3\123\1\u0247\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\3\123\1\u0248" + - "\10\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u0249\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\21\123\1\u024a" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u024b\1\123\10\0" + - "\10\123\1\u024c\3\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\1\123\1\u024d\20\123" + - "\1\112\12\0\1\u024e\1\u024f\4\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u0250\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\3\123\1\u0251\10\0\7\123\1\u0252\4\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u0253\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u0254\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u0255" + - "\4\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\2\235\1\0\1\235\1\0\2\235" + - "\4\0\6\235\1\0\60\235\1\u0256\22\235\1\0\1\235" + - "\1\0\2\235\4\0\6\235\1\0\60\235\1\u0257\22\235" + - "\1\0\1\235\1\0\2\235\4\0\6\235\1\0\46\235" + - "\1\u0258\32\235\13\0\6\250\1\0\5\250\1\0\1\250" + - "\1\u0259\4\250\3\0\5\250\2\0\4\250\10\0\14\250" + - "\1\0\22\250\46\0\1\u025a\122\0\1\u025b\54\0\2\51" + - "\1\0\1\51\1\0\2\51\4\0\3\51\1\u025c\2\51" + - "\1\0\50\51\1\u025c\32\51\1\0\1\51\1\0\2\51" + - "\4\0\1\51\1\u01ae\4\51\1\0\11\51\1\76\34\51" + - "\1\u01ae\14\51\1\76\17\51\1\0\1\51\1\0\2\51" + - "\4\0\3\51\1\u025d\2\51\1\0\43\51\1\u025e\4\51" + - "\1\u025d\11\51\1\u025e\20\51\1\0\1\51\1\0\2\51" + - "\4\0\5\51\1\u025f\1\0\10\51\1\u025f\72\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\55\51\1\u01ae" + - "\14\51\1\u01ae\10\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\23\51\1\u0260\2\51\1\u0260\54\51\1\0" + - "\1\51\1\0\2\51\4\0\4\51\1\76\1\51\1\0" + - "\45\51\1\76\35\51\1\0\1\51\1\0\2\51\4\0" + - "\2\51\1\u0261\3\51\1\0\7\51\1\u0261\73\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\20\51\1\u01bc" + - "\7\51\1\u01bc\52\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\23\51\1\76\2\51\1\76\54\51\1\0" + - "\1\51\1\0\2\51\4\0\5\51\1\u01ae\1\0\10\51" + - "\1\u01ae\72\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\55\51\1\u0262\14\51\1\u0262\10\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\60\51\1\u0263\6\51" + - "\1\u0263\13\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\52\51\1\u0264\12\51\1\u0264\15\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\11\51\1\u0265\51\51" + - "\1\u0265\17\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\6\51\1\u01a7\57\51\1\u01a7\14\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\57\51\1\u01ae\4\51" + - "\1\u01ae\16\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\27\51\1\u0266\31\51\1\u0266\21\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\60\51\1\u01bb\6\51" + - "\1\u01bb\13\51\1\0\1\51\1\0\2\51\4\0\3\51" + - "\1\u0267\2\51\1\0\50\51\1\u0267\32\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\27\51\1\u01b2\31\51" + - "\1\u01b2\21\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\43\51\1\u01a7\16\51\1\u01a7\20\51\1\0\1\51" + - "\1\0\2\51\4\0\5\51\1\u0268\1\0\10\51\1\u0268" + - "\72\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\27\51\1\354\31\51\1\354\21\51\1\0\1\51\1\0" + - "\2\51\4\0\5\51\1\u0269\1\0\10\51\1\u0269\72\51" + - "\1\0\1\51\1\0\2\51\4\0\1\51\1\u026a\4\51" + - "\1\0\46\51\1\u026a\34\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\23\51\1\u026b\2\51\1\u026b\54\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\57\51" + - "\1\76\4\51\1\76\16\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\43\51\1\u026c\16\51\1\u026c\20\51" + - "\1\0\1\51\1\0\2\51\4\0\5\51\1\76\1\0" + - "\10\51\1\76\72\51\1\0\1\51\1\0\2\51\4\0" + - "\1\51\1\260\4\51\1\0\46\51\1\260\34\51\1\0" + - "\1\51\1\0\2\51\4\0\2\51\1\u026d\3\51\1\0" + - "\7\51\1\u026d\73\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\52\51\1\u026e\12\51\1\u026e\15\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\51\51\1\76" + - "\16\51\1\76\12\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\23\51\1\u026f\2\51\1\u026f\54\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\23\51\1\u01bc" + - "\2\51\1\u01bc\54\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\23\51\1\362\2\51\1\362\54\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\52\51\1\u0270" + - "\12\51\1\u0270\15\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\20\51\1\u0271\7\51\1\u0271\52\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\6\51\1\u0272" + - "\57\51\1\u0272\14\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\52\51\1\76\12\51\1\76\15\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\23\51\1\354" + - "\2\51\1\354\54\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\11\51\1\u0273\51\51\1\u0273\17\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\44\51\1\u0192" + - "\6\51\1\u0192\27\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\43\51\1\u0274\16\51\1\u0274\20\51\1\0" + - "\1\51\1\0\2\51\4\0\3\51\1\u0275\2\51\1\0" + - "\50\51\1\u0275\32\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\27\51\1\76\31\51\1\76\21\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\20\51\1\u0276" + - "\7\51\1\u0276\52\51\1\0\1\51\1\0\2\51\4\0" + - "\3\51\1\317\2\51\1\0\50\51\1\317\32\51\1\0" + - "\1\51\1\0\2\51\4\0\2\51\1\u0277\3\51\1\0" + - "\7\51\1\u0277\73\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\44\51\1\u0278\6\51\1\u0278\27\51\1\0" + - "\1\51\1\0\2\51\4\0\3\51\1\u0269\2\51\1\0" + - "\50\51\1\u0269\7\51\1\u0263\6\51\1\u0263\13\51\1\0" + - "\1\51\1\0\2\51\4\0\4\51\1\u0198\1\51\1\0" + - "\45\51\1\u0198\35\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\20\51\1\u0279\7\51\1\u0279\52\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\27\51\1\u027a" + - "\31\51\1\u027a\21\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\27\51\1\u027b\31\51\1\u027b\21\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\60\51\1\u027c" + - "\6\51\1\u027c\13\51\1\0\1\51\1\0\2\51\4\0" + - "\5\51\1\u027d\1\0\10\51\1\u027d\72\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\23\51\1\362\2\51" + - "\1\362\1\76\31\51\1\76\21\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\6\51\1\76\57\51\1\76" + - "\14\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\51\51\1\76\16\51\1\76\1\u027e\5\51\1\u027e\3\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\23\51" + - "\1\317\2\51\1\317\52\51\14\0\1\u027f\53\0\1\u027f" + - "\32\0\2\u01ca\1\0\5\u01ca\1\u0217\16\u01ca\1\u0280\73\u01ca" + - "\2\120\1\0\5\120\1\u0281\16\120\1\367\73\120\2\u01ca" + - "\1\0\5\u01ca\1\u0217\3\u01ca\1\u0282\6\u01ca\4\u0282\1\u0280" + - "\4\u01ca\2\u0282\5\u01ca\3\u0282\2\u01ca\2\u0282\14\u01ca\1\u0282" + - "\1\u01ca\1\u0282\4\u01ca\1\u0282\5\u01ca\1\u0282\12\u01ca\1\u0282" + - "\4\u01ca\2\u01cd\1\0\6\u01cd\1\372\113\u01cd\1\0\6\u01cd" + - "\1\u017d\12\u01cd\1\u01cf\1\u01cd\1\u01cf\6\u01cd\1\u01cf\60\u01cd" + - "\1\u01cf\6\u01cd\1\0\6\u01cd\1\u017d\12\u01cd\1\370\1\u01cd" + - "\1\370\6\u01cd\1\370\60\u01cd\1\370\6\u01cd\1\0\6\u01cd" + - "\1\372\2\u01cd\1\u0283\6\u01cd\4\u0283\5\u01cd\2\u0283\5\u01cd" + - "\3\u0283\2\u01cd\2\u0283\14\u01cd\1\u0283\1\u01cd\1\u0283\4\u01cd" + - "\1\u0283\5\u01cd\1\u0283\12\u01cd\1\u0283\4\u01cd\12\0\1\u0284" + - "\110\0\1\112\12\0\1\112\1\u0285\4\112\1\0\1\112" + - "\4\u0285\5\112\2\u0285\1\0\1\112\1\0\2\112\3\u0285" + - "\2\0\2\u0285\2\112\10\0\2\112\1\u0285\1\112\1\u0285" + - "\4\112\1\u0285\5\112\1\u0285\12\112\1\u0285\5\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u0286\5\123\1\112" + - "\22\123\1\u0101\12\0\6\u0101\1\0\1\u0101\2\u01d4\1\u0101" + - "\1\u01d4\6\u0101\1\u01d4\1\0\1\u0101\1\0\2\u0101\2\u0103" + - "\1\u0101\2\0\4\u0101\10\0\2\u0101\1\u0103\6\u0101\1\u0103" + - "\20\u0101\1\u01d4\4\u0101\23\0\2\u01d4\1\0\1\u01d4\6\0" + - "\1\u01d4\60\0\1\u01d4\4\0\1\u0101\12\0\1\u0101\1\u01d7" + - "\4\u0101\1\0\1\u0101\4\u01d7\5\u0101\2\u01d7\1\0\1\u0101" + - "\1\0\1\u0101\1\u01d6\3\u01d7\2\0\2\u01d7\1\u01d6\1\u0101" + - "\10\0\2\u0101\1\u01d7\1\u0101\1\u01d7\4\u0101\1\u01d7\5\u0101" + - "\1\u01d7\12\u0101\1\u01d7\4\u0101\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\3\123\1\u011b\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u0287\5\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u0288\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0289\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u028a\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\3\123\1\u012f\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u028b\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\2\123\1\u012f\1\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\6\123\1\u028c\5\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u028d" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u028e\1\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u028f\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\4\123\1\u0290\7\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u01da\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0291\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u0292" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\10\123\1\u012f\3\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u012f\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u0293" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u0294\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0295\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\2\123\1\u0296" + - "\1\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u0297\3\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\1\123\1\u028f\20\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u0117" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u0298\3\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u0291" + - "\4\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u01fe\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\4\123\1\u0299\7\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\u029a" + - "\5\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u029b\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u029c\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\4\123\1\u029d" + - "\1\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\2\123" + - "\1\u0298\1\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u029e\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\13\123" + - "\1\u029f\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u02a0\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\7\123\1\u02a1\4\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\4\123\1\u0208" + - "\7\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u01dd\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u028f\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u02a2" + - "\3\123\1\0\1\123\1\0\5\123\2\0\3\123\1\u02a3" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u02a4\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u02a5\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u02a6\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u02a7\2\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u02a8\1\123\10\0\1\123" + - "\1\u0295\12\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\2\123\1\u01e9\1\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\u012f\13\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u02a9\2\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\2\123\1\u012f\11\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u012f\12\123" + - "\1\112\22\123\21\0\1\u02aa\133\0\1\u02ab\121\0\1\u02ac" + - "\161\0\1\u02ad\64\0\1\u02ae\123\0\1\u02af\120\0\1\u02b0" + - "\16\0\1\u02b1\105\0\1\u02b2\156\0\1\u02b3\64\0\1\u02b4" + - "\122\0\1\u02b5\71\0\2\u0146\1\u0219\5\u0146\1\u02b6\112\u0146" + - "\10\u0219\1\u0217\112\u0219\2\u021a\1\u02b6\5\u021a\1\366\16\u021a" + - "\1\u02b7\73\u021a\10\u0146\1\u0217\3\u0146\1\u02b8\6\u0146\4\u02b8" + - "\1\u0218\4\u0146\2\u02b8\5\u0146\3\u02b8\2\u0146\2\u02b8\14\u0146" + - "\1\u02b8\1\u0146\1\u02b8\4\u0146\1\u02b8\5\u0146\1\u02b8\12\u0146" + - "\1\u02b8\4\u0146\2\u021c\1\u021d\6\u021c\1\372\111\u021c\11\u021d" + - "\1\372\111\u021d\2\u021c\1\u021d\6\u021c\1\u017d\12\u021c\1\u021f" + - "\1\u021c\1\u021f\6\u021c\1\u021f\60\u021c\1\u021f\6\u021c\1\u021d" + - "\6\u021c\1\u017d\12\u021c\1\u0148\1\u021c\1\u0148\6\u021c\1\u0148" + - "\60\u021c\1\u0148\6\u021c\1\u021d\6\u021c\1\372\2\u021c\1\u02b9" + - "\6\u021c\4\u02b9\5\u021c\2\u02b9\5\u021c\3\u02b9\2\u021c\2\u02b9" + - "\14\u021c\1\u02b9\1\u021c\1\u02b9\4\u021c\1\u02b9\5\u021c\1\u02b9" + - "\12\u021c\1\u02b9\4\u021c\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\6\123\1\u02ba\5\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\4\123\1\u02bb\7\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\u02bc" + - "\5\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u02bd\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u02be\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\3\123\1\u02bf\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u02c0\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u02c1\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\3\123" + - "\1\u02c2\10\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\2\123\1\u02c3\1\u02c4\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\2\123\1\u02c4" + - "\11\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u02c4\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u02c5\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u02c6" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u02c7" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u02c8\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u02c9\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u02ca\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u02cb\7\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\7\123\1\u02cc\4\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u02cd\3\123" + - "\10\0\1\123\1\u02ce\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u02cf\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u02d0\1\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u0296" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\1\123\1\u0296\20\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\7\123\1\u02d1" + - "\4\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u02bd\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\123\1\u02d2\12\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\10\123" + - "\1\u02d3\3\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u02d4\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u0295\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u02d5" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\4\123\1\u02d6\1\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\112\1\0\6\112\1\u02d7\5\112\1\0\1\112\1\0" + - "\5\112\2\0\4\112\10\0\40\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u02d8\2\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u02d9\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u02da\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u02db\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u02dc\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\3\123\1\u02dd\16\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u02de\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\2\123\1\u02df\1\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\4\123" + - "\1\u02e0\1\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u02e1\2\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\u02e2\5\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\2\123\1\u02e3\1\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\u0296\13\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u02e4\5\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u02e5\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u02e6\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u02e7\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\2\123\1\u0296" + - "\11\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u02e8\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\2\235\1\0" + - "\1\235\1\0\2\235\4\0\6\235\1\0\30\235\1\u02e9" + - "\52\235\1\0\1\235\1\0\2\235\4\0\6\235\1\0" + - "\26\235\1\u02ea\54\235\1\0\1\235\1\0\2\235\4\0" + - "\6\235\1\0\30\235\1\u02eb\50\235\13\0\6\250\1\0" + - "\5\250\1\0\6\250\3\0\5\250\2\0\4\250\10\0" + - "\6\250\1\u02ec\5\250\1\0\22\250\2\51\1\0\1\51" + - "\1\0\2\51\4\0\4\51\1\u01a7\1\51\1\0\45\51" + - "\1\u01a7\35\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\51\51\1\u0192\16\51\1\u0192\12\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\11\51\1\301\51\51" + - "\1\301\17\51\1\0\1\51\1\0\2\51\4\0\3\51" + - "\1\u0269\2\51\1\0\50\51\1\u0269\32\51\1\0\1\51" + - "\1\0\2\51\4\0\1\51\1\u01a7\4\51\1\0\46\51" + - "\1\u01a7\34\51\1\0\1\51\1\0\2\51\4\0\1\51" + - "\1\u0192\4\51\1\0\46\51\1\u0192\34\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\27\51\1\u02ed\31\51" + - "\1\u02ed\21\51\1\0\1\51\1\0\2\51\4\0\2\51" + - "\1\u02ee\3\51\1\0\7\51\1\u02ee\73\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\23\51\1\u02ef\2\51" + - "\1\u02ef\1\u026f\31\51\1\u026f\21\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\44\51\1\u02f0\6\51\1\u02f0" + - "\27\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\52\51\1\u0192\12\51\1\u0192\15\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\11\51\1\u02f1\51\51\1\u02f1" + - "\17\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\27\51\1\u02f2\31\51\1\u02f2\21\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\43\51\1\351\16\51\1\351" + - "\20\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\51\51\1\u02f3\16\51\1\u02f3\12\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\21\51\2\u02f4\60\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\6\51\1\u026f" + - "\57\51\1\u026f\14\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\27\51\1\u02f5\31\51\1\u02f5\21\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\11\51\1\354" + - "\51\51\1\354\17\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\23\51\1\u02f6\2\51\1\u02f6\54\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\44\51\1\u02f7" + - "\6\51\1\u02f7\27\51\1\0\1\51\1\0\2\51\4\0" + - "\2\51\1\u0192\3\51\1\0\7\51\1\u0192\73\51\1\0" + - "\1\51\1\0\2\51\4\0\5\51\1\u02f8\1\0\10\51" + - "\1\u02f8\72\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\11\51\1\u02f9\51\51\1\u02f9\17\51\1\0\1\51" + - "\1\0\2\51\4\0\1\51\1\274\4\51\1\0\46\51" + - "\1\274\34\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\23\51\1\u01a7\2\51\1\u01a7\54\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\23\51\1\u02fa\2\51" + - "\1\u02fa\54\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\43\51\1\301\16\51\1\301\20\51\1\0\1\51" + - "\1\0\2\51\4\0\3\51\1\u02fb\2\51\1\0\50\51" + - "\1\u02fb\32\51\1\0\1\51\1\0\2\51\4\0\5\51" + - "\1\u02fc\1\0\10\51\1\u02fc\7\51\1\u02fd\7\51\1\u02fd" + - "\27\51\1\u02fe\6\51\1\u02fe\13\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\23\51\1\351\2\51\1\351" + - "\54\51\1\0\1\51\1\0\2\51\4\0\3\51\1\u02ff" + - "\2\51\1\0\50\51\1\u02ff\32\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\6\51\1\u0300\57\51\1\u0300" + - "\12\51\15\0\1\u0301\13\0\1\u0301\71\0\2\u01ca\1\0" + - "\24\u01ca\1\u0280\75\u01ca\1\0\5\u01ca\1\u0217\3\u01ca\1\u0302" + - "\6\u01ca\4\u0302\1\u0280\4\u01ca\2\u0302\5\u01ca\3\u0302\2\u01ca" + - "\2\u0302\14\u01ca\1\u0302\1\u01ca\1\u0302\4\u01ca\1\u0302\5\u01ca" + - "\1\u0302\12\u01ca\1\u0302\4\u01ca\2\u01cd\1\0\6\u01cd\1\372" + - "\2\u01cd\1\u0303\6\u01cd\4\u0303\5\u01cd\2\u0303\5\u01cd\3\u0303" + - "\2\u01cd\2\u0303\14\u01cd\1\u0303\1\u01cd\1\u0303\4\u01cd\1\u0303" + - "\5\u01cd\1\u0303\12\u01cd\1\u0303\4\u01cd\1\112\12\0\1\112" + - "\1\u0304\4\112\1\0\1\112\4\u0304\5\112\2\u0304\1\0" + - "\1\112\1\0\2\112\3\u0304\2\0\2\u0304\2\112\10\0" + - "\2\112\1\u0304\1\112\1\u0304\4\112\1\u0304\5\112\1\u0304" + - "\12\112\1\u0304\5\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0305\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u0306\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\3\123\1\u0307\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\12\123\1\u0308\1\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u0309\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\13\123\1\u01e9" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\7\123\1\u012f\4\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u030a\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u030b\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u028f\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u030c\1\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\3\123\1\u0239" + - "\10\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u030d\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u02a3\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u030e\4\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\6\123\1\u030f\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\u0310\13\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\1\123\1\u0311\20\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\u0312\5\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u01e9\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\2\123\1\u01e3\1\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u0313\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u029c\2\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u0314\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u0315\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u0316\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u012f\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u0317\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0318\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0319\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\4\123\1\u0296\15\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u031a\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u0132\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\30\0\1\u031b\157\0" + - "\1\u031c\105\0\1\u031d\136\0\1\u031e\131\0\1\u02b1\121\0" + - "\1\u031f\120\0\1\u0320\63\0\1\u0321\142\0\1\u0322\124\0" + - "\1\u0323\47\0\10\u02b6\1\0\16\u02b6\1\u0324\75\u02b6\1\0" + - "\5\u02b6\2\u021a\12\u02b6\1\u021a\1\u02b6\2\u021a\1\u0325\5\u021a" + - "\6\u02b6\1\u021a\51\u02b6\1\u021a\4\u02b6\10\u0146\1\u0217\3\u0146" + - "\1\u0326\6\u0146\4\u0326\1\u0218\4\u0146\2\u0326\5\u0146\3\u0326" + - "\2\u0146\2\u0326\14\u0146\1\u0326\1\u0146\1\u0326\4\u0146\1\u0326" + - "\5\u0146\1\u0326\12\u0146\1\u0326\4\u0146\2\u021c\1\u021d\6\u021c" + - "\1\372\2\u021c\1\u0327\6\u021c\4\u0327\5\u021c\2\u0327\5\u021c" + - "\3\u0327\2\u021c\2\u0327\14\u021c\1\u0327\1\u021c\1\u0327\4\u021c" + - "\1\u0327\5\u021c\1\u0327\12\u021c\1\u0327\4\u021c\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u0328\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\4\123\1\u0329" + - "\7\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\7\123\1\u032a\4\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u032b\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u0296\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u032c\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\3\123\1\u032d\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u032e\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\1\u032f\5\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u0330\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u022d\2\123\10\0\6\123\1\u0331" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\6\123\1\u0332\5\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u0242\2\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u0333\4\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\1\123\1\u0334\20\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u0335\2\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u0336\4\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\5\123\1\u0337\6\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\10\123\1\u0338\3\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\1\123\1\u0339\20\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u033a\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u033b\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u033c" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\12\123\1\u02c4\1\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\4\123\1\u033d\15\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u033e" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u033f\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u0296" + - "\4\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\1\123\1\u0340\4\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\3\123\1\u0341\10\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\4\123" + - "\1\u0342\7\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\2\123\1\u0239\1\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\1\112\1\u0343\4\112\1\0\1\112\4\u0343\5\112" + - "\2\u0343\1\0\1\112\1\0\2\112\3\u0343\2\0\2\u0343" + - "\2\112\10\0\2\112\1\u0343\1\112\1\u0343\4\112\1\u0343" + - "\5\112\1\u0343\12\112\1\u0343\5\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\1\u0344\21\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\u0345\13\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u0346" + - "\4\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u0347\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u022c\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\3\123\1\u0348\1\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u02bd\7\123\1\112\22\123\1\112" + - "\12\0\4\123\1\u0349\1\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u034a\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\2\123\1\u034b\3\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\4\123\1\u034c\7\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u034d" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\3\123\1\u034e\10\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u034f" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u0350\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\3\123\1\u0351\1\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\u0352" + - "\5\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\2\235\1\0\1\235\1\0\2\235" + - "\4\0\6\235\1\0\50\235\1\u0353\32\235\1\0\1\235" + - "\1\0\2\235\4\0\6\235\1\0\6\235\1\u0354\72\235" + - "\13\0\6\250\1\0\5\250\1\0\6\250\3\0\5\250" + - "\2\0\4\250\10\0\3\250\1\u0355\10\250\1\0\22\250" + - "\2\51\1\0\1\51\1\0\2\51\4\0\1\76\5\51" + - "\1\0\31\51\1\76\51\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\43\51\1\u0356\16\51\1\u0356\20\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\11\51" + - "\1\u01a7\51\51\1\u01a7\17\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\23\51\1\u0357\2\51\1\u0357\54\51" + - "\1\0\1\51\1\0\2\51\4\0\5\51\1\u0358\1\0" + - "\10\51\1\u0358\72\51\1\0\1\51\1\0\2\51\4\0" + - "\2\51\1\u0359\3\51\1\0\7\51\1\u0359\73\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\71\51\1\u035a" + - "\5\51\1\u035a\3\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\43\51\1\u02ef\16\51\1\u02ef\20\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\52\51\1\u035b" + - "\12\51\1\u035b\15\51\1\0\1\51\1\0\2\51\4\0" + - "\1\u0276\5\51\1\0\31\51\1\u0276\51\51\1\0\1\51" + - "\1\0\2\51\4\0\1\u035c\5\51\1\0\31\51\1\u035c" + - "\51\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\57\51\1\u01b2\4\51\1\u01b2\16\51\1\0\1\51\1\0" + - "\2\51\4\0\1\u02ed\5\51\1\0\31\51\1\u02ed\51\51" + - "\1\0\1\51\1\0\2\51\4\0\6\51\1\0\20\51" + - "\1\u02ed\7\51\1\u02ed\52\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\23\51\1\u035d\2\51\1\u035d\54\51" + - "\1\0\1\51\1\0\2\51\4\0\3\51\1\321\2\51" + - "\1\0\50\51\1\321\32\51\1\0\1\51\1\0\2\51" + - "\4\0\2\51\1\u035e\3\51\1\0\7\51\1\u035e\73\51" + - "\1\0\1\51\1\0\2\51\4\0\1\51\1\u035f\4\51" + - "\1\0\46\51\1\u035f\34\51\1\0\1\51\1\0\2\51" + - "\4\0\6\51\1\0\23\51\1\u0192\2\51\1\u0192\52\51" + - "\16\0\1\u0360\53\0\1\u0360\30\0\2\u01ca\1\0\5\u01ca" + - "\1\u0217\3\u01ca\1\u0361\6\u01ca\4\u0361\1\u0280\4\u01ca\2\u0361" + - "\5\u01ca\3\u0361\2\u01ca\2\u0361\14\u01ca\1\u0361\1\u01ca\1\u0361" + - "\4\u01ca\1\u0361\5\u01ca\1\u0361\12\u01ca\1\u0361\4\u01ca\2\u01cd" + - "\1\0\6\u01cd\1\372\2\u01cd\1\u0362\6\u01cd\4\u0362\5\u01cd" + - "\2\u0362\5\u01cd\3\u0362\2\u01cd\2\u0362\14\u01cd\1\u0362\1\u01cd" + - "\1\u0362\4\u01cd\1\u0362\5\u01cd\1\u0362\12\u01cd\1\u0362\4\u01cd" + - "\1\112\12\0\1\112\1\u0363\4\112\1\0\1\112\4\u0363" + - "\5\112\2\u0363\1\0\1\112\1\0\2\112\3\u0363\2\0" + - "\2\u0363\2\112\10\0\2\112\1\u0363\1\112\1\u0363\4\112" + - "\1\u0363\5\112\1\u0363\12\112\1\u0363\5\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u0364\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\3\123\1\u012f" + - "\2\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\6\123\1\u0365\5\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\3\123\1\u012f\1\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u0366\2\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\6\123\1\u0367\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u0368\1\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\2\123\1\u01dd\11\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u0369\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\4\123\1\u012f" + - "\7\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u036a\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\1\123\1\u01f0" + - "\20\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\2\123\1\u02a3\1\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u036b\7\123\1\112\22\123\1\112" + - "\12\0\3\123\1\u036c\2\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\2\123\1\207\2\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\1\123\1\u01e9\20\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\u036d\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\3\123\1\u036e\1\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u036f\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u015e" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\10\123\1\u0370\3\123\1\112\22\123\31\0\1\u0371" + - "\167\0\1\u0372\113\0\1\u0373\120\0\1\u0374\106\0\1\u0375" + - "\121\0\1\u02b1\122\0\1\u0376\146\0\1\u02b1\120\0\1\u0377" + - "\30\0\2\u02b6\1\0\130\u02b6\1\0\3\u02b6\1\u0378\6\u02b6" + - "\4\u0378\1\u0324\4\u02b6\2\u0378\5\u02b6\3\u0378\2\u02b6\2\u0378" + - "\14\u02b6\1\u0378\1\u02b6\1\u0378\4\u02b6\1\u0378\5\u02b6\1\u0378" + - "\12\u02b6\1\u0378\4\u02b6\10\u0146\1\u0217\3\u0146\1\u0379\6\u0146" + - "\4\u0379\1\u0218\4\u0146\2\u0379\5\u0146\3\u0379\2\u0146\2\u0379" + - "\14\u0146\1\u0379\1\u0146\1\u0379\4\u0146\1\u0379\5\u0146\1\u0379" + - "\12\u0146\1\u0379\4\u0146\2\u021c\1\u021d\6\u021c\1\372\2\u021c" + - "\1\u037a\6\u021c\4\u037a\5\u021c\2\u037a\5\u021c\3\u037a\2\u021c" + - "\2\u037a\14\u021c\1\u037a\1\u021c\1\u037a\4\u021c\1\u037a\5\u021c" + - "\1\u037a\12\u021c\1\u037a\4\u021c\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\1\123\1\u037b\20\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u037c\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\5\123\1\u037d\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\3\123\1\u037e\16\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u037f\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\10\123" + - "\1\u0296\3\123\1\112\22\123\1\112\12\0\1\123\1\u0380" + - "\4\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\1\123\1\u0381\1\u0382\2\123\2\0\4\123\10\0\14\123" + - "\1\112\4\123\1\u0383\15\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u0242\2\123\10\0\14\123\1\112\4\123\1\u0384" + - "\15\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u0385\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\4\123\1\u0386\7\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\2\123\1\u0334\1\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\10\123" + - "\1\u0387\3\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u0388\1\123\1\u0389\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u02d2\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u038a\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u038b\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\3\123\1\u038c\16\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\3\123\1\u038d\10\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u038e\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\3\123\1\u038f" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\1\123\1\u0239\20\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\2\123\1\u0390\11\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u0391\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u0392\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\1\123\1\u0393\20\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u0394\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u0395\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u0396\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\1\112\1\u0397" + - "\4\112\1\0\1\112\4\u0397\5\112\2\u0397\1\0\1\112" + - "\1\0\2\112\3\u0397\2\0\2\u0397\2\112\10\0\2\112" + - "\1\u0397\1\112\1\u0397\4\112\1\u0397\5\112\1\u0397\12\112" + - "\1\u0397\5\112\12\0\1\u0398\2\123\1\u0399\2\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\10\123\1\u039a\3\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u039b\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u039c\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\6\123\1\u039d" + - "\13\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\1\123" + - "\1\u039e\12\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u039f\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\6\123\1\u03a0\5\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\u03a1\13\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\3\123\1\u03a2\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\3\123\1\u03a3\10\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u03a4\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\12\123\1\u03a5\1\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\1\u03a6" + - "\21\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u03a7\2\123" + - "\10\0\14\123\1\112\22\123\2\235\1\0\1\235\1\0" + - "\2\235\4\0\6\235\1\0\12\235\1\u02ea\70\235\1\0" + - "\1\235\1\0\2\235\4\0\6\235\1\0\44\235\1\u0257" + - "\34\235\13\0\6\250\1\0\5\250\1\0\2\250\1\u03a8" + - "\3\250\3\0\5\250\2\0\4\250\10\0\14\250\1\0" + - "\22\250\2\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\6\51\1\u018f\57\51\1\u018f\14\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\17\51\1\76\27\51" + - "\1\76\33\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\23\51\1\u03a9\2\51\1\u03a9\54\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\23\51\1\u01b8\2\51" + - "\1\u01b8\54\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\6\51\1\u03aa\57\51\1\u03aa\14\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\23\51\1\u02ed\2\51" + - "\1\u02ed\54\51\1\0\1\51\1\0\2\51\4\0\6\51" + - "\1\0\43\51\1\266\16\51\1\266\20\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\52\51\1\u03ab\12\51" + - "\1\u03ab\15\51\1\0\1\51\1\0\2\51\4\0\3\51" + - "\1\354\2\51\1\0\50\51\1\354\32\51\1\0\1\51" + - "\1\0\2\51\4\0\6\51\1\0\43\51\1\u01bc\16\51" + - "\1\u01bc\16\51\17\0\1\u03ac\47\0\1\u03ac\33\0\2\u01ca" + - "\1\0\5\u01ca\1\u0217\3\u01ca\1\120\6\u01ca\4\120\1\u0280" + - "\4\u01ca\2\120\5\u01ca\3\120\2\u01ca\2\120\14\u01ca\1\120" + - "\1\u01ca\1\120\4\u01ca\1\120\5\u01ca\1\120\12\u01ca\1\120" + - "\4\u01ca\2\u01cd\1\0\6\u01cd\1\372\2\u01cd\1\370\6\u01cd" + - "\4\370\5\u01cd\2\370\5\u01cd\3\370\2\u01cd\2\370\14\u01cd" + - "\1\370\1\u01cd\1\370\4\u01cd\1\370\5\u01cd\1\370\12\u01cd" + - "\1\370\4\u01cd\1\112\12\0\1\112\1\123\4\112\1\0" + - "\1\112\4\123\5\112\2\123\1\0\1\112\1\0\2\112" + - "\3\123\2\0\2\123\2\112\10\0\2\112\1\123\1\112" + - "\1\123\4\112\1\123\5\112\1\123\12\112\1\123\5\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u0368\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u03ad\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u028f\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0306\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\1\u012f\21\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u02a3\7\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u03ae\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u03af\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u02bd\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\u01e9\5\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u03b0" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\4\123\1\u01de\7\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u03b1\3\123\10\0\14\123" + - "\1\112\22\123\33\0\1\u02b1\142\0\1\u02b1\101\0\1\u0323" + - "\121\0\1\u02b1\143\0\1\u03b2\140\0\1\u03b3\117\0\1\u0371" + - "\35\0\10\u02b6\1\0\3\u02b6\1\u03b4\6\u02b6\4\u03b4\1\u0324" + - "\4\u02b6\2\u03b4\5\u02b6\3\u03b4\2\u02b6\2\u03b4\14\u02b6\1\u03b4" + - "\1\u02b6\1\u03b4\4\u02b6\1\u03b4\5\u02b6\1\u03b4\12\u02b6\1\u03b4" + - "\4\u02b6\10\u0146\1\u0217\3\u0146\1\173\6\u0146\4\173\1\u0218" + - "\4\u0146\2\173\5\u0146\3\173\2\u0146\2\173\14\u0146\1\173" + - "\1\u0146\1\173\4\u0146\1\173\5\u0146\1\173\12\u0146\1\173" + - "\4\u0146\2\u021c\1\u021d\6\u021c\1\372\2\u021c\1\u0148\6\u021c" + - "\4\u0148\5\u021c\2\u0148\5\u021c\3\u0148\2\u021c\2\u0148\14\u021c" + - "\1\u0148\1\u021c\1\u0148\4\u021c\1\u0148\5\u021c\1\u0148\12\u021c" + - "\1\u0148\4\u021c\1\112\12\0\3\123\1\u0399\2\123\1\0" + - "\3\123\1\u03b5\1\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\6\123" + - "\1\230\13\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u03b6\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\13\123\1\u03b7\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u03b8\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u03b9" + - "\2\123\10\0\6\123\1\u03ba\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u03bb\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u03bc\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u03bd\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\123\1\u03be" + - "\12\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\20\123\1\u03bf\1\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u03c0\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u03c1\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u03c2\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u03c3\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u03c4" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u03c5\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u03c6\5\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u03c7\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\2\123" + - "\1\u03c8\1\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\3\123\1\u03c9\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\1\123\1\u03ca\3\123\1\0\1\u03cb\4\123" + - "\10\0\11\123\1\u03cc\2\123\1\112\10\123\1\u03cd\11\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u03ce" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u0296\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u03a6\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\3\123\1\u03cf" + - "\2\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\6\123\1\u03d0\5\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\3\123\1\u03d1\1\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\1\112\1\u03d2\4\112\1\0\1\112" + - "\4\u03d2\5\112\2\u03d2\1\0\1\112\1\0\2\112\3\u03d2" + - "\2\0\2\u03d2\2\112\10\0\2\112\1\u03d2\1\112\1\u03d2" + - "\4\112\1\u03d2\5\112\1\u03d2\12\112\1\u03d2\5\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u03d3\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\3\123" + - "\1\u03d4\2\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u03d5\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\4\123\1\u03d6\7\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u03d7\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u03d8\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u03d9\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\2\123\1\u03da\2\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\13\123\1\u03db\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\2\123\1\u03dc\2\123\2\0\4\123\10\0\14\123\1\112" + - "\6\123\1\u03dd\13\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u03de\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u03df\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\3\123\1\u03e0\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u03a6\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\4\123" + - "\1\u03e1\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u03e2\1\123\10\0\14\123" + - "\1\112\22\123\2\51\1\0\1\51\1\0\2\51\4\0" + - "\6\51\1\0\17\51\1\u01a7\27\51\1\u01a7\33\51\1\0" + - "\1\51\1\0\2\51\4\0\6\51\1\0\43\51\1\270" + - "\16\51\1\270\20\51\1\0\1\51\1\0\2\51\4\0" + - "\4\51\1\u03e3\1\51\1\0\45\51\1\u03e3\33\51\20\0" + - "\1\u03e4\11\0\1\u03e4\70\0\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u02a3\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\u03e5\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u020a\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\4\123\1\u01e9\7\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\u03e6\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\43\0\1\u03e7\31\0\1\u03e8\76\0\1\u03e9" + - "\51\0\10\u02b6\1\0\3\u02b6\1\u03ea\6\u02b6\4\u03ea\1\u0324" + - "\4\u02b6\2\u03ea\5\u02b6\3\u03ea\2\u02b6\2\u03ea\14\u02b6\1\u03ea" + - "\1\u02b6\1\u03ea\4\u02b6\1\u03ea\5\u02b6\1\u03ea\12\u02b6\1\u03ea" + - "\4\u02b6\1\112\12\0\6\123\1\0\5\123\1\376\1\u03eb" + - "\5\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u03ec\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u03ed\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\1\u03ee\21\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\3\123\1\u03ef" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u03f0\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u03f1\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u03f2\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u03f3\3\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u03f4" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u03f5\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u03f6\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\4\123\1\u03f7\1\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\4\123\1\u03f8\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\3\123\1\u03f9\10\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\2\123\1\u03a6\1\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u03fa\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\123\1\u03fb\2\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u03fc\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u03fd\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\1\u03fe" + - "\4\123\1\u03ff\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\2\123" + - "\1\u0400\3\123\1\u0401\13\123\1\112\12\0\6\123\1\0" + - "\3\123\1\u0402\1\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0403\12\123" + - "\1\112\22\123\13\0\1\u0404\107\0\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\230\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u0405\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\4\123\1\u0406\1\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u0407\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0408\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\3\123\1\u012f\10\123\1\112\22\123\1\112\12\0\1\112" + - "\1\u016d\4\112\1\0\1\112\4\u016d\5\112\2\u016d\1\0" + - "\1\112\1\0\2\112\3\u016d\2\0\2\u016d\2\112\10\0" + - "\2\112\1\u016d\1\112\1\u016d\4\112\1\u016d\5\112\1\u016d" + - "\12\112\1\u016d\5\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u0409\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\2\123\1\u0231\11\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u040a" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u040b\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\123\1\u03a5\12\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\10\123" + - "\1\u040c\3\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u040d\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u040e\12\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u040f\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\6\123\1\u0410\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u0411\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\11\123" + - "\1\u0412\2\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u0413\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\3\123\1\u0414\1\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u0162\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\6\123\1\u0415\13\123" + - "\2\51\1\0\1\51\1\0\2\51\4\0\6\51\1\0" + - "\20\51\1\u0416\7\51\1\u0416\50\51\21\0\1\u0417\101\0" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u0418" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u01dd\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\72\0\1\u0419" + - "\101\0\1\u041a\103\0\1\u041b\70\0\10\u02b6\1\0\3\u02b6" + - "\1\u021a\6\u02b6\4\u021a\1\u0324\4\u02b6\2\u021a\5\u02b6\3\u021a" + - "\2\u02b6\2\u021a\14\u02b6\1\u021a\1\u02b6\1\u021a\4\u02b6\1\u021a" + - "\5\u02b6\1\u021a\12\u02b6\1\u021a\4\u02b6\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\3\123" + - "\1\u041c\1\123\2\0\4\123\10\0\6\123\1\u041d\5\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\4\123\1\u041e\7\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u041f\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\4\123\1\u03f8\2\0\4\123\10\0\14\123" + - "\1\112\6\123\1\u0420\13\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\2\123\1\u0421\3\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\4\123\1\u0422\7\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\2\123\1\u0334\11\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\10\123\1\u0423\3\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\2\123\1\u0424\2\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\1\u0425\5\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u0426\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u0427\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u0428\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\5\123\1\u0429\6\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\2\123\1\u042a\3\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u042b" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\4\123\1\u042c\1\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\3\123\1\u042d\16\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\6\123\1\u042e\5\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u042f\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\1\u0430" + - "\13\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u0431\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\4\123\1\u0432\7\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\123\1\u0433" + - "\12\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u0434\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\4\123\1\u011d\7\123\1\112\22\123" + - "\32\0\1\u0435\70\0\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u0436\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u0437\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u0438\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u0439\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u043a\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\6\123\1\u043b\5\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\6\123\1\u043c\13\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\123\1\u043d" + - "\12\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u043e\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u043f\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\2\123\1\u0440\17\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u0441\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\2\123\1\u0442\3\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u0443\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u0444\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u0445\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u0446\2\123" + - "\10\0\14\123\1\112\22\123\2\51\1\0\1\51\1\0" + - "\2\51\4\0\6\51\1\0\27\51\1\270\31\51\1\270" + - "\17\51\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\17\123\1\u03af\2\123\50\0\1\u0447\104\0\1\u0448" + - "\140\0\1\u0449\52\0\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\3\123\1\u0334\1\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\2\123\1\u03f1\1\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u044a\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\3\123\1\u044b\1\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u044c\2\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\4\123\1\u03f8\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u044d\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u044e\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\123\1\u044f" + - "\12\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u0450\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u0451\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\1\0\1\u0452\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u0453\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\4\123\1\u0454\7\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u0455\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u0456\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u0457\1\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\3\123\1\u0458\1\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\4\123\1\u0459\1\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\123\1\u045a\2\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u045b\4\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\1\123\1\u045c\20\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\4\123\1\u045d\7\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u045e\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u041d\5\123\1\112\22\123" + - "\51\0\1\u045f\51\0\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u0460\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u0461\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u0462\2\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\3\123\1\u0463\2\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u0421\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\4\123\1\u0421\7\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u0464\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u0351\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u0465\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\10\123" + - "\1\u0466\3\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u0467\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u0468\1\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\u0469\13\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\3\123\1\u046a" + - "\1\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u046b\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\u046c\3\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\4\123\1\u046d\7\123\1\112\22\123\52\0\1\u0449" + - "\121\0\1\u02b1\137\0\1\u02b1\34\0\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\4\123" + - "\1\u046e\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\2\123\1\u046f\1\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0470\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u0471\1\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u03a6" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\u0472\5\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\3\123\1\u0473\10\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\4\123\1\u0239" + - "\7\123\1\112\22\123\13\0\1\u0474\74\0\1\u0475\12\0" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\10\123\1\u0476" + - "\3\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u0477" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\2\123\1\u0421\11\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u0478" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u0479" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\3\123\1\u047a\1\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u047b\1\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\2\123\1\u043a\3\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u047c\3\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\u047d\5\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\u047e\3\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\6\123\1\u047f\5\123\1\112\22\123\32\0" + - "\1\u0480\70\0\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\3\123\1\u0296\10\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u0481\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\3\123\1\u0482\2\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u0483\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u0484\3\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\1\123\1\u0421" + - "\4\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u03ef\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\123\1\u0485\4\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\2\123" + - "\1\u0486\11\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\123\1\u0468\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\2\123\1\u0487\2\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\2\123\1\u0488\11\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\2\123\1\u0489\11\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\1\u048a\13\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\2\123\1\u048b" + - "\1\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\1\123\1\u048c\12\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u048d\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\123" + - "\1\u048e\2\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u0455\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\3\123" + - "\1\u048f\10\123\1\112\22\123\30\0\1\u0490\125\0\1\u0491" + - "\67\0\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u0492\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\3\123\1\u0493\10\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u0494\12\123" + - "\1\112\22\123\1\112\12\0\5\123\1\u0495\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\123\1\u0496\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u0497\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u0498\2\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\10\123\1\u0481\3\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\3\123\1\u0499\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u049a\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\50\0\1\u049b\52\0\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u049c\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u02cf\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\3\123\1\u049d" + - "\2\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\u049e\13\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\1\123\1\u049f\2\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\4\123\1\u04a0" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\1\123\1\u04a1\12\123\1\112" + - "\22\123\1\112\12\0\1\123\1\u04a2\4\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\3\123\1\u04a3\16\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\1\123\1\u04a4\3\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u04a5\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\1\u04a6\3\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\12\123\1\u03a6\1\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\1\123\1\u0334\20\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u04a7\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u04a8\12\123" + - "\1\112\22\123\34\0\1\u04a9\160\0\1\u04aa\30\0\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\3\123\1\u04ab\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\2\123" + - "\1\u04ac\3\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\3\123\1\u0486\2\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\u04ad\13\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\1\u04ae" + - "\5\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\1\123\1\u04af\4\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\2\123\1\u04b0\11\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\3\123\1\u0486\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\1\123\1\u04b1\12\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\3\123\1\u03ef\2\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\3\123" + - "\1\u04b2\2\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\1\123\1\u04b3\12\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\1\u04b4" + - "\21\123\1\112\12\0\6\123\1\0\5\123\1\376\1\123" + - "\1\u0162\4\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\5\123\1\u0429\6\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\1\u04b5\5\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\2\123\1\u04b6\1\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\3\123\1\u04b7\10\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\6\123\1\u04b8\5\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\3\123" + - "\1\u0393\2\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\10\123\1\u04b9\3\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\6\123\1\u04ba\5\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u03f9\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\53\0\1\u04bb\137\0" + - "\1\u04bc\32\0\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\3\123\1\u04ac" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\6\123\1\u04bd\5\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\1\123\1\u04be\4\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\3\123\1\u04bf\2\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\2\123\1\u04c0\1\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\1\u03fe\5\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\1\123\1\u04b0\4\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\6\123\1\u04c1\5\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\2\123\1\u03a6" + - "\11\123\1\112\22\123\1\112\12\0\1\u04c2\5\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u04b3\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u04c3\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\1\u04c4" + - "\3\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u04c5\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\u036c\3\123\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\2\123\1\u0351\3\123\1\0\1\123\1\0\5\123\2\0" + - "\4\123\10\0\14\123\1\112\22\123\50\0\1\u04c6\137\0" + - "\1\u04c7\35\0\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\1\123\1\u0392\12\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\u04c8\3\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\2\123\1\u04c9\11\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u04ca" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\2\123\1\u04cb\3\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\6\123\1\u04cc" + - "\5\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u04cd\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\1\123\1\u04ce\4\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\7\123\1\u03a6" + - "\4\123\1\112\22\123\32\0\1\u049b\156\0\1\u04cf\34\0" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\1\123\1\u04d0\2\123\10\0" + - "\14\123\1\112\22\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u0421\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u04d1\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\6\123\1\u04d2\5\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\17\123\1\u043a\2\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\3\123\1\u04d3\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\123\1\u04d4\2\123\10\0\14\123" + - "\1\112\22\123\50\0\1\u04d5\52\0\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\2\123\1\u04d6\11\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\3\123\1\u04d7\10\0\14\123" + - "\1\112\22\123\1\112\12\0\6\123\1\0\5\123\1\376" + - "\6\123\1\0\1\123\1\0\5\123\2\0\1\123\1\u04d8" + - "\2\123\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\13\123\1\u04d9\6\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\2\123\1\u04da" + - "\3\123\1\0\1\123\1\0\5\123\2\0\4\123\10\0" + - "\14\123\1\112\22\123\25\0\1\u04db\75\0\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\1\123\1\u03ca\3\123\2\0\4\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\1\123\1\u04dc\4\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\4\123" + - "\10\0\14\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\6\123\1\0\1\123\1\0\5\123\2\0" + - "\2\123\1\u04dd\1\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\1\u04de\3\123\10\0\14\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u04df\5\123\1\112\22\123\52\0\1\u04e0\50\0\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\u04e1\13\123\1\112" + - "\22\123\1\112\12\0\6\123\1\0\5\123\1\376\6\123" + - "\1\0\1\123\1\0\5\123\2\0\4\123\10\0\6\123" + - "\1\u04e2\5\123\1\112\22\123\1\112\12\0\6\123\1\0" + - "\5\123\1\376\1\123\1\u04e3\4\123\1\0\1\123\1\0" + - "\5\123\2\0\4\123\10\0\14\123\1\112\22\123\1\112" + - "\12\0\6\123\1\0\5\123\1\376\6\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\1\123\1\u04e4\12\123" + - "\1\112\22\123\65\0\1\u04e5\35\0\1\112\12\0\6\123" + - "\1\0\5\123\1\376\6\123\1\0\1\123\1\0\5\123" + - "\2\0\1\123\1\u04e6\2\123\10\0\14\123\1\112\22\123" + - "\1\112\12\0\6\123\1\0\5\123\1\376\6\123\1\0" + - "\1\123\1\0\5\123\2\0\4\123\10\0\14\123\1\112" + - "\17\123\1\u04e7\2\123\1\112\12\0\6\123\1\0\5\123" + - "\1\376\6\123\1\0\1\123\1\0\5\123\2\0\3\123" + - "\1\u039c\10\0\14\123\1\112\22\123\1\112\12\0\6\123" + - "\1\0\5\123\1\376\3\123\1\u0421\2\123\1\0\1\123" + - "\1\0\5\123\2\0\4\123\10\0\14\123\1\112\22\123" + - "\70\0\1\u04e8\32\0\1\112\12\0\6\123\1\0\5\123" + - "\1\376\3\123\1\u033f\2\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123\1\112\12\0" + - "\6\123\1\0\5\123\1\376\6\123\1\0\1\123\1\0" + - "\5\123\2\0\1\u04e9\3\123\10\0\14\123\1\112\22\123" + - "\73\0\1\u049b\27\0\1\112\12\0\6\123\1\0\5\123" + - "\1\376\1\123\1\u03a6\4\123\1\0\1\123\1\0\5\123" + - "\2\0\4\123\10\0\14\123\1\112\22\123"; - - private static int[] zzUnpackTrans() { - int[] result = new int[98272]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } + private static final String ZZ_ACTION_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\2\1\1\11\1\12\2\13\1\5\1\14"+ + "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\2\21"+ + "\2\23\3\21\2\23\2\21\1\23\6\21\1\23\1\1"+ + "\1\24\1\25\1\1\1\13\1\26\1\27\1\17\1\30"+ + "\1\31\1\32\1\33\1\34\1\1\1\35\1\1\1\36"+ + "\1\37\2\14\1\2\1\14\1\40\1\41\1\14\2\2"+ + "\1\14\2\42\1\14\5\2\1\36\1\2\1\14\5\2"+ + "\1\43\1\14\1\44\10\2\1\1\1\45\1\46\1\47"+ + "\1\1\1\50\1\51\1\52\1\1\1\53\6\1\1\54"+ + "\4\1\1\55\2\1\1\56\7\1\1\36\1\57\1\14"+ + "\1\60\1\61\1\14\11\2\1\14\2\42\14\2\1\62"+ + "\21\2\1\1\1\63\1\1\2\2\1\64\1\65\1\66"+ + "\1\67\4\2\1\70\1\71\1\70\1\72\1\73\1\70"+ + "\1\74\1\70\1\75\1\70\1\76\1\77\1\100\2\77"+ + "\1\66\1\77\1\101\1\102\1\103\1\104\1\103\1\105"+ + "\2\2\1\103\1\42\1\2\1\103\1\106\1\107\1\110"+ + "\1\111\1\112\1\113\1\114\1\115\2\1\1\116\1\117"+ + "\1\120\1\121\1\1\1\122\1\1\1\123\1\4\2\124"+ + "\1\125\1\126\1\127\1\6\5\0\1\130\1\125\32\21"+ + "\2\23\2\21\1\23\44\21\1\131\1\132\2\0\1\125"+ + "\1\0\1\14\1\133\1\0\1\134\1\36\1\2\1\14"+ + "\1\135\1\42\2\135\2\136\1\135\1\137\2\135\43\2"+ + "\3\66\12\2\1\140\1\141\1\142\3\0\1\143\12\0"+ + "\1\144\2\0\1\145\16\0\1\60\1\146\1\60\1\61"+ + "\1\0\1\65\1\61\1\147\1\150\1\36\46\2\1\151"+ + "\1\135\1\42\2\135\1\136\1\135\1\137\3\135\45\2"+ + "\1\62\5\2\1\66\1\2\1\66\40\2\1\152\1\153"+ + "\3\2\1\0\1\154\1\155\15\0\1\156\1\0\1\42"+ + "\5\0\1\42\1\112\1\157\1\160\1\161\1\162\2\124"+ + "\1\125\1\0\1\163\1\0\1\164\4\0\1\125\14\21"+ + "\1\23\63\21\1\131\1\0\1\165\1\0\1\36\1\2"+ + "\1\136\1\0\1\42\3\137\30\2\1\166\16\2\1\74"+ + "\16\2\44\0\1\64\1\60\1\0\2\60\1\61\1\0"+ + "\1\65\3\61\1\167\1\36\3\2\1\170\65\2\1\136"+ + "\1\42\2\137\1\42\1\137\50\2\1\36\6\2\1\74"+ + "\33\2\1\170\21\2\25\0\2\124\1\171\1\172\2\0"+ + "\1\173\31\21\1\23\2\21\1\23\6\21\1\0\1\174"+ + "\1\36\1\2\1\135\1\2\1\175\11\2\1\74\1\176"+ + "\3\2\1\170\23\2\1\0\1\1\3\0\1\177\3\0"+ + "\1\200\1\201\11\0\1\202\11\0\1\203\5\0\3\60"+ + "\1\61\1\36\70\2\1\170\3\2\1\170\1\2\1\170"+ + "\5\2\2\135\7\2\1\175\11\2\1\170\3\2\1\74"+ + "\3\2\1\170\6\2\1\36\36\2\1\0\16\2\1\66"+ + "\23\0\2\124\2\0\12\21\1\23\11\21\1\0\1\36"+ + "\4\2\1\66\1\2\1\66\20\2\37\0\3\60\1\61"+ + "\1\36\3\2\1\170\14\2\1\170\47\2\1\170\24\2"+ + "\2\66\26\2\1\36\32\2\1\0\15\2\16\0\1\124"+ + "\1\204\12\21\1\0\1\36\1\2\1\205\16\2\24\0"+ + "\2\60\1\61\1\36\1\2\1\170\31\2\1\170\27\2"+ + "\1\170\2\2\1\170\24\2\1\205\2\2\1\170\21\2"+ + "\1\36\13\2\1\170\2\2\1\170\6\2\1\0\13\2"+ + "\12\0\1\206\3\21\1\0\10\2\4\0\1\202\6\0"+ + "\1\60\33\2\1\170\21\2\1\170\7\2\1\0\3\2"+ + "\1\0\22\2\1\0\15\2\1\36\27\2\1\0\13\2"+ + "\6\0\1\21\1\0\3\2\13\0\1\60\16\2\1\170"+ + "\50\2\2\0\2\2\4\0\16\2\2\0\25\2\1\170"+ + "\11\2\1\0\12\2\1\207\4\0\1\21\1\210\1\2"+ + "\1\211\1\212\5\0\14\2\1\0\10\2\1\170\34\2"+ + "\2\0\1\2\4\0\5\2\1\170\7\2\1\0\2\2"+ + "\1\170\11\2\1\170\20\2\1\170\11\2\10\0\16\2"+ + "\1\170\2\2\1\0\31\2\6\0\10\2\1\0\2\2"+ + "\1\0\35\2\3\0\1\62\2\0\10\2\1\170\4\2"+ + "\2\0\10\2\1\170\14\2\6\0\7\2\1\170\1\2"+ + "\1\0\1\170\4\2\1\170\17\2\1\170\2\2\1\170"+ + "\3\2\1\0\1\170\3\2\2\0\1\2\1\170\17\2"+ + "\5\0\6\2\1\0\1\2\1\0\3\2\1\170\3\2"+ + "\1\170\17\2\2\0\3\2\2\0\16\2\4\0\2\2"+ + "\1\170\3\2\2\0\25\2\2\0\2\2\2\0\1\170"+ + "\11\2\1\170\2\2\3\0\4\2\2\0\22\2\5\0"+ + "\1\2\3\0\10\2\1\0\1\2\3\0\4\2\2\0"+ + "\15\2\4\0\1\2\2\0\10\2\1\0\1\2\3\0"+ + "\3\2\2\0\7\2\6\0\5\2\1\0\1\170\3\0"+ + "\2\2\2\0\2\2\1\170\3\2\6\0\3\2\5\0"+ + "\2\2\2\0\2\2\1\0\1\170\2\2\5\0\2\2"+ + "\3\0\1\2\2\0\2\2\2\0\1\2\5\0\1\2"+ + "\3\0\1\2\2\0\1\2\11\0\1\2\2\0\1\2"+ + "\16\0\1\170\43\0"; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\6\0\2\1\1\0\2\1\7\0\2\1\1\11\4\1" + - "\1\11\2\1\1\11\2\1\2\11\1\1\4\11\1\1" + - "\1\11\1\1\1\11\25\1\1\11\1\1\1\11\1\1" + - "\2\11\1\1\3\11\1\1\1\11\2\1\1\11\16\1" + - "\1\11\7\1\1\11\12\1\1\11\1\1\1\11\2\1" + - "\1\11\3\1\1\11\41\1\1\11\5\1\2\11\11\1" + - "\2\11\1\0\1\11\103\1\1\11\2\0\1\11\3\1" + - "\1\11\74\1\1\11\3\0\2\11\11\0\3\1\1\0" + - "\36\1\1\11\23\1\2\11\1\1\1\11\4\1\1\11" + - "\1\0\1\11\1\0\1\11\100\1\1\0\7\1\1\0" + - "\3\1\1\0\66\1\13\0\1\11\1\1\1\0\3\1" + - "\1\0\74\1\2\11\43\1\1\0\4\1\1\11\45\1" + - "\1\11\6\0\1\11\4\0\113\1\1\0\31\1\11\0" + - "\74\1\1\0\20\1\7\0\64\1\1\0\6\1\1\0" + - "\27\1\1\0\30\1\1\0\2\1\3\0\32\1\1\0" + - "\22\1\1\11\1\1\3\0\31\1\1\0\21\1\3\0" + - "\10\1\1\0\14\1\1\0\24\1\2\0\12\1\1\0" + - "\17\1\2\0\11\1\1\11\15\1\2\0\20\1\2\0" + - "\11\1\2\0\7\1\1\0\5\1\1\0\5\1\1\0" + - "\4\1\1\0\4\1\1\0\2\1\1\0\1\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[1257]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + private static int [] zzUnpackAction() { + int [] result = new int[2711]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Token type specific to JSPTokenMaker; this signals that the user has ended a line with an unclosed HTML tag; thus - * a new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG = -1; - - /** - * Token type specific to JSPTokenMaker; this signals that the user has ended a line with an unclosed - * <script> tag. - */ - public static final int INTERNAL_INTAG_SCRIPT = -2; - - /** - * Token type specifying we're in a double-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; - - /** - * Token type specifying we're in a single-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; - - /** - * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). - */ - public static final int INTERNAL_IN_HIDDEN_COMMENT = -5; - - /** - * Token type specifying we're in a Java documentation comment. - */ - public static final int INTERNAL_IN_JAVA_DOCCOMMENT = -6; - - /** - * Token type specifying we're in Java code. - */ - public static final int INTERNAL_IN_JAVA_EXPRESSION = -7; - - /** - * Token type specifying we're in Java multiline comment. - */ - public static final int INTERNAL_IN_JAVA_MLC = -8; - - /** - * Token type specifying we're in a JSP directive (either include, page or taglib). - */ - public static final int INTERNAL_IN_JSP_DIRECTIVE = -9; - - /** - * Token type specifying we're in JavaScript. - */ - public static final int INTERNAL_IN_JS = -10; - - /** - * Token type specifying we're in a JavaScript multiline comment. - */ - public static final int INTERNAL_IN_JS_MLC = -11; - - /** - * Whether closing markup tags are automatically completed for JSP. - */ - private static boolean completeCloseTags; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public JSPTokenMaker() { - super(); - } - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\140\0\300\0\u0120\0\u0180\0\u01e0\0\u0240\0\u02a0"+ + "\0\u0300\0\u0360\0\u03c0\0\u0420\0\u0480\0\u04e0\0\u0540\0\u05a0"+ + "\0\u0600\0\u0660\0\u06c0\0\u0720\0\u0780\0\u07e0\0\u0840\0\u08a0"+ + "\0\u0900\0\u0960\0\u09c0\0\u0a20\0\u0a80\0\u0ae0\0\u0b40\0\u0ba0"+ + "\0\u0c00\0\u0c60\0\u0cc0\0\u0d20\0\u0d80\0\u0de0\0\u0e40\0\u0cc0"+ + "\0\u0ea0\0\u0f00\0\u0f60\0\u0fc0\0\u1020\0\u0cc0\0\u1080\0\u10e0"+ + "\0\u0cc0\0\u0cc0\0\u1140\0\u11a0\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u1200\0\u0cc0\0\u1260\0\u0cc0\0\u12c0\0\u1320\0\u1380\0\u13e0"+ + "\0\u1440\0\u14a0\0\u1500\0\u1560\0\u15c0\0\u1620\0\u1680\0\u16e0"+ + "\0\u1740\0\u17a0\0\u1800\0\u1860\0\u18c0\0\u1920\0\u1980\0\u1260"+ + "\0\u19e0\0\u1a40\0\u0cc0\0\u1aa0\0\u1b00\0\u0cc0\0\u0cc0\0\u1b60"+ + "\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u1bc0\0\u0cc0\0\u1c20"+ + "\0\u1c80\0\u0cc0\0\u1ce0\0\u1d40\0\u0cc0\0\u1da0\0\u0cc0\0\u0cc0"+ + "\0\u1e00\0\u1e60\0\u1ec0\0\u1f20\0\u1f80\0\u1fe0\0\u2040\0\u20a0"+ + "\0\u2100\0\u2160\0\u21c0\0\u2220\0\u0cc0\0\u2280\0\u22e0\0\u2340"+ + "\0\u23a0\0\u2400\0\u2460\0\u24c0\0\u0cc0\0\u2520\0\u0cc0\0\u2580"+ + "\0\u25e0\0\u2640\0\u26a0\0\u2700\0\u2760\0\u27c0\0\u2820\0\u2880"+ + "\0\u0cc0\0\u0cc0\0\u28e0\0\u2940\0\u0cc0\0\u0cc0\0\u28e0\0\u29a0"+ + "\0\u0cc0\0\u2a00\0\u2a60\0\u2ac0\0\u2b20\0\u2b80\0\u2be0\0\u0cc0"+ + "\0\u2c40\0\u2ca0\0\u2d00\0\u2d60\0\u0cc0\0\u2dc0\0\u2e20\0\u0cc0"+ + "\0\u2e80\0\u2ee0\0\u2f40\0\u2fa0\0\u3000\0\u3060\0\u30c0\0\u3120"+ + "\0\u0cc0\0\u3180\0\u31e0\0\u3240\0\u32a0\0\u3300\0\u3360\0\u33c0"+ + "\0\u3420\0\u3480\0\u34e0\0\u3540\0\u35a0\0\u3600\0\u3660\0\u36c0"+ + "\0\u3720\0\u3780\0\u37e0\0\u3840\0\u38a0\0\u3900\0\u3960\0\u39c0"+ + "\0\u3a20\0\u3a80\0\u3ae0\0\u3b40\0\u3ba0\0\u3c00\0\u3c60\0\u3cc0"+ + "\0\u3d20\0\u3d80\0\u3de0\0\u3e40\0\u3ea0\0\u3f00\0\u3f60\0\u3fc0"+ + "\0\u4020\0\u4080\0\u40e0\0\u4140\0\u41a0\0\u4200\0\u4260\0\u42c0"+ + "\0\u0cc0\0\u4320\0\u4380\0\u43e0\0\u4440\0\u44a0\0\u0cc0\0\u0cc0"+ + "\0\u4500\0\u4560\0\u45c0\0\u4620\0\u0cc0\0\u0cc0\0\u4680\0\u0cc0"+ + "\0\u0cc0\0\u46e0\0\u4740\0\u47a0\0\u4800\0\u4860\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4680\0\u46e0\0\u48c0\0\u4920\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4680\0\u0cc0\0\u4980\0\u49e0\0\u4a40\0\u4aa0\0\u4b00"+ + "\0\u4b60\0\u0cc0\0\u0cc0\0\u0cc0\0\u0cc0\0\u4bc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4c20\0\u4c80\0\u0cc0\0\u28e0\0\u4ce0\0\u0cc0\0\u4d40"+ + "\0\u0cc0\0\u4da0\0\u0cc0\0\u4e00\0\u4e60\0\u4ec0\0\u4f20\0\u4f80"+ + "\0\u0cc0\0\u0cc0\0\u4fe0\0\u5040\0\u50a0\0\u5100\0\u5160\0\u0cc0"+ + "\0\u51c0\0\u5220\0\u5280\0\u52e0\0\u5340\0\u53a0\0\u5400\0\u5460"+ + "\0\u54c0\0\u5520\0\u5580\0\u55e0\0\u5640\0\u56a0\0\u5700\0\u5760"+ + "\0\u57c0\0\u5820\0\u5880\0\u58e0\0\u5940\0\u59a0\0\u5a00\0\u5a60"+ + "\0\u5ac0\0\u5b20\0\u5b80\0\u5be0\0\u5c40\0\u5ca0\0\u5d00\0\u5d60"+ + "\0\u5dc0\0\u5e20\0\u5e80\0\u5ee0\0\u5f40\0\u5fa0\0\u6000\0\u6060"+ + "\0\u60c0\0\u6120\0\u6180\0\u61e0\0\u6240\0\u62a0\0\u6300\0\u6360"+ + "\0\u63c0\0\u6420\0\u6480\0\u64e0\0\u6540\0\u65a0\0\u6600\0\u6660"+ + "\0\u66c0\0\u6720\0\u6780\0\u67e0\0\u6840\0\u68a0\0\u6900\0\u6960"+ + "\0\u69c0\0\u6a20\0\u6a80\0\u6ae0\0\u6b40\0\u0cc0\0\u1da0\0\u6ba0"+ + "\0\u6c00\0\u6c60\0\u6c60\0\u0cc0\0\u6cc0\0\u6d20\0\u6d80\0\u6de0"+ + "\0\u6e40\0\u6ea0\0\u6ea0\0\u6f00\0\u6f60\0\u6ea0\0\u6fc0\0\u7020"+ + "\0\u7080\0\u70e0\0\u7140\0\u71a0\0\u7200\0\u7260\0\u72c0\0\u7320"+ + "\0\u7380\0\u73e0\0\u7440\0\u74a0\0\u7500\0\u7560\0\u75c0\0\u7620"+ + "\0\u7680\0\u76e0\0\u7740\0\u77a0\0\u7800\0\u7860\0\u78c0\0\u7920"+ + "\0\u7980\0\u79e0\0\u7a40\0\u7aa0\0\u7b00\0\u7b60\0\u7bc0\0\u7c20"+ + "\0\u7c80\0\u7ce0\0\u7d40\0\u7da0\0\u7e00\0\u7e60\0\u7ec0\0\u7f20"+ + "\0\u1e60\0\u7f80\0\u7fe0\0\u8040\0\u80a0\0\u8100\0\u8160\0\u81c0"+ + "\0\u8220\0\u8280\0\u82e0\0\u0cc0\0\u8340\0\u83a0\0\u8400\0\u8460"+ + "\0\u84c0\0\u0cc0\0\u8520\0\u8580\0\u85e0\0\u8640\0\u86a0\0\u8700"+ + "\0\u8760\0\u87c0\0\u8820\0\u8880\0\u0cc0\0\u88e0\0\u8940\0\u0cc0"+ + "\0\u89a0\0\u8a00\0\u8a60\0\u8ac0\0\u8b20\0\u8b80\0\u8be0\0\u8c40"+ + "\0\u8ca0\0\u8d00\0\u8d60\0\u8dc0\0\u8e20\0\u8e80\0\u8ee0\0\u0cc0"+ + "\0\u8f40\0\u8fa0\0\u9000\0\u0cc0\0\u9060\0\u90c0\0\u9120\0\u9180"+ + "\0\u91e0\0\u9240\0\u92a0\0\u9300\0\u9360\0\u93c0\0\u9420\0\u9480"+ + "\0\u94e0\0\u9540\0\u95a0\0\u9600\0\u9660\0\u96c0\0\u9720\0\u9780"+ + "\0\u97e0\0\u9840\0\u98a0\0\u9900\0\u9960\0\u99c0\0\u9a20\0\u9a80"+ + "\0\u9ae0\0\u9b40\0\u9ba0\0\u9c00\0\u9c60\0\u9cc0\0\u9d20\0\u9d80"+ + "\0\u9de0\0\u9e40\0\u9ea0\0\u9f00\0\u9f60\0\u9fc0\0\u0cc0\0\ua020"+ + "\0\ua020\0\ua080\0\ua0e0\0\ua020\0\ua140\0\ua1a0\0\ua200\0\ua260"+ + "\0\ua2c0\0\ua320\0\ua380\0\ua3e0\0\ua440\0\ua4a0\0\ua500\0\ua560"+ + "\0\ua5c0\0\ua620\0\ua680\0\ua6e0\0\ua740\0\ua7a0\0\ua800\0\ua860"+ + "\0\ua8c0\0\ua920\0\ua980\0\ua9e0\0\uaa40\0\uaaa0\0\uab00\0\uab60"+ + "\0\uabc0\0\uac20\0\uac80\0\uace0\0\uad40\0\uada0\0\uae00\0\uae60"+ + "\0\uaec0\0\uaf20\0\uaf80\0\uafe0\0\ub040\0\ub0a0\0\ub100\0\ub160"+ + "\0\ub1c0\0\ub220\0\ub280\0\ub2e0\0\ub340\0\ub3a0\0\u3540\0\ub400"+ + "\0\ub460\0\ub4c0\0\ub520\0\ub580\0\ub5e0\0\ub640\0\ub6a0\0\ub700"+ + "\0\ub760\0\ub7c0\0\ub820\0\ub880\0\ub8e0\0\ub940\0\ub9a0\0\uba00"+ + "\0\uba60\0\ubac0\0\ubb20\0\ubb80\0\ubbe0\0\ubc40\0\ubca0\0\ubd00"+ + "\0\ubd60\0\ubdc0\0\ube20\0\ube80\0\ubee0\0\ubf40\0\ubfa0\0\u0cc0"+ + "\0\u0cc0\0\uc000\0\uc060\0\uc0c0\0\uc120\0\u0cc0\0\uc180\0\uc1e0"+ + "\0\uc240\0\uc2a0\0\uc300\0\uc360\0\uc3c0\0\uc420\0\uc480\0\uc4e0"+ + "\0\uc540\0\uc5a0\0\uc600\0\uc660\0\uc6c0\0\uc720\0\u0cc0\0\uc780"+ + "\0\uc7e0\0\uc840\0\uc8a0\0\uc900\0\u4b60\0\u0cc0\0\u0cc0\0\u0cc0"+ + "\0\u0cc0\0\u4e00\0\uc960\0\uc9c0\0\u0cc0\0\uca20\0\u0cc0\0\uca80"+ + "\0\u0cc0\0\ucae0\0\ucb40\0\ucba0\0\ucc00\0\u1140\0\ucc60\0\uccc0"+ + "\0\ucd20\0\ucd80\0\ucde0\0\uce40\0\ucea0\0\ucf00\0\ucf60\0\ucfc0"+ + "\0\ud020\0\ud080\0\ud0e0\0\ud140\0\ud1a0\0\ud200\0\ud260\0\ud2c0"+ + "\0\ud320\0\ud380\0\ud3e0\0\ud440\0\ud4a0\0\ud500\0\ud560\0\ud5c0"+ + "\0\ud620\0\ud680\0\ud6e0\0\ud740\0\ud7a0\0\ud800\0\ud860\0\ud8c0"+ + "\0\ud920\0\ud980\0\ud9e0\0\uda40\0\udaa0\0\udb00\0\udb60\0\udbc0"+ + "\0\udc20\0\udc80\0\udce0\0\u5c40\0\udd40\0\udda0\0\ude00\0\ude60"+ + "\0\udec0\0\udf20\0\udf80\0\u1620\0\udfe0\0\ue040\0\ue0a0\0\ue100"+ + "\0\ue160\0\ue1c0\0\ue220\0\ue280\0\ue2e0\0\ue340\0\u0cc0\0\ue3a0"+ + "\0\ue400\0\ue460\0\ue4c0\0\ue520\0\ue580\0\ue5e0\0\ue640\0\u6ea0"+ + "\0\ue6a0\0\ue700\0\ue760\0\ue7c0\0\ue820\0\ue880\0\ue8e0\0\ue940"+ + "\0\ue9a0\0\uea00\0\uea60\0\ueac0\0\ueb20\0\ueb80\0\uebe0\0\uec40"+ + "\0\ueca0\0\ued00\0\ued60\0\uedc0\0\uee20\0\uee80\0\ueee0\0\uef40"+ + "\0\uefa0\0\uf000\0\u1e60\0\uf060\0\uf0c0\0\uf120\0\uf180\0\uf1e0"+ + "\0\uf240\0\uf2a0\0\uf300\0\uf360\0\uf3c0\0\uf420\0\uf480\0\uf4e0"+ + "\0\uf540\0\uf5a0\0\uf600\0\uf660\0\uf6c0\0\uf720\0\uf780\0\uf7e0"+ + "\0\uf840\0\uf8a0\0\uf900\0\uf960\0\uf9c0\0\ufa20\0\ufa80\0\ufae0"+ + "\0\ufb40\0\ufba0\0\ufc00\0\ufc60\0\ufcc0\0\ufd20\0\ufd80\0\ufde0"+ + "\0\ufe40\0\ufea0\0\uff00\0\uff60\0\uffc0\1\40\1\200\1\340"+ + "\1\u0140\1\u01a0\1\u0200\1\u0260\1\u02c0\1\u0320\1\u0380\1\u03e0"+ + "\1\u0440\1\u04a0\1\u0500\1\u0560\1\u05c0\1\u0620\1\u0680\1\u06e0"+ + "\1\u0740\1\u07a0\1\u0800\1\u0860\0\u0cc0\1\u08c0\1\u0920\1\u0980"+ + "\1\u09e0\1\u0a40\1\u0aa0\1\u0b00\1\u0b60\1\u0bc0\1\u0c20\0\ue460"+ + "\1\u0c80\1\u0ce0\1\u0d40\1\u0da0\0\u3540\1\u0e00\1\u0e60\1\u0ec0"+ + "\1\u0f20\1\u0f80\1\u0fe0\1\u1040\1\u10a0\1\u1100\1\u1160\1\u11c0"+ + "\1\u1220\1\u1280\1\u12e0\1\u1340\1\u13a0\1\u1400\1\u1460\1\u14c0"+ + "\1\u1520\1\u1580\1\u15e0\1\u1640\1\u16a0\1\u1700\1\u1760\1\u17c0"+ + "\1\u1820\1\u1880\1\u18e0\1\u1940\1\u19a0\1\u1a00\1\u1a60\1\u1ac0"+ + "\1\u1b20\1\u1b80\1\u1be0\1\u1c40\1\u1ca0\1\u1d00\1\u1d60\1\u1dc0"+ + "\1\u1e20\1\u1e80\1\u1ee0\1\u1f40\1\u1fa0\1\u2000\1\u2060\1\u20c0"+ + "\1\u2120\1\u2180\1\u21e0\1\u2240\0\ua020\1\u22a0\1\u2300\1\u2360"+ + "\1\u23c0\1\u2420\1\u2480\1\u24e0\1\u2540\1\u25a0\1\u2600\1\u2660"+ + "\1\u26c0\1\u2720\1\u2780\1\u27e0\1\u2840\1\u28a0\1\u2900\1\u2960"+ + "\1\u29c0\1\u2a20\1\u2a80\1\u2ae0\1\u2b40\1\u2ba0\1\u2c00\1\u2c60"+ + "\1\u2cc0\1\u2d20\1\u2d80\1\u2de0\1\u2e40\1\u2ea0\1\u2f00\1\u2f60"+ + "\1\u2fc0\1\u3020\1\u3080\1\u30e0\1\u3140\1\u31a0\1\u3200\1\u3260"+ + "\1\u32c0\1\u3320\1\u3380\1\u33e0\1\u3440\1\u34a0\1\u3500\1\u3560"+ + "\1\u35c0\1\u3620\1\u3680\1\u36e0\1\u3740\1\u37a0\1\u3800\1\u3860"+ + "\1\u38c0\1\u3920\1\u3980\1\u39e0\1\u3a40\1\u3aa0\1\u3b00\1\u3b60"+ + "\1\u3bc0\1\u3c20\1\u3c80\1\u3ce0\1\u3d40\1\u3da0\1\u3e00\1\u3e60"+ + "\1\u3ec0\1\u3f20\1\u3f80\1\u3fe0\1\u4040\1\u40a0\1\u4100\1\u4160"+ + "\1\u41c0\1\u4220\1\u4280\1\u42e0\1\u4340\1\u43a0\1\u4400\1\u4460"+ + "\1\u44c0\1\u4520\1\u4580\1\u45e0\1\u4640\1\u46a0\1\u4700\1\u4760"+ + "\1\u47c0\1\u4820\1\u4880\1\u48e0\1\u4940\1\u49a0\1\u4a00\1\u4a60"+ + "\1\u4ac0\1\u4b20\1\u4b80\1\u4be0\1\u4c40\1\u4ca0\1\u4d00\1\u4d60"+ + "\1\u4dc0\1\u4e20\1\u4e80\1\u4ee0\0\u0cc0\0\u0cc0\1\u4f40\1\u4fa0"+ + "\1\u5000\1\u5060\1\u50c0\1\u5120\1\u5180\1\u51e0\1\u5240\1\u52a0"+ + "\1\u5300\1\u5360\1\u53c0\1\u5420\1\u5480\1\u54e0\1\u5540\1\u55a0"+ + "\1\u5600\1\u5660\1\u56c0\1\u5720\0\u5d60\1\u5780\1\u57e0\1\u5840"+ + "\1\u58a0\1\u5900\1\u5960\1\u59c0\1\u5a20\0\ud620\1\u5a80\1\u5ae0"+ + "\1\u5b40\1\u5ba0\1\u5c00\1\u5c60\1\u5cc0\0\u0cc0\1\u5d20\1\u5d80"+ + "\1\u5de0\1\u5e40\0\u1e60\1\u5ea0\1\u5f00\1\u5f60\1\u5fc0\1\u6020"+ + "\1\u6080\1\u60e0\1\u6140\1\u61a0\0\u1e60\0\u1e60\1\u6200\1\u6260"+ + "\1\u62c0\0\u1e60\1\u6320\1\u6380\1\u63e0\1\u6440\1\u64a0\1\u6500"+ + "\1\u6560\1\u65c0\1\u6620\1\u6680\1\u66e0\1\u6740\1\u67a0\1\u6800"+ + "\1\u6860\1\u68c0\1\u6920\1\u6980\1\u69e0\0\u83a0\0\u0cc0\1\u6a40"+ + "\1\u6aa0\1\u6b00\1\u6b60\1\u6bc0\1\u6c20\1\u6c80\1\u6ce0\0\u0cc0"+ + "\1\u6d40\1\u6da0\1\u6e00\1\u6e60\1\u6ec0\1\u6f20\1\u6f80\1\u6fe0"+ + "\1\u7040\0\u0cc0\1\u70a0\1\u7100\1\u7160\1\u71c0\1\u7220\1\u7280"+ + "\1\u72e0\1\u7340\1\u73a0\1\u7400\1\u7460\1\u74c0\1\u7520\1\u7580"+ + "\1\u75e0\1\u7640\1\u76a0\1\u7700\1\u7760\1\u77c0\1\u7820\1\u7880"+ + "\1\u78e0\1\u7940\1\u79a0\1\u7a00\1\u7a60\1\u7ac0\1\u7b20\1\u7b80"+ + "\1\u7be0\1\u7c40\1\u7ca0\1\u7d00\1\u7d60\1\u7dc0\1\u7e20\1\u7e80"+ + "\1\u7ee0\1\u7f40\1\u7fa0\1\u8000\1\u8060\1\u80c0\1\u8120\1\u8180"+ + "\1\u81e0\1\u8240\1\u82a0\1\u8300\1\u8360\1\u83c0\1\u8420\1\u8480"+ + "\1\u84e0\1\u8540\1\u85a0\1\u8600\1\u8660\1\u86c0\1\u8720\1\u8780"+ + "\1\u87e0\1\u8840\1\u88a0\1\u8900\1\u8960\1\u89c0\1\u8a20\1\u8a80"+ + "\1\u8ae0\1\u8b40\1\u8ba0\1\u8c00\1\u8c60\1\u8cc0\1\u8d20\1\u8d80"+ + "\1\u8de0\1\u8e40\1\u8ea0\1\u8f00\1\u8f60\1\u8fc0\1\u9020\1\u9080"+ + "\1\u90e0\1\u9140\1\u2300\1\u91a0\1\u9200\1\u9260\1\u92c0\1\u9320"+ + "\1\u9380\1\u93e0\1\u9440\0\u3540\1\u94a0\1\u9500\1\u9560\1\u95c0"+ + "\1\u9620\1\u9680\1\u96e0\1\u9740\1\u97a0\1\u9800\1\u9860\1\u98c0"+ + "\1\u9920\0\u3540\1\u9980\1\u99e0\1\u9a40\1\u9aa0\1\u9b00\1\u9b60"+ + "\1\u9bc0\1\u9c20\1\u9c80\1\u9ce0\1\u9d40\1\u9da0\1\u9e00\1\u9e60"+ + "\1\u9ec0\1\u9f20\1\u9f80\1\u9fe0\1\ua040\1\ua0a0\1\ua100\1\ua160"+ + "\1\ua1c0\1\ua220\1\ua280\1\ua2e0\1\ua340\1\ua3a0\1\ua400\1\ua460"+ + "\1\ua4c0\1\ua520\1\ua580\1\ua5e0\1\ua640\1\ua6a0\1\ua700\1\ua760"+ + "\1\ua7c0\1\ua820\1\ua880\1\ua8e0\1\ua940\1\ua9a0\1\uaa00\1\uaa60"+ + "\1\uaac0\1\uab20\1\uab80\1\uabe0\1\uac40\1\uaca0\1\uad00\1\uad60"+ + "\1\uadc0\1\uae20\0\u4380\1\uae80\1\uaee0\1\uaf40\1\uafa0\1\ub000"+ + "\1\ub060\1\ub0c0\1\ub120\1\ub180\1\ub1e0\1\ub240\1\ub2a0\1\ub300"+ + "\1\ub360\1\ub3c0\1\ub420\1\ub480\1\ub4e0\1\ub540\1\ub5a0\1\ub600"+ + "\1\ub660\1\u5000\1\ub6c0\1\ub720\1\ub780\1\ub7e0\1\ub840\1\ub8a0"+ + "\1\ub900\1\ub960\1\ub9c0\1\uba20\1\uba80\1\uba80\1\ubae0\1\ubb40"+ + "\1\ubba0\1\ubc00\1\ubc60\1\ubcc0\1\ubd20\1\ubd80\1\ubde0\1\ube40"+ + "\1\ubea0\1\ubf00\1\ubf60\1\ubfc0\0\ue9a0\1\uc020\1\uc080\1\uc0e0"+ + "\1\uc140\1\uc1a0\1\uc200\1\uc260\1\uc2c0\1\uc320\1\uc380\1\uc3e0"+ + "\1\uc440\1\uc4a0\1\uc500\1\uc560\1\uc5c0\1\uc620\1\uc680\1\uc6e0"+ + "\1\uc740\1\u6b60\1\uc7a0\1\uc800\1\u6ce0\1\uc860\1\uc8c0\1\uc920"+ + "\1\uc980\1\uc9e0\1\uca40\1\ucaa0\1\ucb00\1\ucb60\1\ucbc0\1\ucc20"+ + "\1\ucc80\1\ucce0\1\ucd40\1\ucda0\1\uce00\1\uce60\1\ucec0\1\u7400"+ + "\1\ucf20\1\ucf80\1\ucfe0\1\ud040\1\ud0a0\1\ud100\1\ud160\1\ud1c0"+ + "\1\ud220\1\ud280\1\ud2e0\1\ud340\1\ud3a0\1\ud400\1\ud460\1\ud4c0"+ + "\1\ud520\1\ud580\1\ud5e0\1\ud640\1\ud6a0\1\ud700\1\ud760\1\ud7c0"+ + "\1\ud820\1\ud880\1\ud8e0\1\ud940\1\ud9a0\1\uda00\1\uda60\1\udac0"+ + "\1\udb20\1\udb80\1\udbe0\1\udc40\1\udca0\1\udd00\1\udd60\1\uddc0"+ + "\1\ude20\1\ude80\1\udee0\1\udf40\1\udfa0\1\ue000\1\ue060\1\ue0c0"+ + "\1\ue120\1\ue180\1\ue1e0\1\ue240\1\ue2a0\1\ue300\1\ue360\1\ue3c0"+ + "\1\ue420\1\ue480\1\ue4e0\1\ue540\1\ue5a0\1\ue600\1\ue660\1\ue6c0"+ + "\1\ue720\1\ue780\1\ue7e0\1\ue840\1\ue8a0\1\ue900\1\ue960\1\ue9c0"+ + "\1\uea20\1\uea80\1\ueae0\1\ueb40\1\ueba0\1\uec00\1\uec60\1\uecc0"+ + "\1\ued20\1\ued80\1\uede0\1\uee40\1\ueea0\1\uef00\1\uef60\1\uefc0"+ + "\1\u2780\1\uf020\1\uf080\1\uf0e0\1\uf140\1\uf1a0\1\uf200\1\uf260"+ + "\1\uf2c0\1\uf320\1\uf380\1\uf3e0\1\uf440\1\uf4a0\1\uf500\1\uf560"+ + "\1\uf5c0\1\uf620\1\uf680\1\uf6e0\1\uf740\1\uf7a0\1\uf800\1\uf860"+ + "\1\uf8c0\1\uf920\1\uf980\1\uf9e0\1\ufa40\1\ufaa0\1\ufb00\1\ufb60"+ + "\1\ufbc0\1\ufc20\1\ufc80\1\ufce0\1\ufd40\1\ufda0\1\ufe00\1\ufe60"+ + "\1\ufec0\1\uff20\1\uff80\1\uffe0\2\100\2\240\2\u0100\2\u0160"+ + "\2\u01c0\2\u0220\2\u0280\2\u02e0\2\u0340\2\u03a0\2\u0400\2\u0460"+ + "\2\u04c0\2\u0520\2\u0580\2\u05e0\2\u0640\2\u06a0\2\u0700\2\u0760"+ + "\2\u07c0\2\u0820\2\u0880\2\u08e0\2\u0940\2\u09a0\2\u0a00\2\u0a60"+ + "\2\u0ac0\2\u0b20\2\u0b80\2\u0be0\2\u0c40\2\u0ca0\2\u0d00\2\u0d60"+ + "\0\u4ec0\2\u0dc0\2\u0e20\2\u0e80\2\u0ee0\2\u0f40\2\u0fa0\2\u1000"+ + "\2\u1060\2\u10c0\2\u1120\2\u1180\2\u11e0\2\u1240\0\u1e60\2\u12a0"+ + "\2\u1300\2\u1360\2\u13c0\2\u1420\2\u1480\2\u14e0\2\u1540\2\u15a0"+ + "\2\u1600\2\u1660\2\u16c0\2\u1720\2\u1780\2\u17e0\2\u1840\2\u18a0"+ + "\2\u1900\2\u1960\2\u19c0\2\u1a20\2\u1a80\2\u1ae0\2\u1b40\2\u1ba0"+ + "\2\u1c00\2\u1c60\2\u1cc0\2\u1d20\2\u1d80\2\u1de0\2\u1e40\2\u1ea0"+ + "\2\u1f00\2\u1f60\2\u1fc0\2\u2020\2\u2080\2\u20e0\2\u2140\2\u21a0"+ + "\2\u2200\2\u2260\2\u22c0\2\u2320\2\u2380\2\u23e0\2\u2440\2\u24a0"+ + "\2\u2500\2\u2560\2\u25c0\2\u2620\2\u2680\2\u26e0\2\u2740\2\u27a0"+ + "\2\u2800\2\u2860\2\u28c0\2\u2920\2\u2980\2\u29e0\2\u2a40\2\u2aa0"+ + "\2\u2b00\2\u2b60\2\u2bc0\2\u2c20\2\u2c80\2\u2ce0\2\u2d40\2\u2da0"+ + "\2\u2e00\2\u2e60\2\u2ec0\2\u2f20\2\u2f80\2\u2fe0\2\u3040\2\u30a0"+ + "\2\u3100\2\u3160\2\u31c0\2\u3220\2\u3280\2\u32e0\2\u3340\2\u33a0"+ + "\2\u3400\2\u3460\2\u34c0\2\u3520\2\u3580\2\u35e0\2\u3640\2\u36a0"+ + "\2\u3700\2\u3760\2\u37c0\2\u3820\2\u3880\2\u38e0\2\u3940\2\u39a0"+ + "\2\u3a00\2\u3a60\2\u3ac0\2\u3b20\2\u3b80\2\u3be0\2\u3c40\2\u3ca0"+ + "\0\u3540\2\u3d00\2\u3d60\2\u3dc0\2\u3e20\2\u3e80\2\u3ee0\2\u3f40"+ + "\2\u3fa0\2\u4000\2\u4060\2\u40c0\2\u4120\2\u4180\2\u41e0\2\u4240"+ + "\2\u42a0\2\u4300\2\u4360\2\u43c0\2\u4420\2\u4480\2\u44e0\2\u4540"+ + "\2\u45a0\2\u4600\2\u4660\2\u46c0\2\u4720\2\u4780\2\u47e0\2\u4840"+ + "\2\u48a0\2\u4900\2\u4960\2\u49c0\2\u4a20\2\u4a80\2\u4ae0\2\u4b40"+ + "\2\u4ba0\2\u4c00\2\u4c60\2\u4cc0\2\u4d20\2\u4d80\2\u4de0\2\u4e40"+ + "\2\u4ea0\2\u4f00\2\u4f60\2\u4fc0\2\u5020\2\u5080\2\u50e0\2\u5140"+ + "\2\u51a0\2\u5200\2\u5260\2\u52c0\2\u5320\2\u5380\2\u53e0\2\u5440"+ + "\2\u54a0\0\u4ec0\2\u5500\2\u5560\2\u55c0\2\u5620\2\u5680\2\u56e0"+ + "\2\u5740\2\u57a0\2\u5800\2\u5860\2\u58c0\2\u5920\2\u5980\2\u59e0"+ + "\2\u5a40\2\u5aa0\2\u5b00\2\u5b60\2\u5bc0\2\u5c20\2\u5c80\2\u5ce0"+ + "\2\u5d40\2\u5da0\2\u5e00\2\u5e60\2\u5ec0\2\u5f20\2\u5f80\2\u5fe0"+ + "\2\u6040\2\u60a0\2\u6100\2\u6160\2\u61c0\2\u6220\2\u6280\2\u62e0"+ + "\2\u6340\2\u63a0\2\u6400\2\u6460\2\u64c0\2\u6520\2\u6580\2\u65e0"+ + "\2\u6640\2\u66a0\2\u6700\2\u6760\2\u67c0\2\u6820\2\u6880\2\u68e0"+ + "\2\u6940\2\u69a0\2\u6a00\2\u6a60\2\u6ac0\2\u6b20\2\u6b80\2\u6be0"+ + "\2\u6c40\2\u6ca0\2\u6d00\2\u6d60\2\u6dc0\2\u6e20\2\u6e80\2\u6ee0"+ + "\2\u6f40\2\u6fa0\2\u7000\2\u7060\2\u70c0\2\u7120\2\u7180\2\u71e0"+ + "\2\u7240\2\u72a0\2\u7300\2\u7360\2\u73c0\2\u7420\2\u7480\2\u74e0"+ + "\2\u7540\2\u75a0\2\u7600\2\u7660\2\u76c0\2\u7720\2\u7780\2\u77e0"+ + "\2\u7840\2\u78a0\2\u7900\2\u7960\2\u79c0\2\u7a20\2\u7a80\2\u7ae0"+ + "\2\u7b40\2\u7ba0\2\u7c00\2\u7c60\2\u7cc0\2\u7d20\2\u7d80\2\u7de0"+ + "\2\u7e40\2\u7ea0\2\u7f00\2\u7f60\2\u7fc0\2\u8020\2\u8080\2\u80e0"+ + "\2\u8140\2\u81a0\2\u8200\2\u8260\2\u82c0\2\u8320\2\u8380\2\u83e0"+ + "\2\u8440\2\u84a0\2\u8500\2\u8560\2\u85c0\2\u8620\2\u8680\2\u86e0"+ + "\2\u8740\2\u87a0\2\u8800\2\u8860\2\u88c0\2\u8920\2\u4a20\2\u8980"+ + "\2\u89e0\2\u8a40\2\u8aa0\2\u8b00\2\u8b60\2\u8bc0\2\u8c20\2\u8c80"+ + "\2\u8ce0\2\u8d40\2\u8da0\2\u8e00\2\u8e60\2\u8ec0\2\u8f20\2\u8f80"+ + "\2\u8fe0\2\u9040\2\u90a0\2\u9100\2\u9160\2\u91c0\2\u9220\2\u9280"+ + "\2\u92e0\2\u9340\2\u93a0\2\u9400\2\u9460\2\u94c0\2\u9520\2\u9580"+ + "\2\u95e0\2\u9640\2\u96a0\2\u9700\2\u9760\2\u97c0\2\u9820\2\u9880"+ + "\2\u98e0\2\u9940\2\u99a0\2\u9a00\2\u9a60\2\u9ac0\2\u9b20\2\u9b80"+ + "\2\u9be0\2\u9c40\2\u9ca0\2\u9d00\2\u9d60\2\u9dc0\2\u9e20\2\u9e80"+ + "\2\u9ee0\2\u9f40\2\u9fa0\2\ua000\2\ua060\2\ua0c0\2\ua120\2\ua180"+ + "\2\ua1e0\2\ua240\2\ua2a0\2\ua300\2\ua360\2\ua3c0\2\ua420\2\ua480"+ + "\2\ua4e0\2\ua540\2\ua5a0\2\ua600\2\ua660\2\ua6c0\2\ua720\2\ua780"+ + "\2\ua7e0\2\ua840\2\ua8a0\2\ua900\2\ua960\2\ua9c0\2\uaa20\2\uaa80"+ + "\2\uaae0\2\uab40\2\uaba0\2\uac00\2\uac60\2\uacc0\2\uad20\2\uad80"+ + "\2\uade0\2\uae40\2\uaea0\2\uaf00\2\uaf60\2\uafc0\2\ub020\2\ub080"+ + "\2\ub0e0\2\ub140\2\ub1a0\2\ub200\2\ub260\2\ub2c0\2\ub320\2\ub380"+ + "\2\ub3e0\2\ub440\2\ub4a0\2\ub500\2\ub560\2\ub5c0\2\ub620\2\ub680"+ + "\2\ub6e0\2\ub740\2\ub7a0\2\ub800\2\ub860\2\ub8c0\2\ub920\2\ub980"+ + "\2\ub9e0\2\uba40\2\ubaa0\2\ubb00\2\ubb60\2\ubbc0\2\ubc20\2\ubc80"+ + "\2\ubce0\2\ubd40\2\ubda0\2\ube00\2\ube60\2\ubec0\2\ubf20\2\ubf80"+ + "\2\ubfe0\2\uc040\2\uc0a0\2\uc100\2\uc160\2\uc1c0\2\uc220\2\uc280"+ + "\0\u0cc0\2\uc2e0\2\uc340\2\uc3a0\2\uc400\2\uc460\0\u0cc0\2\uc4c0"+ + "\0\u0cc0\0\u0cc0\2\uc520\2\uc580\2\uc5e0\2\uc640\2\uc6a0\2\uc700"+ + "\2\uc760\2\uc7c0\2\uc820\2\uc880\2\uc8e0\2\uc940\2\uc9a0\2\uca00"+ + "\2\uca60\2\ucac0\2\ucb20\2\ucb80\2\ucbe0\2\ucc40\2\ucca0\2\ucd00"+ + "\2\ucd60\2\ucdc0\2\uce20\2\uce80\2\ucee0\2\ucf40\2\ucfa0\2\ud000"+ + "\2\ud060\2\ud0c0\2\ud120\2\ud180\2\ud1e0\2\ud240\2\ud2a0\2\ud300"+ + "\2\ud360\2\ud3c0\2\ud420\2\ud480\2\ud4e0\2\ud540\2\ud5a0\2\ud600"+ + "\2\ud660\2\ud6c0\2\ud720\2\ud780\2\ud7e0\2\ud840\2\ud8a0\2\ud900"+ + "\2\ud960\2\ud9c0\2\uda20\2\uda80\2\udae0\2\udb40\2\udba0\2\udc00"+ + "\2\udc60\2\udcc0\2\udd20\2\udd80\2\udde0\2\ude40\2\udea0\2\udf00"+ + "\2\udf60\2\udfc0\2\ue020\2\ue080\2\ue0e0\2\ue140\2\ue1a0\2\ue200"+ + "\2\ue260\2\ue2c0\2\ue320\2\ue380\2\ue3e0\2\ue440\2\ue4a0\2\ue500"+ + "\2\ue560\2\ue5c0\2\ue380\2\ue620\2\ue680\2\ue6e0\2\ue740\2\ue7a0"+ + "\2\ue800\2\ue860\2\ue8c0\2\ue920\2\ue980\2\ue9e0\2\uea40\2\ueaa0"+ + "\2\ueb00\2\ueb60\2\uebc0\0\u0cc0\2\uec20\2\uec80\2\uece0\2\ued40"+ + "\2\ueda0\2\uee00\2\uee60\2\ueec0\2\uef20\2\uef80\2\uefe0\2\uf040"+ + "\2\uf0a0\2\uf100\2\uf160\2\uf1c0\2\uf220\2\uf280\2\uf2e0\2\uf340"+ + "\2\uf3a0\2\uf400\2\uf460\2\uf4c0\2\uf520\2\uf580\2\uf5e0\2\uf640"+ + "\2\uf6a0\2\uf700\2\uf760\2\ud780\2\uf7c0\2\uf820\2\uf880\2\uf8e0"+ + "\2\uf940\2\uf9a0\2\ufa00\2\ufa60\2\ufac0\2\ufb20\2\ufb80\2\ufbe0"+ + "\2\ufc40\2\ufca0\2\ufd00\2\ufd60\2\ufdc0\2\ufe20\2\ufe80\2\ufee0"+ + "\2\uff40\2\uffa0\3\0\3\140\3\300\3\u0120\3\u0180\3\u01e0"+ + "\3\u0240\3\u02a0\3\u0300\3\u0360\3\u03c0\3\u0420\3\u0480\3\u04e0"+ + "\3\u0540\3\u05a0\3\u0600\3\u0660\3\u06c0\3\u0720\3\u0780\3\u07e0"+ + "\3\u0840\3\u08a0\3\u0900\3\u0960\3\u09c0\3\u0a20\3\u0a80\3\u0ae0"+ + "\3\u0b40\3\u0ba0\3\u0c00\3\u0c60\3\u0cc0\3\u0d20\3\u0d80\3\u0de0"+ + "\3\u0e40\3\u0ea0\3\u0f00\3\u0f60\3\u0fc0\3\u1020\3\u1080\3\u10e0"+ + "\3\u1140\3\u11a0\3\u1200\3\u1260\3\u12c0\3\u1320\3\u1380\3\u13e0"+ + "\3\u1440\3\u14a0\0\u0cc0\3\u1500\3\u1560\3\u15c0\3\u1620\3\u1680"+ + "\3\u16e0\3\u1740\3\u17a0\3\u1800\3\u1860\3\u18c0\3\u1920\3\u1980"+ + "\3\u19e0\3\u1a40\3\u1aa0\3\u1b00\3\u1b60\3\u1bc0\3\u1c20\3\u1c80"+ + "\3\u1ce0\3\u1d40\3\u1da0\3\u1e00\3\u1e60\3\u1ec0\3\u1f20\3\u1f80"+ + "\3\u1fe0\3\u2040\3\u20a0\3\u2100\3\u2160\3\u21c0\3\u2220\3\u2280"+ + "\3\u22e0\3\u2340\3\u23a0\3\u2400\3\u2460\3\u24c0\3\u2520\3\u2580"+ + "\3\u25e0\3\u2640\3\u26a0\3\u2700\3\u2760\3\u27c0\3\u2820\3\u2880"+ + "\3\u28e0\3\u2940\3\u29a0\3\u2a00\3\u2a60\3\u2ac0\3\u2b20\3\u2b80"+ + "\3\u2be0\3\u2c40\3\u2ca0\3\u2d00\3\u2d60\3\u2dc0\3\u2e20\3\u2e80"+ + "\3\u2ee0\3\u2f40\3\u2fa0\3\u3000\3\u3060\3\u30c0\2\u9940\3\u3120"+ + "\3\u3180\3\u31e0\3\u3240\3\u32a0\3\u3300\3\u3360\3\u33c0\3\u3420"+ + "\3\u3480\3\u34e0\3\u3540\3\u35a0\3\u3600\3\u3660\3\u36c0\3\u3720"+ + "\3\u3780\3\u37e0\3\u3840\3\u38a0\3\u3900\3\u3960\3\u39c0\3\u3a20"+ + "\3\u3a80\3\u3ae0\3\u3b40\3\u3ba0\3\u3c00\3\u3c60\3\u3cc0\3\u3d20"+ + "\3\u3d80\3\u3de0\3\u3e40\3\u3ea0\3\u3f00\3\u3f60\3\u3fc0\3\u4020"+ + "\3\u4080\3\u40e0\3\u4140\3\u41a0\3\u4200\3\u4260\3\u42c0\3\u4320"+ + "\3\u4380\3\u43e0\3\u4440\3\u44a0\3\u4500\3\u4560\3\u45c0\3\u4620"+ + "\3\u4680\3\u46e0\3\u4740\3\u47a0\3\u4800\3\u4860\3\u48c0\3\u4920"+ + "\3\u4980\3\u49e0\3\u4a40\3\u4aa0\3\u4b00\3\u4b60\3\u4bc0\3\u4c20"+ + "\3\u4c80\3\u4ce0\3\u4d40\3\u4da0\3\u4e00\3\u4e60\3\u4ec0\3\u4f20"+ + "\3\u4f80\3\u4fe0\3\u5040\3\u50a0\3\u5100\3\u5160\3\u51c0\3\u5220"+ + "\3\u5280\3\u52e0\3\u5340\3\u53a0\3\u5400\3\u5460\3\u54c0\3\u5520"+ + "\3\u5580\3\u55e0\3\u5640\3\u56a0\3\u5700\3\u5760\3\u57c0\3\u5820"+ + "\3\u5880\3\u58e0\3\u5940\3\u59a0\3\u5a00\3\u5a60\3\u5ac0\3\u5b20"+ + "\3\u5b80\3\u5be0\3\u5c40\3\u5ca0\3\u5d00\3\u5d60\3\u5dc0\3\u5e20"+ + "\3\u5e80\3\u5ee0\3\u5f40\3\u5fa0\3\u6000\3\u6060\3\u60c0\3\u6120"+ + "\3\u6180\3\u61e0\3\u6240\3\u62a0\3\u6300\3\u6360\3\u63c0\3\u6420"+ + "\3\u6480\3\u64e0\3\u6540\3\u65a0\3\u6600\3\u6660\3\u66c0\3\u6720"+ + "\3\u6780\3\u67e0\3\u6840\3\u68a0\3\u6900\3\u6960\3\u69c0\3\u6a20"+ + "\3\u6a80\3\u6ae0\3\u6b40\3\u6ba0\3\u6c00\3\u6c60\3\u6cc0\3\u6d20"+ + "\3\u6d80\3\u6de0\3\u6e40\3\u6ea0\3\u6f00\3\u6f60\3\u6fc0\3\u7020"+ + "\3\u7080\3\u70e0\3\u7140\3\u71a0\3\u7200\3\u7260\3\u72c0\3\u7320"+ + "\3\u7380\3\u73e0\3\u7440\3\u74a0\3\u7500\3\u7560\3\u75c0\3\u7620"+ + "\3\u7680\3\u76e0\3\u7740\3\u77a0\3\u7800\3\u7860\3\u78c0\3\u7920"+ + "\3\u7980\3\u79e0\3\u7a40\3\u7aa0\3\u7b00\3\u7b60\3\u7bc0\3\u7c20"+ + "\3\u7c80\3\u7ce0\3\u7d40\3\u7da0\3\u7e00\3\u7e60\3\u7ec0\3\u7f20"+ + "\3\u7f80\3\u7fe0\3\u8040\3\u80a0\3\u8100\3\u8160\3\u81c0\3\u8220"+ + "\3\u8280\3\u82e0\3\u8340\3\u83a0\3\u8400\3\u8460\3\u84c0\3\u8520"+ + "\3\u8580\3\u85e0\3\u8640\3\u86a0\3\u8700\3\u8760\3\u87c0\3\u8820"+ + "\3\u8880\3\u88e0\3\u8940\3\u89a0\3\u8a00\3\u8a60\3\u8ac0\3\u8b20"+ + "\3\u8b80\3\u8be0\3\u8c40\3\u8ca0\3\u8d00\3\u8d60\3\u8dc0\3\u8e20"+ + "\3\u8e80\3\u8ee0\3\u8f40\3\u8fa0\3\u9000\3\u9060\3\u90c0\3\u9120"+ + "\3\u9180\3\u91e0\3\u9240\3\u92a0\3\u9300\3\u9360\3\u93c0\3\u9420"+ + "\3\u9480\3\u94e0\3\u9540\3\u95a0\3\u9600\3\u9660\3\u96c0\3\u9720"+ + "\3\u9780\3\u97e0\3\u9840\3\u98a0\3\u9900\3\u9960\3\u99c0\3\u9a20"+ + "\3\u9a80\3\u9ae0\3\u9b40\3\u9ba0\3\u9c00\3\u9c60\3\u9cc0\3\u9d20"+ + "\3\u9d80\3\u9de0\3\u9e40\3\u9ea0\3\u9f00\3\u9f60\3\u9fc0\3\ua020"+ + "\3\ua080\3\ua0e0\3\ua140\3\ua1a0\3\ua200\3\ua260\3\ua2c0\3\ua320"+ + "\3\ua380\3\ua3e0\3\ua440\3\ua4a0\3\ua500\3\ua560\3\ua5c0\3\ua620"+ + "\3\ua680\3\ua6e0\3\ua740\3\ua7a0\3\ua800\3\ua860\3\ua8c0\3\ua920"+ + "\3\ua980\3\ua9e0\3\uaa40\3\uaaa0\3\uab00\3\uab60\3\uabc0\3\uac20"+ + "\3\uac80\3\uace0\3\uad40\3\uada0\3\uae00\3\uae60\3\uaec0\3\uaf20"+ + "\3\uaf80\3\uafe0\3\ub040\3\ub0a0\3\ub100\3\ub160\3\ub1c0\3\ub220"+ + "\3\ub280\3\ub2e0\3\ub340\3\ub3a0\3\ub400\3\ub460\3\ub4c0\3\ub520"+ + "\3\ub580\3\ub5e0\3\ub640\3\ub6a0\3\ub700\3\ub760\3\ub7c0\3\ub820"+ + "\3\ub880\3\ub8e0\3\ub940\3\ub9a0\3\uba00\3\uba60\3\ubac0\3\ubb20"+ + "\3\ubb80\3\ubbe0\3\ubc40\3\ubca0\3\ubd00\3\ubd60\3\ubdc0\3\ube20"+ + "\3\ube80\3\ubee0\3\ubf40\3\ubfa0\3\uc000\3\uc060\3\uc0c0"; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } + private static int [] zzUnpackRowMap() { + int [] result = new int[2711]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public boolean getCompleteCloseTags() { - return completeCloseTags; - } + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = COMMENT; - start = text.offset; - break; - case Token.PREPROCESSOR: - state = PI; - start = text.offset; - break; - case Token.VARIABLE: - state = DTD; - start = text.offset; - break; - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - case INTERNAL_INTAG_SCRIPT: - state = INTAG_SCRIPT; - start = text.offset; - break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = INATTR_DOUBLE; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = INATTR_SINGLE; - start = text.offset; - break; - case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: - state = INATTR_DOUBLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: - state = INATTR_SINGLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_IN_HIDDEN_COMMENT: - state = HIDDEN_COMMENT; - start = text.offset; - break; - case INTERNAL_IN_JAVA_DOCCOMMENT: - state = JAVA_DOCCOMMENT; - start = text.offset; - break; - case INTERNAL_IN_JAVA_EXPRESSION: - state = JAVA_EXPRESSION; - start = text.offset; - break; - case INTERNAL_IN_JAVA_MLC: - state = JAVA_MLC; - start = text.offset; - break; - case INTERNAL_IN_JSP_DIRECTIVE: - state = JSP_DIRECTIVE; - start = text.offset; - break; - case INTERNAL_IN_JS: - state = JAVASCRIPT; - start = text.offset; - break; - case INTERNAL_IN_JS_MLC: - state = JS_MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } + private static final String ZZ_TRANS_PACKED_0 = + "\1\41\1\42\1\43\1\44\1\45\1\46\132\41\2\47"+ + "\1\50\33\47\1\51\5\47\1\52\33\47\1\53\7\47"+ + "\1\54\27\47\2\55\1\56\64\55\1\57\50\55\2\60"+ + "\1\61\16\60\1\62\116\60\2\63\1\0\1\64\1\65"+ + "\2\63\1\66\1\67\1\70\1\71\6\63\1\72\116\63"+ + "\2\73\1\0\1\73\1\74\2\73\4\74\1\75\1\76"+ + "\1\77\1\100\1\101\1\102\1\74\1\73\1\103\1\104"+ + "\6\73\1\105\4\73\1\106\1\77\1\102\1\107\1\110"+ + "\5\73\2\111\1\73\1\110\2\73\1\104\1\105\1\103"+ + "\1\75\11\73\1\112\1\73\1\76\1\113\1\114\1\100"+ + "\1\73\1\101\1\73\1\115\1\114\1\73\1\116\1\117"+ + "\4\73\1\112\1\107\1\115\1\106\1\73\1\117\1\120"+ + "\1\116\1\113\3\73\1\120\4\73\3\121\1\122\4\121"+ + "\1\123\127\121\3\124\1\122\5\124\1\123\126\124\1\63"+ + "\1\125\1\0\1\64\1\45\2\63\1\66\1\126\1\127"+ + "\1\130\6\63\1\131\116\63\3\121\1\122\4\121\1\132"+ + "\127\121\3\124\1\122\5\124\1\132\126\124\2\63\1\0"+ + "\1\63\1\65\2\63\1\66\1\133\1\134\1\130\6\63"+ + "\1\135\116\63\10\136\1\137\127\136\11\140\1\137\126\140"+ + "\1\141\1\45\1\142\1\143\1\45\1\144\1\145\1\146"+ + "\1\147\1\150\1\151\3\152\1\153\2\152\1\154\3\152"+ + "\2\146\1\152\1\155\1\156\1\155\1\152\1\155\1\152"+ + "\1\157\1\141\1\160\1\161\1\162\1\163\1\164\1\155"+ + "\1\165\1\141\1\152\1\146\1\152\1\166\2\152\1\167"+ + "\1\170\1\171\1\172\1\173\1\174\1\175\1\145\1\146"+ + "\3\66\1\176\1\177\1\141\2\152\1\200\1\152\1\201"+ + "\1\202\1\203\1\204\3\152\1\205\1\206\1\152\4\175"+ + "\1\152\1\207\7\152\1\155\5\152\2\155\2\210\1\211"+ + "\5\210\1\212\26\210\1\213\100\210\2\214\1\215\6\214"+ + "\1\216\25\214\1\217\100\214\2\220\1\221\1\222\40\220"+ + "\1\223\4\220\1\224\26\220\1\225\7\220\1\226\27\220"+ + "\2\227\1\230\1\231\40\227\1\232\33\227\1\233\7\227"+ + "\1\234\27\227\2\47\1\235\33\47\1\236\5\47\1\52"+ + "\33\47\1\53\7\47\1\54\27\47\2\237\1\240\1\241"+ + "\40\237\1\242\4\237\1\243\22\237\1\244\3\237\1\245"+ + "\7\237\1\246\4\237\1\247\22\237\1\250\1\45\1\251"+ + "\1\252\1\45\1\144\1\145\1\146\1\253\1\254\1\255"+ + "\1\256\1\257\1\260\1\261\1\262\1\263\1\154\1\264"+ + "\1\265\1\266\1\267\1\146\1\264\1\270\1\271\1\270"+ + "\1\272\1\270\1\264\1\157\1\250\1\264\1\273\1\274"+ + "\1\275\1\276\1\270\1\165\1\250\1\264\1\146\1\277"+ + "\1\300\1\264\1\301\1\167\1\170\1\302\1\303\1\304"+ + "\1\305\1\175\1\145\1\146\3\66\1\176\1\250\1\306"+ + "\2\264\1\307\1\264\1\310\1\311\1\312\1\313\2\264"+ + "\1\314\1\315\1\316\1\264\4\175\1\317\1\320\1\321"+ + "\1\322\1\323\1\264\1\324\1\325\1\326\1\270\4\264"+ + "\1\327\2\270\2\330\1\331\41\330\1\223\4\330\1\332"+ + "\26\330\1\225\7\330\1\226\27\330\1\333\1\334\1\0"+ + "\1\333\1\45\2\333\1\66\1\335\1\336\1\337\6\333"+ + "\1\340\3\333\1\341\14\333\1\342\37\333\1\343\1\333"+ + "\1\344\33\333\1\345\1\65\1\346\1\347\1\65\1\345"+ + "\1\175\1\66\1\350\1\351\1\352\6\353\1\66\3\353"+ + "\2\345\1\353\3\345\1\353\1\345\2\353\1\345\5\353"+ + "\2\345\1\354\1\66\5\353\1\66\5\353\1\345\1\145"+ + "\1\66\1\345\1\355\2\66\1\345\1\356\16\353\2\175"+ + "\1\357\1\175\11\353\1\345\5\353\2\345\1\360\1\65"+ + "\1\361\1\362\1\65\5\360\1\363\6\364\1\360\3\364"+ + "\2\360\1\364\3\360\1\364\1\360\2\364\1\360\5\364"+ + "\4\360\1\365\4\364\2\360\4\364\1\366\3\360\1\367"+ + "\4\360\16\364\4\360\11\364\1\360\5\364\2\360\1\370"+ + "\1\65\1\371\1\372\1\65\1\370\1\373\1\370\1\350"+ + "\1\351\1\374\6\375\1\370\3\375\1\370\1\376\1\375"+ + "\3\377\1\375\1\377\1\375\1\u0100\6\375\1\377\1\370"+ + "\1\u0101\2\370\4\375\1\370\1\145\4\375\1\366\1\145"+ + "\7\370\16\375\1\370\1\u0102\1\370\1\u0103\11\375\1\377"+ + "\5\375\2\377\2\210\1\u0104\5\210\1\u0105\26\210\1\u0106"+ + "\100\210\2\214\1\u0107\6\214\1\u0108\25\214\1\u0106\100\214"+ + "\2\330\1\u0109\41\330\1\223\4\330\1\u010a\26\330\1\225"+ + "\7\330\1\226\27\330\2\u010b\1\u010c\34\u010b\1\u010d\10\u010b"+ + "\1\u010e\22\u010b\1\u010f\44\u010b\2\u0110\1\u0111\45\u0110\1\u0112"+ + "\13\u0110\1\u0113\53\u0110\2\41\4\0\133\41\1\42\2\0"+ + "\1\45\1\0\132\41\152\0\1\u0114\1\u0115\5\u0116\1\0"+ + "\3\u0116\1\u0117\1\u0118\6\u0116\3\0\6\u0116\4\0\4\u0116"+ + "\2\0\3\u0116\1\u0115\3\0\1\u0119\5\0\16\u0116\4\0"+ + "\21\u0116\1\0\1\45\2\0\1\45\133\0\4\46\1\0"+ + "\1\46\1\u011a\131\46\2\47\1\0\33\47\1\0\5\47"+ + "\1\0\33\47\1\0\7\47\1\0\27\47\36\0\1\u011b"+ + "\143\0\1\u011c\37\0\1\u011d\77\0\1\u011e\205\0\1\u011f"+ + "\27\0\2\55\1\0\64\55\1\0\50\55\21\0\1\u0120"+ + "\116\0\2\60\1\0\16\60\1\0\116\60\2\63\1\0"+ + "\1\63\1\0\2\63\4\0\6\63\1\0\120\63\1\0"+ + "\1\63\1\0\2\63\4\0\6\63\1\0\3\63\1\u0121"+ + "\112\63\21\0\1\72\116\0\2\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\120\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\73\1\u0122\2\73\1\u0123\1\u0124\1\0"+ + "\2\73\1\u0125\6\73\1\u0126\4\73\1\u0127\1\73\1\u0124"+ + "\15\73\1\u0125\1\u0126\13\73\1\u0128\1\73\1\u0122\4\73"+ + "\1\u0123\1\73\1\u0129\10\73\1\u0128\1\73\1\u0129\1\u0127"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u012a"+ + "\2\73\1\0\2\73\1\u012b\6\73\1\u012c\24\73\1\u012b"+ + "\1\u012c\13\73\1\u012d\4\73\1\u012a\14\73\1\u012d\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\16\73"+ + "\1\u012e\61\73\1\u012e\17\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\u012f\5\73\1\0\1\73\1\u0130\17\73\1\u0131"+ + "\1\u0132\10\73\1\u0132\4\73\1\u0130\1\u012f\22\73\1\u0133"+ + "\11\73\1\u0131\1\u0133\20\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\u0134\3\73\1\0\1\73\1\u0135\7\73"+ + "\1\u0136\5\73\1\u0134\17\73\1\u0136\1\u0135\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\120\1\u0137\1\73"+ + "\1\120\1\0\2\73\1\u0138\6\73\1\u0139\5\73\2\120"+ + "\1\73\1\u013a\5\73\2\u013b\1\73\1\u013a\2\73\1\u0138"+ + "\1\u0139\16\73\1\u013c\1\120\1\u0137\4\73\1\120\17\73"+ + "\1\u013c\12\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u013d\2\73\1\0\2\73\1\u013e\6\73\1\u013f\24\73"+ + "\1\u013e\1\u013f\20\73\1\u013d\37\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0140\2\73\1\u0141"+ + "\7\73\1\u0140\4\73\1\u0141\13\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\u0142\1\u0143\1\u0144\1\73\1\u0145\1\73"+ + "\1\0\16\73\1\u0146\1\u0144\10\73\2\u0147\7\73\1\u0142"+ + "\13\73\1\u0143\1\73\1\u0148\2\73\1\u0145\2\73\1\u0148"+ + "\12\73\1\u0146\17\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\1\73\1\120\36\73\1\120\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0149"+ + "\6\73\1\u014a\24\73\1\u0149\1\u014a\13\73\1\u014b\21\73"+ + "\1\u014b\22\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u014c\1\u014d\2\73\1\0\17\73\1\u014c\33\73\1\u014e"+ + "\4\73\1\u014d\14\73\1\u014e\22\73\1\0\1\73\1\0"+ + "\2\73\4\0\2\73\1\120\1\u0133\2\73\1\0\1\73"+ + "\1\u014f\7\73\1\u0150\4\73\1\u0151\1\120\17\73\1\u0150"+ + "\1\u014f\12\73\1\u0152\3\73\1\u0153\1\u0133\1\u0154\3\73"+ + "\1\u0153\7\73\1\u0152\2\73\1\u0151\1\u0154\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\4\73\1\u0155\1\73\1\0"+ + "\1\73\1\120\14\73\1\u0156\11\73\2\u0157\6\73\1\120"+ + "\21\73\1\u0155\15\73\1\u0156\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\2\73\1\120\2\73\1\u0158\1\0\2\73"+ + "\1\u0159\5\73\1\120\6\73\1\120\1\u0158\2\73\1\120"+ + "\12\73\1\u0159\47\73\1\120\5\73\2\120\2\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u015a\1\73\1\120"+ + "\1\0\1\73\1\120\1\u015b\6\73\1\u015c\6\73\1\120"+ + "\1\73\1\u015d\10\73\1\u015d\2\73\1\u015b\1\u015c\1\120"+ + "\16\73\1\120\1\u015a\4\73\1\120\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u015e\6\73"+ + "\1\u015f\4\73\1\u0160\17\73\1\u015e\1\u015f\40\73\1\u0160"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u0161"+ + "\2\73\1\0\11\73\1\u0162\25\73\1\u0162\20\73\1\u0161"+ + "\37\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u0163\25\73\2\u0164\4\73\1\u0163\57\73\3\121"+ + "\1\0\4\121\1\0\127\121\25\0\1\u0165\112\0\3\124"+ + "\1\0\5\124\1\0\126\124\1\63\1\125\1\0\1\63"+ + "\1\45\2\63\4\0\6\63\1\0\116\63\21\0\1\u0166"+ + "\116\0\10\136\1\0\127\136\11\140\1\0\126\140\1\141"+ + "\12\0\6\141\1\0\3\141\2\0\7\141\1\0\7\141"+ + "\1\0\2\141\1\0\4\141\2\0\4\141\10\0\17\141"+ + "\4\0\21\141\3\0\1\u0167\3\0\1\66\2\0\1\u0168"+ + "\12\0\1\u0169\117\0\1\66\1\0\1\66\137\0\1\66"+ + "\130\0\7\u016a\1\u016b\2\u016a\1\u016c\24\u016a\1\u016d\11\u016a"+ + "\1\u016e\66\u016a\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\3\152\1\u0170\2\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\7\0\1\66\11\0\1\u0171\116\0\1\u0172\12\0\6\u0172"+ + "\1\0\1\u0172\1\u0173\1\u0174\2\0\1\u0172\3\155\1\u0172"+ + "\1\155\1\u0175\1\0\5\u0172\1\u0176\1\155\1\0\2\u0172"+ + "\1\0\3\u0172\1\u0176\1\0\1\u0177\1\u0174\1\u0172\1\u0173"+ + "\1\u0172\10\0\5\u0172\1\u0176\5\u0172\1\u0176\3\u0172\4\0"+ + "\11\u0172\1\155\5\u0172\2\155\1\u0172\12\0\6\u0172\1\0"+ + "\1\u0172\1\u0173\1\u0174\2\0\1\u0172\1\u0178\2\u0179\1\u0172"+ + "\1\u0179\1\u017a\1\0\5\u0172\1\u0176\1\u0179\1\0\2\u0172"+ + "\1\0\2\u0172\1\u017b\1\u0176\1\0\1\u0177\1\u0174\1\u0172"+ + "\1\u0173\1\u0172\10\0\5\u0172\1\u0176\3\u0172\1\u017b\1\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0179\5\u0172\2\u0179\7\0"+ + "\1\66\26\0\1\66\101\0\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u017c\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u017d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u017e\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\1\152\1\u017f\1\152\1\u0180\12\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\1\u0181\5\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\u0182\1\u0183\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u0184\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\152\1\u0185\1\u0186\1\152\10\0\1\141\1\u0187"+ + "\4\152\1\u0188\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0189"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\u018a\1\u018b\14\152\4\0\21\152\7\0"+ + "\1\66\46\0\1\66\111\0\3\u0177\1\0\1\u0177\10\0"+ + "\1\u0177\62\0\1\u0177\5\0\2\u0177\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u018c"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u018d\1\u018e\1\u018f\10\0\1\141\10\152\1\u0190\3\152"+ + "\1\u0191\1\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\1\152\1\u0192\2\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u0193\3\152\10\0\1\141"+ + "\1\u0194\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\1\u0195\1\152\1\u0196"+ + "\3\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\152\1\u0197\1\152\1\u0198\7\152\1\u0199"+ + "\2\152\4\0\21\152\7\0\1\66\62\0\1\66\45\0"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u019a\1\u019b\1\152\10\0\1\141\1\u019c\2\152"+ + "\1\u019d\12\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u019e\3\152\10\0\1\141"+ + "\1\u019f\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u01a0\1\u01a1"+ + "\1\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u01a2\10\0\1\141\11\152\1\u01a3\4\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\1\u01a4\15\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\1\u01a5\1\u01a6\4\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\152\1\u01a7\2\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\3\152\1\u01a8\1\152\1\u01a9"+ + "\10\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0187\2\152\10\0\1\141"+ + "\1\u01aa\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\152\1\u01ab\2\152\10\0"+ + "\1\141\16\152\4\0\21\152\2\210\1\0\5\210\1\0"+ + "\26\210\1\0\100\210\2\u01ac\1\0\35\u01ac\1\u01ad\44\u01ac"+ + "\1\u01ae\32\u01ac\2\214\1\0\6\214\1\0\25\214\1\0"+ + "\100\214\2\220\2\0\40\220\1\0\4\220\1\0\26\220"+ + "\1\0\7\220\1\0\27\220\12\0\1\u01af\167\0\1\u01b0"+ + "\37\0\1\u01b1\47\0\1\u01b2\167\0\1\u01b3\205\0\1\u01b4"+ + "\27\0\2\227\2\0\40\227\1\0\33\227\1\0\7\227"+ + "\1\0\27\227\12\0\1\u01b5\167\0\1\u01b6\37\0\1\u01b7"+ + "\77\0\1\u01b8\205\0\1\u01b9\65\0\1\u01ba\101\0\2\237"+ + "\2\0\40\237\1\0\4\237\1\0\22\237\1\0\3\237"+ + "\1\0\7\237\1\0\4\237\1\0\22\237\12\0\1\u01bb"+ + "\6\u01bc\1\u01bd\3\u01bc\2\0\1\u01bc\3\0\1\u01bc\4\0"+ + "\5\u01bc\5\0\4\u01bc\2\0\4\u01bc\11\0\16\u01bc\4\0"+ + "\11\u01bc\1\0\5\u01bc\44\0\1\u01be\37\0\1\u01bf\47\0"+ + "\1\u01c0\166\0\1\u01c1\1\u01c2\15\0\1\u01c3\1\u01c4\1\0"+ + "\1\u01c5\11\0\1\u01c6\1\0\1\u01c7\1\0\1\u01c8\1\u01c9"+ + "\1\0\1\u01ca\4\0\1\u01cb\70\0\1\u01cc\205\0\1\u01cd"+ + "\123\0\1\u01ce\43\0\1\250\12\0\6\250\1\0\3\250"+ + "\2\0\7\250\1\0\7\250\1\0\2\250\1\0\4\250"+ + "\2\0\4\250\7\0\20\250\4\0\21\250\3\0\1\u0167"+ + "\3\0\1\66\130\0\2\253\1\u01cf\5\253\1\u01d0\26\253"+ + "\1\u01d1\100\253\2\u01d2\1\u01d3\6\u01d2\1\u01d4\25\u01d2\1\u01d5"+ + "\100\u01d2\7\0\1\66\2\0\1\u01d6\36\0\1\u01d7\66\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u01d9\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u01da\3\264\7\0\2\250\1\u01db\1\u01dc"+ + "\1\u01dd\1\u01de\1\264\1\u01df\1\264\1\u01e0\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u01e1\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u01e2\1\u01e3\1\264\7\0\2\250"+ + "\1\u01e4\2\264\1\u01e5\12\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u01e6"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u01e7"+ + "\1\u01e8\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u01e9\1\u01ea\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u01eb\1\264\7\0\2\250\4\264"+ + "\1\u01ec\11\264\4\0\1\u01ed\20\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u01ee\1\u01ef"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u01f0\2\264\7\0\2\250\5\264\1\u01f1\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u01f2\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u01f3\1\u01f4"+ + "\1\264\1\u01f5\1\264\1\u01f6\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u01f7\4\264\1\u01f8\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u01f9\1\264\1\u01fa\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\10\264\1\u01fb\1\u01fc"+ + "\2\264\1\u01fd\1\264\4\0\1\u01fe\20\264\7\0\1\66"+ + "\11\0\1\u01ff\116\0\1\u0200\12\0\6\u0200\1\0\1\u0200"+ + "\1\u0201\1\u0202\2\0\1\u0200\3\270\1\u0200\1\270\1\u0203"+ + "\1\0\5\u0200\1\u0204\1\270\1\0\2\u0200\1\0\3\u0200"+ + "\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0201\1\u0200\7\0"+ + "\1\250\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200"+ + "\1\270\5\u0200\2\270\1\u0200\12\0\6\u0200\1\0\1\u0200"+ + "\1\u0201\1\u0202\2\0\1\u0200\1\u0205\2\u0206\1\u0200\1\u0206"+ + "\1\u0207\1\0\5\u0200\1\u0204\1\u0206\1\0\2\u0200\1\0"+ + "\2\u0208\1\u0209\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0201"+ + "\1\u0200\7\0\1\250\5\u0200\1\u0204\3\u0200\1\u0209\1\u0200"+ + "\1\u0204\3\u0200\4\0\11\u0200\1\u0206\5\u0200\2\u0206\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u020a\1\u020b\4\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u020c\2\264\2\0\3\264\1\u020d\7\0\2\250\7\264"+ + "\1\u020e\6\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u020f\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0210\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u0211\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0212\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0213\1\u0214"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0215"+ + "\1\u0216\1\264\7\0\2\250\1\u0217\4\264\1\u0218\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0219\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u021a\2\264\7\0\2\250"+ + "\1\u021b\1\u021c\3\264\1\u021d\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u021e\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u021f\1\u0220\14\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0221\1\264\7\0\2\250\1\u0222\4\264"+ + "\1\u0223\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0224\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0225"+ + "\1\264\7\0\2\250\10\264\1\u0226\5\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264\1\u0227"+ + "\2\264\2\0\3\264\1\u0228\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0229\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u022a\1\264\1\u022b\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\264\1\u022c"+ + "\1\264\1\u022d\7\264\1\u022e\2\264\4\0\21\264\1\250"+ + "\12\0\6\u022f\1\0\3\u022f\2\0\1\u022f\3\250\1\u022f"+ + "\1\250\1\u022f\1\0\1\250\5\u022f\1\250\1\0\1\250"+ + "\1\u022f\1\0\4\u022f\2\0\4\u022f\7\0\2\250\16\u022f"+ + "\4\0\11\u022f\1\250\5\u022f\3\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0230\1\u0231\1\264"+ + "\7\0\2\250\1\u0232\2\264\1\u0233\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0234\3\264\7\0\2\250\1\u0235\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0236\1\u0237\1\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0238"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0239\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u023a\1\u023b\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u023c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u023d\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u023e\1\u023f\2\264"+ + "\7\0\2\250\1\u0240\4\264\1\u0241\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0242\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0243\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u0244\5\264\1\0\1\250\1\264\1\0\1\264\1\u0245"+ + "\2\264\2\0\4\264\7\0\2\250\7\264\1\u0246\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0247\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0248\1\u0249\2\264\7\0\2\250"+ + "\1\u024a\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u024b\2\264\7\0"+ + "\2\250\5\264\1\u024c\10\264\4\0\21\264\1\250\12\0"+ + "\5\264\1\u024d\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u024e\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\3\264\1\u024f"+ + "\15\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0250\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0251\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0252\3\264\7\0\2\250\1\u0253\4\264\1\u0254\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0255\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0256\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0257\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\2\330\1\0\41\330\1\0\4\330"+ + "\1\0\26\330\1\0\7\330\1\0\27\330\12\0\1\u0258"+ + "\125\0\2\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\0\117\333\1\334\1\0\1\333\1\45\2\333\4\0"+ + "\6\333\1\0\116\333\10\335\1\u01d0\127\335\11\336\1\u0259"+ + "\126\336\2\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\72\120\333\1\0\1\333\1\0\2\333\4\0\6\333"+ + "\1\0\37\333\1\u025a\60\333\1\0\1\333\1\0\2\333"+ + "\4\0\6\333\1\0\21\333\1\u025b\76\333\1\0\1\333"+ + "\1\0\2\333\4\0\6\333\1\0\37\333\1\u025c\56\333"+ + "\12\0\1\u025d\176\0\1\u025e\101\0\6\353\1\0\3\353"+ + "\2\0\10\353\1\0\6\353\4\0\4\353\1\0\5\353"+ + "\11\0\16\353\4\0\21\353\13\0\6\u025f\1\0\3\u025f"+ + "\2\0\1\u025f\3\0\1\u025f\1\0\2\u025f\1\0\5\u025f"+ + "\4\0\5\u025f\1\0\5\u025f\11\0\16\u025f\4\0\11\u025f"+ + "\1\0\5\u025f\43\0\1\u0260\1\u0261\1\u0262\1\u0263\13\0"+ + "\1\u0264\1\u0265\1\u0266\5\0\1\u0267\4\0\1\u0268\1\0"+ + "\1\u0269\1\u026a\1\u026b\7\0\1\u026c\41\0\6\u026d\1\0"+ + "\3\u026d\2\0\1\u026d\3\0\1\u026d\1\0\2\u026d\1\0"+ + "\5\u026d\4\0\5\u026d\1\0\5\u026d\11\0\16\u026d\4\0"+ + "\11\u026d\1\0\5\u026d\15\0\6\364\1\0\3\364\2\0"+ + "\10\364\1\0\6\364\4\0\4\364\2\0\4\364\11\0"+ + "\16\364\4\0\21\364\13\0\6\364\1\0\3\364\2\0"+ + "\1\364\3\0\1\364\1\0\2\364\1\0\5\364\5\0"+ + "\4\364\2\0\4\364\11\0\16\364\4\0\11\364\1\0"+ + "\5\364\14\0\7\375\1\0\3\375\2\0\1\375\3\0"+ + "\1\375\1\0\10\375\4\0\1\u025e\4\375\2\0\4\375"+ + "\11\0\16\375\3\0\1\u0103\11\375\1\0\5\375\14\0"+ + "\7\375\1\0\3\375\2\0\1\375\3\0\1\375\1\0"+ + "\10\375\5\0\4\375\2\0\4\375\11\0\16\375\3\0"+ + "\1\u0103\11\375\1\0\5\375\104\0\1\u026e\62\0\1\u026f"+ + "\2\0\3\377\1\0\1\377\10\0\1\377\11\0\1\377"+ + "\1\u0270\2\0\1\u026f\13\0\1\u0271\2\0\1\u0272\1\0"+ + "\1\u0273\1\0\1\u0274\21\0\1\377\5\0\2\377\12\0"+ + "\7\375\1\0\3\375\2\0\1\375\3\377\1\375\1\377"+ + "\10\375\1\377\4\0\4\375\2\0\4\375\11\0\16\375"+ + "\3\0\1\u0103\11\375\1\377\5\375\2\377\14\0\1\u0275"+ + "\7\0\1\u0275\3\0\5\u0275\7\0\2\u0275\4\0\2\u0275"+ + "\1\0\1\u0275\2\0\2\u0275\15\0\1\u0275\1\0\1\u0275"+ + "\5\0\1\u0275\20\0\1\u0275\5\0\2\u0275\2\u0276\1\0"+ + "\135\u0276\12\0\1\u0277\125\0\2\u010b\1\0\34\u010b\1\0"+ + "\10\u010b\1\0\22\u010b\1\0\44\u010b\115\0\1\u0278\22\0"+ + "\2\u0110\1\0\45\u0110\1\0\13\u0110\1\0\53\u0110\115\0"+ + "\1\u0279\35\0\6\u027a\1\0\3\u027a\2\0\6\u027a\3\0"+ + "\6\u027a\4\0\4\u027a\2\0\4\u027a\11\0\16\u027a\4\0"+ + "\21\u027a\13\0\1\u0116\1\u027b\3\u0116\1\u027c\1\0\3\u0116"+ + "\2\0\6\u0116\3\0\2\u0116\1\u027c\3\u0116\4\0\4\u0116"+ + "\2\0\4\u0116\11\0\2\u0116\1\u027b\13\u0116\4\0\21\u0116"+ + "\13\0\6\u0116\1\0\3\u0116\2\0\6\u0116\3\0\6\u0116"+ + "\4\0\4\u0116\2\0\4\u0116\11\0\16\u0116\4\0\21\u0116"+ + "\7\0\1\u027d\16\0\1\u027d\7\0\1\u027e\35\0\1\u027f"+ + "\101\0\1\u0280\122\0\1\u0281\222\0\1\u0282\115\0\1\u0283"+ + "\117\0\1\u0284\205\0\1\u0285\27\0\2\63\1\0\1\63"+ + "\1\0\2\63\1\u027d\3\0\6\63\1\0\4\63\1\u0286"+ + "\111\63\2\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0287\3\73\1\0\17\73\1\u0287\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0288\25\73"+ + "\1\u0288\60\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0289\3\73\1\0\1\u012e\16\73\1\u0289\34\73\1\u012e"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\1\73\1\u028a"+ + "\1\u028b\3\73\1\0\1\73\1\u028c\15\73\1\u028b\20\73"+ + "\1\u028c\14\73\1\u028a\42\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u028d\12\73\1\u028d\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\4\73\1\120\1\73"+ + "\1\0\30\73\2\120\30\73\1\120\35\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\16\73\1\u028e\61\73"+ + "\1\u028e\17\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u028f\25\73\1\u028f\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\u0290\1\0\20\73\1\u0290"+ + "\77\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\21\73\1\u0291\54\73\1\u0291\21\73\1\0\1\73\1\0"+ + "\2\73\4\0\4\73\1\u028a\1\73\1\0\21\73\1\u0292"+ + "\40\73\1\u028a\13\73\1\u0292\21\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\1\73\1\u0293\36\73\1\u0293"+ + "\16\73\1\u0290\4\73\1\u0294\1\u0290\11\73\1\u0294\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\73"+ + "\1\u0290\36\73\1\u0290\57\73\1\0\1\73\1\0\2\73"+ + "\4\0\3\73\1\u0295\2\73\1\0\60\73\1\u0295\37\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\11\73"+ + "\1\u0296\25\73\1\u0296\60\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\120\3\73\1\u0297\1\73\1\0\41\73\1\120"+ + "\20\73\1\u0297\35\73\1\0\1\73\1\0\2\73\4\0"+ + "\2\73\1\u0298\3\73\1\0\17\73\1\u0298\100\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\61\73\1\120"+ + "\17\73\1\120\16\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\120\33\73\1\120\14\73\1\u0299"+ + "\21\73\1\u0299\22\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\11\73\1\u029a\25\73\1\u029a\60\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u029b\3\73\1\0"+ + "\17\73\1\u029b\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\5\73\1\u012e\1\0\20\73\1\u012e\43\73\1\u0290\12\73"+ + "\1\u0290\20\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\32\73\1\u029c\30\73\1\u029c\34\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\30\73\2\u012e\66\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\53\73"+ + "\1\u029d\21\73\1\u029d\22\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u0152\21\73\1\u0152\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u029e\33\73\1\u029e\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u029f\54\73\1\u029f\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\61\73"+ + "\1\u02a0\17\73\1\u02a0\16\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\1\u02a1\27\73\2\u02a2\22\73\1\u02a1"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\30\73\2\u02a3\66\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\u02a4\33\73\1\u02a4\61\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u02a5\2\73\1\0"+ + "\60\73\1\u02a5\37\73\1\0\1\73\1\0\2\73\4\0"+ + "\2\73\1\u02a6\3\73\1\0\17\73\1\u02a6\100\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u02a7\1\0\2\73"+ + "\1\u02a8\15\73\1\u02a7\15\73\1\u02a8\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u02a9\1\73\1\0\62\73"+ + "\1\u02a9\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u02aa\5\73\1\u02aa\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\30\73\2\u0162\66\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\57\73"+ + "\1\u02ab\5\73\1\u02ab\32\73\1\0\1\73\1\0\2\73"+ + "\4\0\1\u02ac\5\73\1\0\41\73\1\u02ac\56\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\67\73\1\120"+ + "\14\73\1\120\13\73\1\0\1\73\1\0\2\73\4\0"+ + "\1\u02ad\5\73\1\0\1\73\1\u0130\1\u02ae\17\73\1\u02af"+ + "\5\73\2\u0162\1\73\1\u02af\2\73\1\u02ae\1\73\1\u0130"+ + "\1\u02ad\56\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u02b0\25\73\1\u02b0\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u02b1\33\73"+ + "\1\u02b1\22\73\1\u02b2\17\73\1\u02b2\16\73\1\0\1\73"+ + "\1\0\2\73\4\0\2\73\1\u02b3\3\73\1\0\17\73"+ + "\1\u02b3\1\73\1\u02ac\31\73\1\u0291\21\73\1\u0291\1\u02ac"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u02b4"+ + "\2\73\1\0\53\73\1\u02b5\4\73\1\u02b4\14\73\1\u02b5"+ + "\22\73\1\0\1\73\1\0\2\73\4\0\1\u02b6\5\73"+ + "\1\0\41\73\1\u02b6\56\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u02b7\1\0\20\73\1\u02b7\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\57\73\1\u02b8"+ + "\5\73\1\u02b8\32\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\53\73\1\120\21\73\1\120\22\73\1\0"+ + "\1\73\1\0\2\73\4\0\1\u02b9\5\73\1\0\41\73"+ + "\1\u02b9\56\73\1\0\1\73\1\0\2\73\4\0\5\73"+ + "\1\u02ba\1\0\20\73\1\u02ba\77\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u02bb\1\0\20\73\1\u02bb\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\107\73"+ + "\1\u028c\2\73\1\u028c\5\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u02bc\12\73\1\u02bc\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\11\73"+ + "\1\u02bd\25\73\1\u02bd\60\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\120\3\73\1\0\11\73\1\u02be\5\73"+ + "\1\120\17\73\1\u02be\27\73\1\120\14\73\1\120\13\73"+ + "\1\0\1\73\1\0\2\73\4\0\5\73\1\u02bf\1\0"+ + "\1\73\1\120\16\73\1\u02bf\17\73\1\120\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u02c0\1\0\20\73"+ + "\1\u02c0\77\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\21\73\1\120\54\73\1\120\21\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\u02c1\1\0\20\73\1\u02c1"+ + "\1\u02c2\54\73\1\u02c2\21\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\u02c3\1\73\1\120\1\73\1\0\17\73"+ + "\1\u02c3\42\73\1\120\35\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\1\73\1\u02c4\36\73\1\u02c4\57\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\57\73"+ + "\1\u02c5\5\73\1\u02c5\32\73\1\0\1\73\1\0\2\73"+ + "\4\0\2\73\1\120\3\73\1\0\17\73\1\120\100\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\u02c6"+ + "\53\73\1\u02c6\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\57\73\1\120\5\73\1\120\30\73\7\0"+ + "\1\u02c7\16\0\1\u02c7\124\0\1\u02c8\47\0\1\u02c8\63\0"+ + "\1\u027d\16\0\1\u027d\111\0\12\u016a\1\u02c9\24\u016a\1\u016d"+ + "\102\u016a\1\0\135\u016a\51\0\1\u02ca\66\0\1\141\12\0"+ + "\6\141\1\0\3\141\2\0\7\141\1\0\1\141\1\u02cb"+ + "\5\141\1\0\2\141\1\0\4\141\2\0\4\141\10\0"+ + "\17\141\4\0\22\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\4\152\1\u02cc\1\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\7\0\1\66\11\0\1\146\116\0\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\7\u0172\1\0\7\u0172"+ + "\1\0\2\u0172\1\0\4\u0172\2\0\4\u0172\10\0\17\u0172"+ + "\4\0\22\u0172\12\0\6\u0172\1\0\3\u0172\2\0\1\u0172"+ + "\3\u02cd\1\u0172\1\u02cd\1\u0172\1\u02ce\6\u0172\1\u02cd\1\0"+ + "\2\u0172\1\0\4\u0172\1\u02ce\1\0\4\u0172\10\0\17\u0172"+ + "\4\0\11\u0172\1\u02cd\5\u0172\2\u02cd\1\u0172\12\0\6\u0172"+ + "\1\0\3\u0172\2\0\1\u0172\3\u02cf\1\u0172\1\u02cf\1\u0175"+ + "\1\0\6\u0172\1\u02cf\1\0\2\u0172\1\0\4\u0172\2\0"+ + "\4\u0172\10\0\17\u0172\4\0\11\u0172\1\u02cf\5\u0172\2\u02cf"+ + "\1\u0172\12\0\6\u0172\1\0\2\u0172\1\u0174\2\0\1\u0172"+ + "\3\u0177\1\u0172\1\u0177\1\u0172\1\0\5\u0172\1\u0176\1\u0177"+ + "\1\0\2\u0172\1\0\3\u0172\1\u0176\2\0\1\u0174\3\u0172"+ + "\10\0\5\u0172\1\u0176\5\u0172\1\u0176\3\u0172\4\0\11\u0172"+ + "\1\u0177\5\u0172\2\u0177\1\u0172\12\0\6\u0172\1\0\2\u0172"+ + "\1\u0174\2\0\1\u0172\3\u0178\1\u0172\1\u0178\1\u0172\1\0"+ + "\5\u0172\1\u0176\1\u0178\1\0\2\u0172\1\0\3\u0172\1\u0176"+ + "\1\0\1\u0177\1\u0174\3\u0172\10\0\5\u0172\1\u0176\5\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0178\5\u0172\2\u0178\1\u0172"+ + "\12\0\6\u0172\1\0\1\u0172\1\u02d0\1\u0174\2\0\1\u0172"+ + "\1\u0178\2\u0179\1\u0172\1\u0179\1\u017a\1\0\5\u0172\1\u0176"+ + "\1\u0179\1\0\2\u0172\1\0\3\u0172\1\u0176\1\0\1\u0177"+ + "\1\u0174\1\u0172\1\u02d0\1\u0172\10\0\5\u0172\1\u0176\5\u0172"+ + "\1\u0176\3\u0172\4\0\11\u0172\1\u0179\5\u0172\2\u0179\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\2\u0172\2\u02d1\1\u0172"+ + "\1\u02d1\1\u017a\1\0\6\u0172\1\u02d1\1\0\2\u0172\1\0"+ + "\4\u0172\2\0\4\u0172\10\0\17\u0172\4\0\11\u0172\1\u02d1"+ + "\5\u0172\2\u02d1\1\u0172\12\0\1\u0172\1\u02d2\4\u0172\1\0"+ + "\2\u0172\1\u02d2\2\0\1\u0172\5\u02d2\1\u0172\1\0\5\u0172"+ + "\2\u02d2\1\0\2\u0172\1\0\2\u02d2\1\u0172\1\u02d2\2\0"+ + "\2\u02d2\2\u0172\10\0\3\u0172\1\u02d2\1\u0172\1\u02d2\5\u0172"+ + "\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2\5\u0172\2\u02d2\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u02d3"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02d4\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u02d5"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02d6\2\152\10\0\1\141\1\152\1\u01a1\14\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\7\152\1\u02d7\6\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\1\152\1\u02d8\4\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\5\152\1\u02d9"+ + "\10\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\2\152\1\u02da\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\13\152\1\u01a1"+ + "\2\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u02db\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\3\152\1\u02dc\2\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\2\152\1\u02dd\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\1\u02de\15\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\1\152\1\u01a1\4\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\3\152\1\u02df\2\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\u02e0\3\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u02e1\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u02e2\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u02e3\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u02e4\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u02e5\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\2\152\1\u02e6\13\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02e7\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\7\152\1\u02e8\6\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u02e9\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u02ea\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u02eb\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02ec\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\7\152\1\u02ed\6\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02ee\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02ef\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\1\u02f0\15\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u02f1\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u02f2\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u02e5\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02f3\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\3\152\1\u02f4\2\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u02f5\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\4\152\1\u02f6\1\152\1\0\1\141\1\152\1\0\1\152"+ + "\1\u02f7\2\152\2\0\2\152\1\u02f8\1\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\u02f9\5\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u02fa\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\3\152\1\u02fb\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\3\152\1\u02fc\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\1\152\1\u02fd\17\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\7\152"+ + "\1\u02fe\6\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u02ff\3\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\1\152\1\u0300\2\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\1\u0301"+ + "\4\152\1\u0302\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0303"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u0304\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\5\152\1\u0305\10\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u0306\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\2\152"+ + "\1\u0307\1\152\10\0\1\141\5\152\1\u0308\10\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\1\152\1\u01a1"+ + "\17\152\14\0\1\u0309\7\0\1\u0309\3\0\5\u0309\7\0"+ + "\2\u0309\4\0\2\u0309\1\0\1\u0309\2\0\2\u0309\15\0"+ + "\1\u0309\1\0\1\u0309\5\0\1\u0309\20\0\1\u0309\5\0"+ + "\2\u0309\14\0\1\u030a\7\0\1\u030a\3\0\5\u030a\7\0"+ + "\2\u030a\4\0\2\u030a\1\0\1\u030a\2\0\2\u030a\15\0"+ + "\1\u030a\1\0\1\u030a\5\0\1\u030a\20\0\1\u030a\5\0"+ + "\2\u030a\13\0\1\u030b\47\0\1\u030b\160\0\1\u030c\115\0"+ + "\1\u030d\117\0\1\u030e\205\0\1\u030f\42\0\1\u0310\47\0"+ + "\1\u0310\160\0\1\u0311\115\0\1\u0312\117\0\1\u0313\205\0"+ + "\1\u0314\54\0\1\u0315\125\0\6\u01bc\1\u01bd\3\u01bc\2\0"+ + "\1\u01bc\3\0\1\u01bc\4\0\5\u01bc\5\0\4\u01bc\2\0"+ + "\4\u01bc\11\0\16\u01bc\4\0\11\u01bc\1\0\5\u01bc\2\0"+ + "\21\u01bc\1\u01bd\116\u01bc\104\0\1\u0316\115\0\1\u0317\135\0"+ + "\1\u0318\117\0\1\u0319\34\0\1\u031a\2\0\1\u031b\144\0"+ + "\1\u031c\72\0\1\u031d\157\0\1\u031e\21\0\1\u031f\110\0"+ + "\1\u0320\145\0\1\u0321\136\0\1\u0322\122\0\1\u0323\155\0"+ + "\1\u0324\136\0\1\u0325\121\0\1\u0326\205\0\1\u0327\111\0"+ + "\1\u0328\14\0\1\u0329\1\0\1\u032a\1\u032b\6\0\1\u032c"+ + "\26\0\10\u01cf\1\u032d\26\u01cf\1\u032e\102\u01cf\1\u032f\5\u01cf"+ + "\1\u0330\1\253\17\u01cf\2\253\1\u01cf\1\253\2\u01cf\1\253"+ + "\1\u0331\5\253\5\u01cf\1\253\54\u01cf\1\253\5\u01cf\2\253"+ + "\2\u0332\1\u0333\6\u0332\1\u0259\126\u0332\11\u0333\1\u0259\126\u0333"+ + "\2\u0332\1\u0333\5\u0332\1\u01d2\1\u0334\17\u0332\2\u0335\1\u0332"+ + "\1\u0336\2\u0332\1\u01d2\1\u0337\4\u01d2\1\u0335\5\u0332\1\u01d2"+ + "\54\u0332\1\u0336\5\u0332\2\u0336\2\u01d6\1\0\135\u01d6\51\0"+ + "\1\u0338\66\0\1\250\12\0\6\250\1\0\3\250\2\0"+ + "\7\250\1\0\1\250\1\u0339\5\250\1\0\2\250\1\0"+ + "\4\250\2\0\4\250\7\0\20\250\4\0\22\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u033a\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u033b\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u033c\1\u033d\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u033e"+ + "\13\264\4\0\14\264\1\u033f\4\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0340"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0341"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0342\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0343"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0344\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u0345\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0346\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0347"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0348\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0349\2\264"+ + "\7\0\2\250\1\u034a\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u034b\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u034c\1\264\7\0\2\250\11\264\1\u034d\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u034e\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u034f\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0350\1\264\1\u0351\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0352\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0353\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0354\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0355\7\0\2\250"+ + "\2\264\1\u0356\1\u0357\1\u0358\2\264\1\u0359\4\264\1\u035a"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u035b\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u035c\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\2\264\1\u035d"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u035e\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u035f\4\264\1\u0360\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0361\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u0362\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0363\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0364\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u0365\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0366\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u0367\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0368\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0369\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u036a\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u036b\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u036c\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u036d\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u036e\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u036f"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u0370"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0371\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u0372\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\u0200\12\0\6\u0200\1\0\3\u0200\2\0\7\u0200"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\6\u0200\1\0"+ + "\3\u0200\2\0\1\u0200\3\u0373\1\u0200\1\u0373\1\u0200\1\u02ce"+ + "\6\u0200\1\u0373\1\0\2\u0200\1\0\4\u0200\1\u02ce\1\0"+ + "\4\u0200\7\0\1\250\17\u0200\4\0\11\u0200\1\u0373\5\u0200"+ + "\2\u0373\1\u0200\12\0\6\u0200\1\0\3\u0200\2\0\1\u0200"+ + "\3\u0374\1\u0200\1\u0374\1\u0203\1\0\6\u0200\1\u0374\1\0"+ + "\2\u0200\1\0\4\u0200\2\0\4\u0200\7\0\1\250\17\u0200"+ + "\4\0\11\u0200\1\u0374\5\u0200\2\u0374\1\u0200\12\0\6\u0200"+ + "\1\0\2\u0200\1\u0202\2\0\1\u0200\3\u0205\1\u0200\1\u0205"+ + "\1\u0200\1\0\5\u0200\1\u0204\1\u0205\1\0\2\u0200\1\0"+ + "\3\u0200\1\u0204\1\0\1\u0177\1\u0202\3\u0200\7\0\1\250"+ + "\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200\1\u0205"+ + "\5\u0200\2\u0205\1\u0200\12\0\6\u0200\1\0\1\u0200\1\u0375"+ + "\1\u0202\2\0\1\u0200\1\u0205\2\u0206\1\u0200\1\u0206\1\u0207"+ + "\1\0\5\u0200\1\u0204\1\u0206\1\0\2\u0200\1\0\3\u0200"+ + "\1\u0204\1\0\1\u0177\1\u0202\1\u0200\1\u0375\1\u0200\7\0"+ + "\1\250\5\u0200\1\u0204\5\u0200\1\u0204\3\u0200\4\0\11\u0200"+ + "\1\u0206\5\u0200\2\u0206\1\u0200\12\0\6\u0200\1\0\3\u0200"+ + "\2\0\2\u0200\2\u0376\1\u0200\1\u0376\1\u0207\1\0\6\u0200"+ + "\1\u0376\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200\7\0"+ + "\1\250\17\u0200\4\0\11\u0200\1\u0376\5\u0200\2\u0376\1\u0200"+ + "\12\0\6\u0200\1\0\3\u0200\2\0\2\u0200\2\u0377\3\u0200"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\1\u0200\1\u0378"+ + "\4\u0200\1\0\2\u0200\1\u0378\2\0\1\u0200\5\u0378\1\u0200"+ + "\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0\2\u0378\1\u0200"+ + "\1\u0378\2\0\2\u0378\2\u0200\7\0\1\250\3\u0200\1\u0378"+ + "\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0\11\u0200\1\u0378"+ + "\5\u0200\2\u0378\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0379\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u037a\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u037b\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u037c\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u037d\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\7\264\1\u037e\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u037f\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0380\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0381\2\264\7\0\2\250"+ + "\1\264\1\u0237\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0382"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0383\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0384\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\13\264\1\u0237\2\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0385\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0386\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0387\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0237\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0388\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u0389\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u038a"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u038b\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u038c\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u038d\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u038e\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u038f\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0390\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0391\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0392\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0393\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u0394\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0395\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0396\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0397\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0398\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0399\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u039a\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u039b\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u039c\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u039d\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u039e\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u039f\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u03a0\10\264\4\0\21\264\1\250"+ + "\12\0\6\u022f\1\0\3\u022f\2\0\7\u022f\1\0\1\u03a1"+ + "\6\u022f\1\0\1\250\1\u022f\1\0\4\u022f\2\0\4\u022f"+ + "\7\0\2\250\16\u022f\4\0\21\u022f\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03a2"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0396\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03a3"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u03a4\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03a5"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u03a6\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u03a7"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03a8"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03a9\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u03aa\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u03ab\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\264\1\u03ac\2\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u03ad\4\264\1\u03ae\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u03af\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u03b0\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\14\264\1\u03b1\4\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u03b2\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u03b3\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u03b4\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u03b5\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u03b6"+ + "\1\264\7\0\2\250\5\264\1\u03b7\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u03b8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u03b9\7\0\2\250\16\264\4\0\15\264\1\u03ba"+ + "\3\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u03bb\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u03bc\1\264\7\0\2\250\11\264\1\u03bd"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u03be"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u03bf"+ + "\1\264\4\0\21\264\1\250\12\0\1\u03c0\1\u03c1\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c2"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c3"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u03c4\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03c5\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u03c6\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u03c7\7\0"+ + "\2\250\2\264\1\u03c8\12\264\1\u03c9\4\0\21\264\1\250"+ + "\12\0\3\264\1\u03ca\2\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u03cb"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u03b1\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u03cc"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u03cd\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u03ce\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u03cf\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u03d0\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u03d1\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u03d2"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\61\333\1\u03d3"+ + "\36\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\55\333\1\u03d4\42\333\1\0\1\333\1\0\2\333\4\0"+ + "\6\333\1\0\61\333\1\u03d5\34\333\13\0\1\u03d6\47\0"+ + "\1\u03d6\67\0\6\u025f\1\0\3\u025f\2\0\10\u025f\1\0"+ + "\6\u025f\4\0\4\u025f\1\0\5\u025f\11\0\16\u025f\4\0"+ + "\21\u025f\75\0\1\u03d7\123\0\1\u03d8\120\0\1\u03d9\32\0"+ + "\1\u03da\137\0\1\u03db\4\0\1\u03dc\100\0\1\u03dd\42\0"+ + "\1\u03de\130\0\1\u03df\121\0\1\u03e0\20\0\1\u03e1\101\0"+ + "\1\u03e2\6\0\1\u03e3\5\0\1\u03e4\121\0\1\u03e5\174\0"+ + "\1\u03e6\134\0\1\u03e7\144\0\1\u03e8\137\0\1\u03e9\50\0"+ + "\6\u026d\1\0\3\u026d\2\0\10\u026d\1\0\6\u026d\4\0"+ + "\4\u026d\1\0\5\u026d\11\0\16\u026d\4\0\21\u026d\106\0"+ + "\1\u03ea\136\0\2\u026f\137\0\1\u026f\74\0\1\u026f\136\0"+ + "\1\u026f\34\0\1\u026f\5\0\1\u026f\115\0\1\u026f\22\0"+ + "\1\u026f\44\0\2\u0116\1\u03eb\3\u0116\1\0\3\u0116\2\0"+ + "\6\u0116\3\0\1\u0116\1\u03eb\4\u0116\4\0\4\u0116\2\0"+ + "\4\u0116\11\0\16\u0116\4\0\21\u0116\13\0\6\u0116\1\0"+ + "\1\u03ec\2\u0116\2\0\6\u0116\3\0\6\u0116\4\0\4\u0116"+ + "\2\0\4\u0116\11\0\1\u0116\1\u03ec\14\u0116\4\0\21\u0116"+ + "\36\0\1\u03ed\137\0\1\u03ee\171\0\1\u03ef\127\0\1\u0282"+ + "\163\0\1\u03f0\112\0\1\u03f1\60\0\2\73\1\0\1\73"+ + "\1\0\2\73\4\0\3\73\1\u03f2\2\73\1\0\60\73"+ + "\1\u03f2\37\73\1\0\1\73\1\0\2\73\4\0\1\73"+ + "\1\u02a1\4\73\1\0\21\73\1\120\33\73\1\u02a1\20\73"+ + "\1\120\21\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u03f3\2\73\1\0\53\73\1\u03f4\4\73\1\u03f3\14\73"+ + "\1\u03f4\22\73\1\0\1\73\1\0\2\73\4\0\5\73"+ + "\1\u03f5\1\0\20\73\1\u03f5\77\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\67\73\1\u02a1\14\73\1\u02a1"+ + "\13\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u03f6\33\73\1\u03f6\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\4\73\1\120\1\73\1\0\62\73\1\120"+ + "\35\73\1\0\1\73\1\0\2\73\4\0\2\73\1\u03f7"+ + "\3\73\1\0\17\73\1\u03f7\100\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\1\73\1\u02bc\36\73\1\u02bc"+ + "\57\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\120\33\73\1\120\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u02a1\1\0\20\73\1\u02a1\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\67\73"+ + "\1\u03f8\14\73\1\u03f8\13\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\61\73\1\u03f9\17\73\1\u03f9\16\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\64\73"+ + "\1\u03fa\12\73\1\u03fa\20\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u03fb\54\73\1\u03fb\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\u02a1"+ + "\53\73\1\u02a1\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\16\73\1\u02ac\61\73\1\u02ac\17\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\11\73\1\u03fc"+ + "\25\73\1\u03fc\60\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\61\73\1\u02ab\17\73\1\u02ab\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u03fd\2\73\1\0"+ + "\60\73\1\u03fd\37\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\11\73\1\u02b3\25\73\1\u02b3\60\73\1\0"+ + "\1\73\1\0\2\73\4\0\5\73\1\u03fe\1\0\20\73"+ + "\1\u03fe\77\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\53\73\1\u02ac\21\73\1\u02ac\22\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0164\25\73"+ + "\1\u0164\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\70\73\1\120\11\73\1\120\15\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u03ff\33\73"+ + "\1\u03ff\61\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0162\33\73\1\u0162\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u02bc\33\73"+ + "\1\u02bc\61\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0164\33\73\1\u0164\61\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\21\73\1\u0400\54\73"+ + "\1\u0400\21\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u0290\5\73\1\u0290\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\53\73\1\u0401\21\73"+ + "\1\u0401\22\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u0402\2\73\1\0\60\73\1\u0402\37\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\120\25\73"+ + "\1\120\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\1\73\1\u0403\36\73\1\u0403\57\73\1\0\1\73"+ + "\1\0\2\73\4\0\3\73\1\u0153\2\73\1\0\60\73"+ + "\1\u0153\37\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0404\3\73\1\0\17\73\1\u0404\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\5\73\1\120\1\0\20\73\1\120"+ + "\77\73\1\0\1\73\1\0\2\73\4\0\1\73\1\u0122"+ + "\4\73\1\0\55\73\1\u0122\42\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0405\12\73\1\u0405"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\2\73\1\u0406"+ + "\3\73\1\0\17\73\1\u0406\100\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u0407\12\73\1\u0407"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\1\73\1\u0408\36\73\1\u0408\57\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\16\73\1\u0409\61\73\1\u0409"+ + "\17\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\64\73\1\120\12\73\1\120\20\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\73\1\u040a\4\73\1\0\55\73\1\u040a"+ + "\42\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u040b\33\73\1\u040b\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\5\73\1\u040c\1\0\20\73\1\u040c\77\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\1\120"+ + "\53\73\1\120\43\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\53\73\1\u040d\21\73\1\u040d\22\73\1\0"+ + "\1\73\1\0\2\73\4\0\3\73\1\u040c\2\73\1\0"+ + "\60\73\1\u040c\1\u03f9\17\73\1\u03f9\16\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u0297\1\73\1\0\62\73"+ + "\1\u0297\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\57\73\1\u040e\5\73\1\u040e\32\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\1\73\1\u040f\36\73"+ + "\1\u040f\57\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u0410\25\73\1\u0410\60\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0411\25\73"+ + "\1\u0411\60\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\2\73\1\u0162\6\73\1\120\24\73\1\u0162\1\120"+ + "\60\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\120\61\73\1\120\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\70\73\1\120\11\73\1\120"+ + "\1\u0412\5\73\1\u0412\6\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0413\1\0\20\73\1\u0413\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0153"+ + "\33\73\1\u0153\61\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\61\73\1\u0414\17\73\1\u0414\14\73\14\0"+ + "\1\u0415\62\0\1\u0415\142\0\2\u02c9\2\0\1\u02c9\43\0"+ + "\1\u0416\125\0\1\141\12\0\1\141\1\u0417\4\141\1\0"+ + "\2\141\1\u0417\2\0\1\141\5\u0417\1\141\1\0\5\141"+ + "\2\u0417\1\0\2\141\1\0\2\u0417\1\141\1\u0417\2\0"+ + "\2\u0417\2\141\10\0\3\141\1\u0417\1\141\1\u0417\5\141"+ + "\1\u0417\3\141\4\0\11\141\1\u0417\5\141\2\u0417\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\5\152\1\u0418\10\152\4\0\21\152\1\u0172"+ + "\12\0\6\u0172\1\0\3\u0172\2\0\1\u0172\3\u02cd\1\u0172"+ + "\1\u02cd\1\u0172\1\0\5\u0172\1\u0176\1\u02cd\1\0\2\u0172"+ + "\1\0\3\u0172\1\u0176\2\0\4\u0172\10\0\5\u0172\1\u0176"+ + "\5\u0172\1\u0176\3\u0172\4\0\11\u0172\1\u02cd\5\u0172\2\u02cd"+ + "\30\0\3\u02cd\1\0\1\u02cd\10\0\1\u02cd\62\0\1\u02cd"+ + "\5\0\2\u02cd\1\u0172\12\0\6\u0172\1\0\1\u0172\1\u0173"+ + "\1\u0172\2\0\1\u0172\3\u02cf\1\u0172\1\u02cf\1\u0175\1\0"+ + "\6\u0172\1\u02cf\1\0\2\u0172\1\0\4\u0172\2\0\2\u0172"+ + "\1\u0173\1\u0172\10\0\17\u0172\4\0\11\u0172\1\u02cf\5\u0172"+ + "\2\u02cf\1\u0172\12\0\6\u0172\1\0\1\u0172\1\u02d0\1\u0172"+ + "\2\0\2\u0172\2\u02d1\1\u0172\1\u02d1\1\u017a\1\0\6\u0172"+ + "\1\u02d1\1\0\2\u0172\1\0\4\u0172\2\0\2\u0172\1\u02d0"+ + "\1\u0172\10\0\17\u0172\4\0\11\u0172\1\u02d1\5\u0172\2\u02d1"+ + "\1\u0172\12\0\1\u0172\1\u02d2\4\u0172\1\0\1\u0172\1\u02d0"+ + "\1\u02d2\2\0\1\u0172\5\u02d2\1\u0419\1\0\5\u0172\2\u02d2"+ + "\1\0\2\u0172\1\0\2\u02d2\1\u0172\1\u02d2\2\0\2\u02d2"+ + "\1\u02d0\1\u0172\10\0\3\u0172\1\u02d2\1\u0172\1\u02d2\5\u0172"+ + "\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2\5\u0172\2\u02d2\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\3\152"+ + "\1\u018f\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u041a"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u041b\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u041c\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u041d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\1\u041e\15\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\3\152\1\u01a1\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\2\152\1\u01a1\1\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\5\152\1\u041f\10\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u0420\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\3\152\1\u02d5\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0421\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0422\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0423\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u0424\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\u0425\3\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\11\152\1\u01a1\4\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\3\152\1\u0426\12\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u01a1"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\152\1\u0427"+ + "\2\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\u0428\3\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\1\u0429\15\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\2\152\1\u042a\1\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u042b\3\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\6\152"+ + "\1\u0425\7\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u0187\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u042c\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\2\152\1\u042d"+ + "\13\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u0421\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u02f2\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\2\152\1\u0306"+ + "\13\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\3\152\1\u02d9\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u042e\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\3\152\1\u042f\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\152\1\u0425\4\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0430\2\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\1\u0431\5\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\u0432\3\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\1\152"+ + "\1\u0433\2\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\u0434\3\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0435\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\5\152\1\u0436\10\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u0437\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u0438\1\152\10\0\1\141\1\u0429\15\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u01a1\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u042c\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0439\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\14\152\1\u043a\1\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\3\152\1\u043b\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\15\152\1\u043c\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\2\152\1\u02e5"+ + "\1\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\3\152\1\u01a1\12\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\1\152\1\u043d"+ + "\2\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\4\152\1\u01a1\11\152\4\0\21\152\14\0\1\u043e"+ + "\7\0\1\u043e\3\0\5\u043e\7\0\2\u043e\4\0\2\u043e"+ + "\1\0\1\u043e\2\0\2\u043e\15\0\1\u043e\1\0\1\u043e"+ + "\5\0\1\u043e\20\0\1\u043e\5\0\2\u043e\14\0\1\u043f"+ + "\7\0\1\u043f\3\0\5\u043f\7\0\2\u043f\4\0\2\u043f"+ + "\1\0\1\u043f\2\0\2\u043f\15\0\1\u043f\1\0\1\u043f"+ + "\5\0\1\u043f\20\0\1\u043f\5\0\2\u043f\14\0\1\u0440"+ + "\62\0\1\u0440\130\0\1\u0441\127\0\1\u030c\163\0\1\u0442"+ + "\112\0\1\u0443\74\0\1\u0444\62\0\1\u0444\130\0\1\u0445"+ + "\127\0\1\u0311\163\0\1\u0446\112\0\1\u0447\101\0\1\u0448"+ + "\206\0\1\u0449\127\0\1\u0316\121\0\1\u044a\137\0\1\u044b"+ + "\176\0\1\u044c\77\0\1\u044d\157\0\1\u044e\15\0\1\u044f"+ + "\102\0\1\u0450\136\0\1\u0451\16\0\1\u0452\122\0\1\u0453"+ + "\157\0\1\u0454\116\0\1\u0455\201\0\1\u0456\75\0\1\u0457"+ + "\36\0\1\u0458\77\0\1\u0459\137\0\1\u045a\202\0\1\u045b"+ + "\112\0\1\u045c\162\0\1\u045d\132\0\1\u045e\137\0\1\u045f"+ + "\105\0\1\u0460\155\0\1\u0461\56\0\2\u01cf\1\u032f\5\u01cf"+ + "\1\u0462\127\u01cf\10\u032f\1\u032d\127\u032f\2\u0330\1\u0462\5\u0330"+ + "\1\u01d0\26\u0330\1\u0463\100\u0330\10\u01cf\1\u032d\3\u01cf\1\u0464"+ + "\7\u01cf\1\u0464\3\u01cf\5\u0464\2\u01cf\1\u032e\4\u01cf\2\u0464"+ + "\4\u01cf\2\u0464\1\u01cf\1\u0464\2\u01cf\2\u0464\15\u01cf\1\u0464"+ + "\1\u01cf\1\u0464\5\u01cf\1\u0464\20\u01cf\1\u0464\5\u01cf\2\u0464"+ + "\2\u0332\1\u0333\6\u0332\1\u01d4\126\u0332\11\u0333\1\u01d4\126\u0333"+ + "\11\0\1\u0259\126\0\2\u0332\1\u0333\6\u0332\1\u0259\17\u0332"+ + "\2\u0336\1\u0332\1\u0336\10\u0332\1\u0336\62\u0332\1\u0336\5\u0332"+ + "\2\u0336\2\u0332\1\u0333\6\u0332\1\u0259\17\u0332\2\u01d2\1\u0332"+ + "\1\u01d2\10\u0332\1\u01d2\62\u0332\1\u01d2\5\u0332\2\u01d2\2\u0332"+ + "\1\u0333\6\u0332\1\u01d4\2\u0332\1\u0465\7\u0332\1\u0465\3\u0332"+ + "\5\u0465\7\u0332\2\u0465\4\u0332\2\u0465\1\u0332\1\u0465\2\u0332"+ + "\2\u0465\15\u0332\1\u0465\1\u0332\1\u0465\5\u0332\1\u0465\20\u0332"+ + "\1\u0465\5\u0332\2\u0465\1\250\12\0\1\250\1\u0466\4\250"+ + "\1\0\2\250\1\u0466\2\0\1\250\5\u0466\1\250\1\0"+ + "\5\250\2\u0466\1\0\2\250\1\0\2\u0466\1\250\1\u0466"+ + "\2\0\2\u0466\2\250\7\0\4\250\1\u0466\1\250\1\u0466"+ + "\5\250\1\u0466\3\250\4\0\11\250\1\u0466\5\250\2\u0466"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0467\3\264\7\0\2\250\5\264\1\u0468\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0469\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u046a\6\264\1\u046b"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u046c\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u046d\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u046e\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u046f\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0470\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0471\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0472\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u0473\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0474\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0475\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0476\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0477\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0478\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0479\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u047a\7\0\2\250\2\264\1\u047b\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u047c\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u047d\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u047e\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u047f\1\u0480\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0481\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0482\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0483\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0484\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0485\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0486\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0487\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0488\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0489\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u048a"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u048b"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u048c\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u048d"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u048e"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u048f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u01f9\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\10\264\1\u0490\5\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0491\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0492\4\264\1\u0493\6\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0494\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0495"+ + "\10\264\1\u0496\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\15\264\1\u0497\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0498\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0499\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\2\264"+ + "\1\u049a\16\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u049b\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u049c\3\264\7\0\2\250\1\u049d\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u049e\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\6\264\1\u049f\7\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u04a0\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04a1\3\264\7\0\2\250\15\264\1\u04a2\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u04a3\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u04a4\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u04a5\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u04a6"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u04a7\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04a8"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04a9"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\2\264\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\u0200\12\0\6\u0200\1\0"+ + "\3\u0200\2\0\1\u0200\3\u0373\1\u0200\1\u0373\1\u0200\1\0"+ + "\5\u0200\1\u0204\1\u0373\1\0\2\u0200\1\0\3\u0200\1\u0204"+ + "\2\0\4\u0200\7\0\1\250\5\u0200\1\u0204\5\u0200\1\u0204"+ + "\3\u0200\4\0\11\u0200\1\u0373\5\u0200\2\u0373\1\u0200\12\0"+ + "\6\u0200\1\0\1\u0200\1\u0201\1\u0200\2\0\1\u0200\3\u0374"+ + "\1\u0200\1\u0374\1\u0203\1\0\6\u0200\1\u0374\1\0\2\u0200"+ + "\1\0\4\u0200\2\0\2\u0200\1\u0201\1\u0200\7\0\1\250"+ + "\17\u0200\4\0\11\u0200\1\u0374\5\u0200\2\u0374\1\u0200\12\0"+ + "\6\u0200\1\0\1\u0200\1\u0375\1\u0200\2\0\2\u0200\2\u0376"+ + "\1\u0200\1\u0376\1\u0207\1\0\6\u0200\1\u0376\1\0\2\u0200"+ + "\1\0\4\u0200\2\0\2\u0200\1\u0375\1\u0200\7\0\1\250"+ + "\17\u0200\4\0\11\u0200\1\u0376\5\u0200\2\u0376\1\u0200\12\0"+ + "\6\u0200\1\0\3\u0200\2\0\2\u0200\2\u0377\2\u0200\1\u04ab"+ + "\1\0\7\u0200\1\0\2\u0200\1\0\4\u0200\2\0\4\u0200"+ + "\7\0\1\250\17\u0200\4\0\22\u0200\12\0\1\u0200\1\u0378"+ + "\4\u0200\1\0\1\u0200\1\u0375\1\u0378\2\0\1\u0200\5\u0378"+ + "\1\u04ac\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0\2\u0378"+ + "\1\u0200\1\u0378\2\0\2\u0378\1\u0375\1\u0200\7\0\1\250"+ + "\3\u0200\1\u0378\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0"+ + "\11\u0200\1\u0378\5\u0200\2\u0378\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u04ad"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u04ae\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04af\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04b0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04b1\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u04b2\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u04b3\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04b4\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u04b5\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u04b6\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0237"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u0237\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u04b7\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0380\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u04b8\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u04b9\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u04ba\1\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u04bb\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04bc\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u04bd\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04be\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u04bf\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u04c0\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u04c1\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04c2\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u04c3\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0472\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u04c4\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04c5\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u04c6\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u0237\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0237\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u04c7\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u04c8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04c9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\6\264\1\u04c2\7\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0217"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04ca\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u04cb\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u04cc\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u04b8\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u03a2\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\250\1\0\3\250\2\0\7\250\1\0\1\250\1\u04cd"+ + "\5\250\1\0\2\250\1\0\4\250\2\0\4\250\7\0"+ + "\20\250\4\0\22\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u04ce\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0383\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04cf\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u04d0\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u04c2\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u04d1\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\264\1\u04d2\2\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u04d3\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04d4\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u04d5\1\264\7\0\2\250\1\u04c9\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0237\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u04cb\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u04d6\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u04d7\1\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\15\264\1\u04d8\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u04d9\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u04da\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u033d"+ + "\1\u04db\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u04dc\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u04dd\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0396\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u04de\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0237\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u04df\6\264\4\0\1\u04e0\20\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u04e1\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u04e2"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04e3\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u04e4"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\264\1\u04e5\2\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u04e6"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u04e7\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u04e8"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u04e9\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\u04ea"+ + "\5\264\1\0\3\264\2\0\4\264\1\u04eb\2\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\3\264\1\u033d\12\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u04ec\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u04ed\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\12\264"+ + "\1\u04ee\3\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u04ef\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u04f0\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u04f1\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04f2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\12\264\1\u033d\3\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u04f3\7\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u04f4\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u036c"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u033d\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04f5"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u04f6\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u04f7"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\15\264\1\u04f8\4\0\21\264\2\333\1\0\1\333\1\0"+ + "\2\333\4\0\6\333\1\0\40\333\1\u04f9\57\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\40\333\1\u04fa"+ + "\57\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\36\333\1\u04fb\57\333\20\0\1\u04fc\21\0\1\u04fc\172\0"+ + "\1\u03da\103\0\1\u04fd\176\0\1\u04fe\101\0\1\337\174\0"+ + "\1\u04ff\101\0\1\u0500\157\0\1\u0501\162\0\1\u0502\75\0"+ + "\1\u0503\140\0\1\u0504\17\0\1\u0505\117\0\1\u0506\176\0"+ + "\1\u0507\115\0\1\u0508\123\0\1\u0509\155\0\1\u050a\135\0"+ + "\1\u050b\170\0\1\u050c\111\0\1\u03dd\137\0\1\u050d\160\0"+ + "\1\u050e\46\0\3\u0116\1\u050f\2\u0116\1\0\3\u0116\2\0"+ + "\6\u0116\3\0\6\u0116\4\0\4\u0116\2\0\4\u0116\11\0"+ + "\5\u0116\1\u050f\10\u0116\4\0\21\u0116\13\0\6\u0116\1\0"+ + "\1\u0116\1\u0510\1\u0116\2\0\6\u0116\3\0\6\u0116\4\0"+ + "\4\u0116\2\0\2\u0116\1\u0510\1\u0116\11\0\16\u0116\4\0"+ + "\21\u0116\12\0\1\u0511\210\0\1\u0282\4\0\1\u03ef\54\0"+ + "\3\u0512\1\0\1\u0512\7\u03f1\1\0\3\u03f1\2\u0512\6\u03f1"+ + "\2\u0512\1\0\6\u03f1\1\0\1\u0512\1\u03f1\1\u0512\4\u03f1"+ + "\2\u0512\4\u03f1\1\0\1\u0512\1\0\3\u0512\2\0\1\u0512"+ + "\16\u03f1\2\u0512\1\0\1\u0512\21\u03f1\2\73\1\0\1\73"+ + "\1\0\2\73\4\0\4\73\1\u02ac\1\73\1\0\62\73"+ + "\1\u02ac\35\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\70\73\1\u0290\11\73\1\u0290\15\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\21\73\1\u0133\54\73"+ + "\1\u0133\21\73\1\0\1\73\1\0\2\73\4\0\3\73"+ + "\1\u040c\2\73\1\0\60\73\1\u040c\37\73\1\0\1\73"+ + "\1\0\2\73\4\0\1\73\1\u02ac\4\73\1\0\55\73"+ + "\1\u02ac\42\73\1\0\1\73\1\0\2\73\4\0\1\73"+ + "\1\u0290\4\73\1\0\55\73\1\u0290\42\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\11\73\1\u0513\25\73"+ + "\1\u0513\60\73\1\0\1\73\1\0\2\73\4\0\2\73"+ + "\1\u0514\3\73\1\0\17\73\1\u0514\100\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\2\73\1\u0515\6\73"+ + "\1\u03ff\24\73\1\u0515\1\u03ff\60\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\57\73\1\u0516\5\73\1\u0516"+ + "\32\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\64\73\1\u0290\12\73\1\u0290\20\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\21\73\1\u0517\54\73\1\u0517"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\11\73\1\u0518\25\73\1\u0518\60\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\21\73\1\u0164\54\73\1\u0164"+ + "\21\73\1\0\1\73\1\0\2\73\4\0\5\73\1\u0519"+ + "\1\0\20\73\1\u0519\77\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u051a\54\73\1\u051a\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\1\73\1\u012e\4\73"+ + "\1\0\55\73\1\u012e\42\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\2\73\1\u02ac\33\73\1\u02ac\61\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u051b\33\73\1\u051b\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\11\73\1\u051c\25\73\1\u051c\60\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u051d\33\73\1\u051d\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\57\73\1\u051e\5\73\1\u051e\32\73"+ + "\1\0\1\73\1\0\2\73\4\0\2\73\1\u0290\3\73"+ + "\1\0\17\73\1\u0290\100\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\70\73\1\u051f\11\73\1\u051f\15\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\22\73"+ + "\1\u0520\10\73\1\u0520\64\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u015d\21\73\1\u015d\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\16\73"+ + "\1\u03ff\61\73\1\u03ff\17\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u0133\21\73\1\u0133\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\3\73\1\u0521\2\73"+ + "\1\0\60\73\1\u0521\37\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0522\1\0\1\73\1\u0523\16\73\1\u0522"+ + "\17\73\1\u0523\20\73\1\u0524\17\73\1\u0524\16\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\16\73\1\u0525"+ + "\61\73\1\u0525\17\73\1\0\1\73\1\0\2\73\4\0"+ + "\3\73\1\u0526\2\73\1\0\60\73\1\u0526\37\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u015d"+ + "\33\73\1\u015d\57\73\15\0\1\u0527\23\0\1\u0527\76\0"+ + "\1\141\12\0\1\141\1\u0528\4\141\1\0\2\141\1\u0528"+ + "\2\0\1\141\5\u0528\1\141\1\0\5\141\2\u0528\1\0"+ + "\2\141\1\0\2\u0528\1\141\1\u0528\2\0\2\u0528\2\141"+ + "\10\0\3\141\1\u0528\1\141\1\u0528\5\141\1\u0528\3\141"+ + "\4\0\11\141\1\u0528\5\141\2\u0528\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0529"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\u0172\12\0\1\u0172"+ + "\1\u02d2\4\u0172\1\0\2\u0172\1\u02d2\2\0\1\u0172\5\u02d2"+ + "\1\u0419\1\0\5\u0172\2\u02d2\1\0\2\u0172\1\0\2\u02d2"+ + "\1\u0172\1\u02d2\2\0\2\u02d2\2\u0172\10\0\3\u0172\1\u02d2"+ + "\1\u0172\1\u02d2\5\u0172\1\u02d2\3\u0172\4\0\11\u0172\1\u02d2"+ + "\5\u0172\2\u02d2\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\1\152\1\u052a\4\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\3\152\1\u052b\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u052c\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\13\152\1\u052d\2\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\14\152\1\u02e5\1\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u052e\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u0425\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\2\152\1\u052f\1\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\15\152\1\u01a1\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u0530"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\7\152\1\u0531\6\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152"+ + "\1\u0532\2\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152"+ + "\1\u042f\4\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152"+ + "\1\u0533\4\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u0534\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\3\152\1\u0535\12\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\5\152\1\u0536\10\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u01a1\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\1\u0537"+ + "\5\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\6\152\1\u0538\7\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152\1\u02e5"+ + "\3\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\2\152\1\u02e2\1\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0539"+ + "\4\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\152\1\u053a\2\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u053b"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\1\152\1\u042a\17\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u053c\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\u053d\3\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\152\1\u0432\2\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\u053e\3\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\1\152\1\u053f\2\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\2\152\1\u01a8\3\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\16\152"+ + "\4\0\21\152\15\0\1\u0540\23\0\1\u0540\110\0\1\u0541"+ + "\210\0\1\u030c\4\0\1\u0441\54\0\3\u0542\1\0\1\u0542"+ + "\7\u0443\1\0\3\u0443\2\u0542\6\u0443\2\u0542\1\0\6\u0443"+ + "\1\0\1\u0542\1\u0443\1\u0542\4\u0443\2\u0542\4\u0443\1\0"+ + "\1\u0542\1\0\3\u0542\2\0\1\u0542\16\u0443\2\u0542\1\0"+ + "\1\u0542\21\u0443\15\0\1\u0543\23\0\1\u0543\110\0\1\u0544"+ + "\210\0\1\u0311\4\0\1\u0445\54\0\3\u0545\1\0\1\u0545"+ + "\7\u0447\1\0\3\u0447\2\u0545\6\u0447\2\u0545\1\0\6\u0447"+ + "\1\0\1\u0545\1\u0447\1\u0545\4\u0447\2\u0545\4\u0447\1\0"+ + "\1\u0545\1\0\3\u0545\2\0\1\u0545\16\u0447\2\u0545\1\0"+ + "\1\u0545\21\u0447\12\0\1\u0546\165\0\1\u0547\174\0\1\u0548"+ + "\137\0\1\u0452\122\0\1\u0549\14\0\1\u054a\150\0\1\u054b"+ + "\111\0\1\u054c\1\0\1\u054d\155\0\1\u054e\141\0\1\u054f"+ + "\134\0\1\u0550\135\0\1\u0551\122\0\1\u0552\120\0\1\u0553"+ + "\156\0\1\u0554\137\0\1\u0555\140\0\1\u0556\141\0\1\u0557"+ + "\137\0\1\u0316\4\0\1\u0449\54\0\3\u0558\1\0\1\u0558"+ + "\7\u045c\1\0\3\u045c\2\u0558\6\u045c\2\u0558\1\0\6\u045c"+ + "\1\0\1\u0558\1\u045c\1\u0558\4\u045c\2\u0558\4\u045c\1\0"+ + "\1\u0558\1\0\3\u0558\2\0\1\u0558\16\u045c\2\u0558\1\0"+ + "\1\u0558\21\u045c\42\0\1\u0559\1\u055a\175\0\1\u055b\135\0"+ + "\1\u055c\140\0\1\u055d\121\0\1\u055e\55\0\10\u0462\1\0"+ + "\26\u0462\1\u055f\102\u0462\1\0\5\u0462\2\u0330\17\u0462\2\u0330"+ + "\1\u0462\1\u0330\2\u0462\1\u0330\1\u0560\5\u0330\5\u0462\1\u0330"+ + "\54\u0462\1\u0330\5\u0462\2\u0330\10\u01cf\1\u032d\3\u01cf\1\u0561"+ + "\7\u01cf\1\u0561\3\u01cf\5\u0561\2\u01cf\1\u032e\4\u01cf\2\u0561"+ + "\4\u01cf\2\u0561\1\u01cf\1\u0561\2\u01cf\2\u0561\15\u01cf\1\u0561"+ + "\1\u01cf\1\u0561\5\u01cf\1\u0561\20\u01cf\1\u0561\5\u01cf\2\u0561"+ + "\2\u0332\1\u0333\6\u0332\1\u01d4\2\u0332\1\u0562\7\u0332\1\u0562"+ + "\3\u0332\5\u0562\7\u0332\2\u0562\4\u0332\2\u0562\1\u0332\1\u0562"+ + "\2\u0332\2\u0562\15\u0332\1\u0562\1\u0332\1\u0562\5\u0332\1\u0562"+ + "\20\u0332\1\u0562\5\u0332\2\u0562\1\250\12\0\1\250\1\u0563"+ + "\4\250\1\0\2\250\1\u0563\2\0\1\250\5\u0563\1\250"+ + "\1\0\5\250\2\u0563\1\0\2\250\1\0\2\u0563\1\250"+ + "\1\u0563\2\0\2\u0563\2\250\7\0\4\250\1\u0563\1\250"+ + "\1\u0563\5\250\1\u0563\3\250\4\0\11\250\1\u0563\5\250"+ + "\2\u0563\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0564\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0565\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0566"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u0567"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0568\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0569\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u056a\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u056b\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u056c\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u056d"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u056e"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u056f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u033d\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0570"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0571\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0572\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0573"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0574\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0575\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0480\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0576\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0577\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0578\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0353\2\264\7\0\2\250\5\264\1\u0579\10\264\4\0"+ + "\21\264\1\250\12\0\1\u057a\1\u057b\4\264\1\0\3\264"+ + "\2\0\4\264\1\u057c\2\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u057d\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u057e\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u057f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04a4\1\u057f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0580\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0581"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0582\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u0583\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0584\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u056f\7\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0585\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\11\264"+ + "\1\u0586\4\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0587\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\10\264"+ + "\1\u0588\5\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0589\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u058a\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u058b"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u058c"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u058d\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u058e"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u058f\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0590\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0591\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0592\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0593\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0594\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0595\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0596\11\264\4\0"+ + "\21\264\1\250\12\0\1\u04bf\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\2\264"+ + "\1\u0597\16\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0598\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\264"+ + "\1\u0599\17\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u059a\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\13\264\1\u0480\2\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\1\u059b\6\264\1\0\1\u01d8\1\264\1\u059c\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u0485\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u059d\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\264"+ + "\1\u059e\17\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u059f\1\u05a0\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\2\264\1\u05a1\1\u05a2\2\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u033d\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u04bf\1\u05a3\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u05a4\3\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u0597\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u05a5\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u05a6\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u05a7\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u05a8\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\10\264\1\u0490\5\264\4\0\21\264\1\u0200\12\0"+ + "\1\u0200\1\u0378\4\u0200\1\0\2\u0200\1\u0378\2\0\1\u0200"+ + "\5\u0378\1\u04ac\1\0\5\u0200\2\u0378\1\0\2\u0200\1\0"+ + "\2\u0378\1\u0200\1\u0378\2\0\2\u0378\2\u0200\7\0\1\250"+ + "\3\u0200\1\u0378\1\u0200\1\u0378\5\u0200\1\u0378\3\u0200\4\0"+ + "\11\u0200\1\u0378\5\u0200\2\u0378\1\250\12\0\1\264\1\u05a9"+ + "\4\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u05aa\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u05ab\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05ac\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05ad\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u05ae\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u05af\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u05b0\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\13\264\1\u05b1"+ + "\2\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u0396"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u04c2\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u05b2\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u05b3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\17\264"+ + "\1\u05b4\1\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u05b5\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u05b6\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\4\264\1\u05b7"+ + "\2\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0472\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\15\264\1\u0237\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u05b8\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u0480\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u05b9\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u05ba\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\2\264\1\u05bb"+ + "\1\u05bc\1\u05bd\1\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u05be\2\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u05bf\2\0\4\264\7\0\2\250\12\264\1\u05c0"+ + "\3\264\4\0\1\u05c1\1\u05c2\14\264\1\u05c3\2\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u05c4\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u05c5\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u04d0\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u05c6\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u05c7\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u05c8\12\264\4\0\21\264\1\250"+ + "\12\0\1\250\1\u05c9\4\250\1\0\2\250\1\u05c9\2\0"+ + "\1\250\5\u05c9\1\250\1\0\5\250\2\u05c9\1\0\2\250"+ + "\1\0\2\u05c9\1\250\1\u05c9\2\0\2\u05c9\2\250\7\0"+ + "\4\250\1\u05c9\1\250\1\u05c9\5\250\1\u05c9\3\250\4\0"+ + "\11\250\1\u05c9\5\250\2\u05c9\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u0237\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u05ca\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0237\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u05cb\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0390\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u05cc\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u05cd\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u05ce\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u05cf\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u05d0\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u05d1\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u05d2\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u033d\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\3\264\1\u05d3\2\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\u05d4"+ + "\20\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u05d5\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u05d6\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0242\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u05d7\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\4\264\1\u05d8\1\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u05d9\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u05da\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u05db\15\264\4\0\21\264\1\250"+ + "\12\0\4\264\1\u05dc\1\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u05dd"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u05de\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\6\264\1\u05df\7\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u05e0\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u05e1"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u05e2\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u05e3\13\264\4\0\21\264\24\0\1\u05e4\113\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u05e5\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u05e6\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u05e7\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u05e8\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u05e9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u05ea\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u05eb\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u05ec"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u05ed\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u04bf\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0480"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\2\264\1\u0597\16\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u05ee"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\10\264\1\u05ef\10\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\60\333\1\u05f0"+ + "\37\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\16\333\1\u05f1\77\333\22\0\1\u05f2\53\0\1\u05f2\144\0"+ + "\1\u05f3\72\0\1\u05f4\141\0\1\u05f5\162\0\1\u0505\127\0"+ + "\1\u05f6\126\0\1\u05f7\177\0\1\u05f8\140\0\1\337\76\0"+ + "\1\u05f9\207\0\1\337\66\0\1\u05fa\142\0\1\u05fb\135\0"+ + "\1\u050c\173\0\1\u05f9\140\0\1\u05fc\120\0\1\u05fd\161\0"+ + "\1\u05fe\132\0\1\u05ff\55\0\4\u0116\1\u0600\1\u0116\1\0"+ + "\3\u0116\2\0\6\u0116\3\0\6\u0116\4\0\4\u0116\2\0"+ + "\4\u0116\11\0\7\u0116\1\u0600\6\u0116\4\0\21\u0116\13\0"+ + "\6\u0116\1\0\2\u0116\1\u0601\2\0\6\u0116\3\0\6\u0116"+ + "\4\0\4\u0116\2\0\1\u0601\3\u0116\11\0\16\u0116\4\0"+ + "\21\u0116\12\0\1\u03f1\125\0\2\73\1\0\1\73\1\0"+ + "\2\73\4\0\1\120\5\73\1\0\41\73\1\120\56\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\53\73"+ + "\1\u0602\21\73\1\u0602\22\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\21\73\1\u02ac\54\73\1\u02ac\21\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\2\73"+ + "\1\u0603\33\73\1\u0603\61\73\1\0\1\73\1\0\2\73"+ + "\4\0\5\73\1\u0604\1\0\20\73\1\u0604\77\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u0605\3\73\1\0"+ + "\17\73\1\u0605\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\1\u0606\5\73\1\0\41\73\1\u0606\56\73\1\0\1\73"+ + "\1\0\2\73\4\0\6\73\1\0\1\u02b3\53\73\1\u02b3"+ + "\43\73\1\0\1\73\1\0\2\73\4\0\1\u0513\5\73"+ + "\1\0\41\73\1\u0513\56\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\64\73\1\u0607\12\73\1\u0607\20\73"+ + "\1\0\1\73\1\0\2\73\4\0\1\u0403\5\73\1\0"+ + "\41\73\1\u0403\56\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\103\73\1\u0608\5\73\1\u0608\6\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\53\73\1\u0515"+ + "\21\73\1\u0515\22\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\1\73\1\u0513\36\73\1\u0513\57\73\1\0"+ + "\1\73\1\0\2\73\4\0\6\73\1\0\2\73\1\u0609"+ + "\33\73\1\u0609\61\73\1\0\1\73\1\0\2\73\4\0"+ + "\3\73\1\u0149\2\73\1\0\60\73\1\u0149\37\73\1\0"+ + "\1\73\1\0\2\73\4\0\2\73\1\u060a\3\73\1\0"+ + "\17\73\1\u060a\100\73\1\0\1\73\1\0\2\73\4\0"+ + "\6\73\1\0\2\73\1\u0290\33\73\1\u0290\61\73\1\0"+ + "\1\73\1\0\2\73\4\0\1\73\1\u060b\4\73\1\0"+ + "\55\73\1\u060b\40\73\16\0\1\u060c\63\0\1\u060c\35\0"+ + "\1\141\12\0\1\141\1\u060d\4\141\1\0\2\141\1\u060d"+ + "\2\0\1\141\5\u060d\1\141\1\0\5\141\2\u060d\1\0"+ + "\2\141\1\0\2\u060d\1\141\1\u060d\2\0\2\u060d\2\141"+ + "\10\0\3\141\1\u060d\1\141\1\u060d\5\141\1\u060d\3\141"+ + "\4\0\11\141\1\u060d\5\141\2\u060d\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u060e\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u060f"+ + "\2\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u0610\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\4\152\1\u01a1"+ + "\1\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\5\152\1\u0611\10\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\2\152\1\u0612\1\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\152\1\u0613\2\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\1\u042a\3\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\4\152"+ + "\1\u02d9\11\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\1\152\1\u0614\2\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\2\152"+ + "\1\u01a1\13\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\1\152\1\u0615\4\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0616\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\2\152\1\u042f\1\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\6\152"+ + "\1\u02ed\7\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\4\152\1\u0617\1\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\3\152\1\u0618\2\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\5\152"+ + "\1\u0619\10\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\11\152"+ + "\1\u061a\4\152\4\0\21\152\1\141\12\0\6\152\1\0"+ + "\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141"+ + "\1\152\1\0\4\152\2\0\4\152\10\0\1\141\2\152"+ + "\1\u061b\13\152\4\0\21\152\1\141\12\0\3\152\1\u061c"+ + "\2\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\3\152\1\u061d\2\0\4\152"+ + "\10\0\1\141\16\152\4\0\21\152\1\141\12\0\6\152"+ + "\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\6\152\1\u02e5\7\152\4\0\21\152\16\0\1\u061e\63\0"+ + "\1\u061e\47\0\1\u0443\143\0\1\u061f\63\0\1\u061f\47\0"+ + "\1\u0447\137\0\1\u045c\166\0\1\u0620\137\0\1\u0621\157\0"+ + "\1\u0622\166\0\1\u0623\133\0\1\u0624\137\0\1\u0625\73\0"+ + "\1\u0626\174\0\1\u0627\123\0\1\u0628\136\0\1\u0452\141\0"+ + "\1\u0629\160\0\1\u062a\114\0\1\u062b\120\0\1\u062c\203\0"+ + "\1\u0452\140\0\1\u0452\133\0\1\u062d\115\0\1\u062e\171\0"+ + "\1\u062f\105\0\1\u062f\74\0\1\u0630\202\0\1\u0631\117\0"+ + "\1\u055b\77\0\2\u0462\1\0\145\u0462\1\0\3\u0462\1\u0632"+ + "\7\u0462\1\u0632\3\u0462\5\u0632\2\u0462\1\u055f\4\u0462\2\u0632"+ + "\4\u0462\2\u0632\1\u0462\1\u0632\2\u0462\2\u0632\15\u0462\1\u0632"+ + "\1\u0462\1\u0632\5\u0462\1\u0632\20\u0462\1\u0632\5\u0462\2\u0632"+ + "\10\u01cf\1\u032d\3\u01cf\1\u0633\7\u01cf\1\u0633\3\u01cf\5\u0633"+ + "\2\u01cf\1\u032e\4\u01cf\2\u0633\4\u01cf\2\u0633\1\u01cf\1\u0633"+ + "\2\u01cf\2\u0633\15\u01cf\1\u0633\1\u01cf\1\u0633\5\u01cf\1\u0633"+ + "\20\u01cf\1\u0633\5\u01cf\2\u0633\2\u0332\1\u0333\6\u0332\1\u01d4"+ + "\2\u0332\1\u0634\7\u0332\1\u0634\3\u0332\5\u0634\7\u0332\2\u0634"+ + "\4\u0332\2\u0634\1\u0332\1\u0634\2\u0332\2\u0634\15\u0332\1\u0634"+ + "\1\u0332\1\u0634\5\u0332\1\u0634\20\u0332\1\u0634\5\u0332\2\u0634"+ + "\1\250\12\0\1\250\1\u0635\4\250\1\0\2\250\1\u0635"+ + "\2\0\1\250\5\u0635\1\250\1\0\5\250\2\u0635\1\0"+ + "\2\250\1\0\2\u0635\1\250\1\u0635\2\0\2\u0635\2\250"+ + "\7\0\4\250\1\u0635\1\250\1\u0635\5\250\1\u0635\3\250"+ + "\4\0\11\250\1\u0635\5\250\2\u0635\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u0636\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u0637\7\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0638"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\5\264"+ + "\1\u0639\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\1\u063a\20\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u063b\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u063c\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u063d\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u063e"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u0499\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u063f\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u033d\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u04a4\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0640\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0641\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0642\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0643\11\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u0644\4\264\1\0"+ + "\1\264\1\u0645\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u0646\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\1\264\1\u05c2\5\264\1\u0647"+ + "\11\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u057f\2\264\7\0\2\250\16\264\4\0"+ + "\1\264\1\u0648\17\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u04da\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0649\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u064a"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u056f\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u064b\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u064c\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u064d\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u064e\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u064f\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u0576\2\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0650\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u0651\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u036c\3\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u0576\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0652"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0653\1\264\1\u0654"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0655"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\7\264\1\u0656\6\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0657\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0658\20\264\1\250\12\0\1\u0659\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\2\264\1\u065a\16\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u065b\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u065c"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u065d\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u065e\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u065f\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0660\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0661\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0662\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\u0663\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\16\264\1\u05c3\2\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0664\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0665\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u04da\7\264\4\0\21\264\1\250\12\0\2\264\1\u05bb"+ + "\1\u05bc\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"; - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + private static final String ZZ_TRANS_PACKED_1 = + "\7\0\2\250\16\264\4\0\1\u05c1\15\264\1\u05c3\2\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0666\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0667\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0668\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0669\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u066a\15\264\4\0\21\264\1\250\12\0"+ + "\5\264\1\u066b\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u066c\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u066d\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u066e"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u066f"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0670\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0671\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0672\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0673\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0674\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0675\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0676\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\1\264\1\u0677\1\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\1\u0678"+ + "\20\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0679\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u067a\2\264\1\u067b\2\264\1\0"+ + "\1\264\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u033d"+ + "\7\0\2\250\12\264\1\u067d\3\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u067e\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u067f\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0680\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0480\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0681\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0682\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0683\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0362\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\20\264\1\u0684\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0685\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0686"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0687\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0688"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0689\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0596\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u068a\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u068b"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u068c\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u068d\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u068e\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u068f\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u0690\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0691\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0692\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0383\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0693\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0694\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0237\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u0695\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\250\1\u0696\4\250\1\0\2\250"+ + "\1\u0696\2\0\1\250\5\u0696\1\250\1\0\5\250\2\u0696"+ + "\1\0\2\250\1\0\2\u0696\1\250\1\u0696\2\0\2\u0696"+ + "\2\250\7\0\4\250\1\u0696\1\250\1\u0696\5\250\1\u0696"+ + "\3\250\4\0\11\250\1\u0696\5\250\2\u0696\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0697\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u04d0"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264"+ + "\1\u0698\1\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0699\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u069a\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u069b\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0396\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\6\264\1\u0396\7\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u069c\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u069d\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u069e"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u049f\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u069f"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06a0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\2\264\1\u06a1\16\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\14\264\1\u0481"+ + "\1\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06a2\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u06a3\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u06a4\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u06a5\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u06a6\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u06a7\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\3\264\1\u06a8\12\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u06a9\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u06aa\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06ab\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\43\0\1\u06ac\74\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u06ad\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u06ae\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\7\264"+ + "\1\u06af\6\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u06b0\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u06b1\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\13\264"+ + "\1\u06b2\2\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u06b3\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u06b4\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06b5\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\4\264\1\u06b6\2\264\1\0\1\u01d8\1\264"+ + "\1\u033d\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u06b7"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\2\333\1\0"+ + "\1\333\1\0\2\333\4\0\6\333\1\0\31\333\1\u04fb"+ + "\66\333\1\0\1\333\1\0\2\333\4\0\6\333\1\0"+ + "\57\333\1\u03d5\36\333\23\0\1\u06b8\36\0\1\u06b8\135\0"+ + "\1\u03da\141\0\1\u06b9\12\0\1\u06ba\1\0\1\u06bb\123\0"+ + "\1\337\136\0\1\u06bc\153\0\1\337\152\0\1\u06bd\64\0"+ + "\1\u06be\164\0\1\u06bf\151\0\1\u06c0\154\0\1\u06bc\66\0"+ + "\1\337\140\0\1\u06bc\136\0\1\u06c1\111\0\5\u0116\1\u06c2"+ + "\1\0\3\u0116\2\0\6\u0116\3\0\2\u0116\1\u06c2\3\u0116"+ + "\4\0\4\u0116\2\0\4\u0116\11\0\16\u0116\4\0\21\u0116"+ + "\2\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\u028d\61\73\1\u028d\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\32\73\1\120\30\73\1\120"+ + "\34\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\2\73\1\u06c3\33\73\1\u06c3\61\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\2\73\1\u02a8\33\73\1\u02a8"+ + "\61\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\53\73\1\u0128\21\73\1\u0128\22\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\2\73\1\u0513\33\73\1\u0513"+ + "\61\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\16\73\1\u06c4\61\73\1\u06c4\17\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\64\73\1\u06c5\12\73\1\u06c5"+ + "\20\73\1\0\1\73\1\0\2\73\4\0\3\73\1\u0164"+ + "\2\73\1\0\60\73\1\u0164\37\73\1\0\1\73\1\0"+ + "\2\73\4\0\6\73\1\0\53\73\1\u02bc\21\73\1\u02bc"+ + "\20\73\17\0\1\u06c6\64\0\1\u06c6\33\0\1\141\12\0"+ + "\1\141\1\152\4\141\1\0\2\141\1\152\2\0\1\141"+ + "\5\152\1\141\1\0\5\141\2\152\1\0\2\141\1\0"+ + "\2\152\1\141\1\152\2\0\2\152\2\141\10\0\3\141"+ + "\1\152\1\141\1\152\5\141\1\152\3\141\4\0\11\141"+ + "\1\152\5\141\2\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\2\152\1\u0612\3\152\1\0"+ + "\1\141\1\152\1\0\4\152\2\0\4\152\10\0\1\141"+ + "\16\152\4\0\21\152\1\141\12\0\6\152\1\0\3\152"+ + "\2\0\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\1\u06c7\3\152\10\0\1\141\16\152"+ + "\4\0\21\152\1\141\12\0\6\152\1\0\3\152\2\0"+ + "\7\152\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\1\u06c8\15\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\152\1\u01a1\14\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0425\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u042f\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\1\u06c9\15\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\1\u02e5\5\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\152"+ + "\1\u06ca\2\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\4\152"+ + "\10\0\1\141\2\152\1\u02d7\13\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\2\152\1\u0531\3\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\16\152\4\0\21\152\1\141"+ + "\12\0\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f"+ + "\6\152\1\0\1\141\1\152\1\0\4\152\2\0\1\u06cb"+ + "\3\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\2\152"+ + "\1\u06cc\3\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\3\152"+ + "\1\u06cd\2\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\16\152\4\0\21\152\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\2\152\1\u06ce"+ + "\1\152\10\0\1\141\16\152\4\0\21\152\17\0\1\u06cf"+ + "\64\0\1\u06cf\52\0\1\u06d0\64\0\1\u06d0\76\0\1\u0452"+ + "\176\0\1\u06d1\136\0\1\u06d2\121\0\1\u0452\136\0\1\u0550"+ + "\117\0\1\u0557\176\0\1\u0550\77\0\1\u0452\160\0\1\u06d3"+ + "\135\0\1\u06d4\154\0\1\u06d5\141\0\1\u06d6\103\0\1\u06d1"+ + "\171\0\1\u0620\103\0\1\u06d7\76\0\64\u062f\1\u0452\53\u062f"+ + "\75\0\1\u06d8\103\0\1\u06d9\76\0\10\u0462\1\0\3\u0462"+ + "\1\u06da\7\u0462\1\u06da\3\u0462\5\u06da\2\u0462\1\u055f\4\u0462"+ + "\2\u06da\4\u0462\2\u06da\1\u0462\1\u06da\2\u0462\2\u06da\15\u0462"+ + "\1\u06da\1\u0462\1\u06da\5\u0462\1\u06da\20\u0462\1\u06da\5\u0462"+ + "\2\u06da\10\u01cf\1\u032d\3\u01cf\1\253\7\u01cf\1\253\3\u01cf"+ + "\5\253\2\u01cf\1\u032e\4\u01cf\2\253\4\u01cf\2\253\1\u01cf"+ + "\1\253\2\u01cf\2\253\15\u01cf\1\253\1\u01cf\1\253\5\u01cf"+ + "\1\253\20\u01cf\1\253\5\u01cf\2\253\2\u0332\1\u0333\6\u0332"+ + "\1\u01d4\2\u0332\1\u01d2\7\u0332\1\u01d2\3\u0332\5\u01d2\7\u0332"+ + "\2\u01d2\4\u0332\2\u01d2\1\u0332\1\u01d2\2\u0332\2\u01d2\15\u0332"+ + "\1\u01d2\1\u0332\1\u01d2\5\u0332\1\u01d2\20\u0332\1\u01d2\5\u0332"+ + "\2\u01d2\1\250\12\0\1\250\1\264\4\250\1\0\2\250"+ + "\1\264\2\0\1\250\5\264\1\250\1\0\5\250\2\264"+ + "\1\0\2\250\1\0\2\264\1\250\1\264\2\0\2\264"+ + "\2\250\7\0\4\250\1\264\1\250\1\264\5\250\1\264"+ + "\3\250\4\0\11\250\1\264\5\250\2\264\1\250\12\0"+ + "\1\264\1\u06db\3\264\1\u06dc\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\2\264\1\u05bb\1\u067b\1\264\1\u06dc\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\u06dd\3\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\12\264\1\u06de\3\264\1\u05c3\2\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u06df\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u06e0\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\14\264\1\u06e1\1\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u06e2\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u06e3\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u06e4"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u06e5\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u06e6\10\264\4\0\21\264\1\250\12\0\5\264"+ + "\1\u06e7\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u06e8\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u06e9\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06ea\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06eb\2\264\7\0"+ + "\2\250\5\264\1\u06ec\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u068a\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u06ed\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u06ee\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u06ef"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u06f0\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06f1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\14\264\1\u06f2\4\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u06f3\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u06f4\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u06f5\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u06f6\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u06f7\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\4\264\1\u06f8\2\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u06f9\4\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u06fa\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u06fb\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06fc\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u06fd\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06fe\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u06ff\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0700\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0701\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u0702\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\11\264\1\u0703\4\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0704\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0705\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u0706\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0707\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0708\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0709\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070a\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070b\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u070c\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u033d\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\264\1\u070d\14\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u070e\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\1\264\1\u070f\1\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\1\0\1\u0710\4\264\7\0\2\250\12\264\1\u0711\3\264"+ + "\4\0\4\264\1\u0712\14\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04da\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0713\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u0714\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0715"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\1\264"+ + "\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\10\264\1\u0716\10\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u06b4\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0717\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0718\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0719\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0706\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u071a\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u071b\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u071c\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u071d\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\264\1\u071e\2\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u071f\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0720\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0721\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0722\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u023e\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0723\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u0724\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0725\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0726"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u0237\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u0727\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0728"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u033d"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0729"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u04c2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u072a"+ + "\3\264\1\0\1\250\1\264\1\0\3\264\1\u072b\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u072c"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u072d\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u072e\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u072f\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0730"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0731"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u068b"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0732"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0730\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u04d0\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u0733"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0734\15\264\4\0\21\264\1\250\12\0\1\250\1\u0735"+ + "\4\250\1\0\2\250\1\u0735\2\0\1\250\5\u0735\1\250"+ + "\1\0\5\250\2\u0735\1\0\2\250\1\0\2\u0735\1\250"+ + "\1\u0735\2\0\2\u0735\2\250\7\0\4\250\1\u0735\1\250"+ + "\1\u0735\5\250\1\u0735\3\250\4\0\11\250\1\u0735\5\250"+ + "\2\u0735\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u0396\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0736\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0737\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0738\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0739\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u073a\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u073b\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u069d\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u073c\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\1\u073d\5\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u073e\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\u073f"+ + "\2\264\1\u0740\2\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u033d\7\0\2\250\16\264\4\0\1\u0741\20\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0742\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0743\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u0744"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\14\264\1\u0745\1\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0746\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\2\264\1\u0747\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264\1\u0748"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\2\264\1\u0749"+ + "\16\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u074a\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u074b\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u074c\10\264\4\0\21\264"+ + "\42\0\1\u074d\75\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u074e"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u074f\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0750\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0751\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\15\264\1\u0752\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0753\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0754\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\2\264\1\u0755\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0756\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0757\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0758\7\0\2\250\16\264\4\0\21\264\24\0\1\u0759"+ + "\33\0\1\u0759\140\0\1\u0500\122\0\1\u075a\173\0\1\u075b"+ + "\117\0\1\u075c\137\0\1\337\154\0\1\u06ba\1\0\1\u06bb"+ + "\102\0\1\u075d\136\0\1\u06bd\140\0\1\u075e\75\0\2\73"+ + "\1\0\1\73\1\0\2\73\4\0\6\73\1\0\32\73"+ + "\1\u02ac\30\73\1\u02ac\34\73\1\0\1\73\1\0\2\73"+ + "\4\0\6\73\1\0\53\73\1\u012a\21\73\1\u012a\22\73"+ + "\1\0\1\73\1\0\2\73\4\0\4\73\1\u075f\1\73"+ + "\1\0\62\73\1\u075f\33\73\20\0\1\u0760\21\0\1\u0760"+ + "\75\0\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u042f\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u01a1\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0761\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\4\152\10\0\1\141\2\152\1\u02e5\13\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\3\152\1\u0762\2\152\1\0\1\141\1\152"+ + "\1\0\4\152\2\0\4\152\10\0\1\141\16\152\4\0"+ + "\21\152\1\141\12\0\6\152\1\0\3\152\2\0\7\152"+ + "\1\0\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152"+ + "\2\0\1\u0308\3\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u042a\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\1\u0763\15\152\4\0\21\152\20\0"+ + "\1\u0764\21\0\1\u0764\115\0\1\u0765\21\0\1\u0765\156\0"+ + "\1\u0766\141\0\1\u0767\131\0\1\u0768\31\0\1\u0769\72\0"+ + "\1\u0550\136\0\1\u076a\157\0\1\u076b\137\0\1\u076c\153\0"+ + "\1\u076d\144\0\1\u076e\35\0\10\u0462\1\0\3\u0462\1\u076f"+ + "\7\u0462\1\u076f\3\u0462\5\u076f\2\u0462\1\u055f\4\u0462\2\u076f"+ + "\4\u0462\2\u076f\1\u0462\1\u076f\2\u0462\2\u076f\15\u0462\1\u076f"+ + "\1\u0462\1\u076f\5\u0462\1\u076f\20\u0462\1\u076f\5\u0462\2\u076f"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u0770\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0771\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0772"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0773\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0774\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0775\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0776\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\13\264\1\u0777\5\264\1\250\12\0\1\264\1\u0778\4\264"+ + "\1\0\1\264\1\u0645\1\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0779\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u077a\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u077b\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u077c\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u077d\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u033d\14\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u077e\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u077f\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0780\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0781\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u03b1\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0782\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0783\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0784\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0785\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u0786\1\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0787\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0788\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\4\264\1\u05bd\1\264\1\0\2\264\1\u04aa"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0789\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u078a\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u078b\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u078c\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u06b4\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u078d\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u078e\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u078f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0790\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0791\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u0792\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\1\264\1\u0793\2\264\1\u0794\1\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\1\u0795\20\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0796\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0797\4\264\1\u0798\1\0\3\264"+ + "\2\0\4\264\1\u0799\2\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u079a\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u079b\16\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u04f8\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u079c\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\15\264\1\u079d\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\u079e\3\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\264"+ + "\1\u079f\3\264\1\u07a0\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u07a1\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u07a2\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\14\264\1\u07a3\1\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\1\264\1\u07a4\1\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\4\264\1\u07a5\1\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u07a6\15\264\4\0\21\264\13\0\1\u07a7\106\0"+ + "\1\u07a8\15\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u06df\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u07a9\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u07aa\7\0\2\250\16\264\4\0\21\264"+ + "\14\0\1\u07ab\6\0\1\u07ac\26\0\1\u07ad\2\0\1\u07ae"+ + "\62\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\1\264"+ + "\1\u07af\2\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u07b0\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u07b1\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u07b2\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\3\264\1\u07b3\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u07b4\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u07b5\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07b6"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u07b7"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\15\264\1\u07b8\3\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0479\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07b9"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0358"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u0472\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u07ba\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u07bb\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u07bc\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u04d0\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\24\0\1\u07bd\62\0\1\u07be\30\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07bf"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u07c0"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u07c1\1\u07c2"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u07c3"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\4\264\1\u056f\11\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07c4"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u07c5\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u07c6\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u056f\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u07c7\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\3\264\1\u07c8\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u0237"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u07c9\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\250\1\u022f\4\250"+ + "\1\0\2\250\1\u022f\2\0\1\250\5\u022f\1\250\1\0"+ + "\5\250\2\u022f\1\0\2\250\1\0\2\u022f\1\250\1\u022f"+ + "\2\0\2\u022f\2\250\7\0\4\250\1\u022f\1\250\1\u022f"+ + "\5\250\1\u022f\3\250\4\0\11\250\1\u022f\5\250\2\u022f"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\2\264\1\u0396\13\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u07ca\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u07cb\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u03b7"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u07cc\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07cd"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u07ce\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u07cf"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u07d0\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u07d1"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u07d2"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u07d3\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u07d4\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u07d5\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07d6"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u07d7\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u0363\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u07d8\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u07d9\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u07da\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\12\264\1\u07db\3\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u07dc\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\14\264\1\u07dd\1\264\4\0"+ + "\21\264\41\0\1\u07de\76\0\1\250\12\0\2\264\1\u07df"+ + "\3\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u07e0\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u07e1"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u07e2"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u07e3\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\2\264\1\u0755\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u07e4\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u07e5\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u01f9\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u07e6\16\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07e7"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u07e8"+ + "\12\264\4\0\21\264\21\0\1\u07e9\154\0\1\u07ea\203\0"+ + "\1\u07eb\136\0\1\337\74\0\1\u07ec\162\0\1\u07ed\56\0"+ + "\2\73\1\0\1\73\1\0\2\73\4\0\6\73\1\0"+ + "\1\73\1\u07ee\36\73\1\u07ee\55\73\21\0\1\u07ef\116\0"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\4\152\10\0\1\141\5\152\1\u07f0\10\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\2\152\1\u02d9\3\152\1\0\1\141\1\152\1\0"+ + "\4\152\2\0\4\152\10\0\1\141\16\152\4\0\21\152"+ + "\1\141\12\0\6\152\1\0\3\152\2\0\7\152\1\0"+ + "\1\u016f\6\152\1\0\1\141\1\152\1\0\4\152\2\0"+ + "\1\152\1\u06cd\2\152\10\0\1\141\16\152\4\0\21\152"+ + "\21\0\1\u07f1\137\0\1\u07f2\200\0\1\u0452\136\0\1\u07f3"+ + "\160\0\1\u07f4\116\0\1\u07f5\154\0\1\u0452\103\0\1\u07f6"+ + "\157\0\1\u062f\117\0\1\u062f\137\0\1\u07f7\75\0\10\u0462"+ + "\1\0\3\u0462\1\u0330\7\u0462\1\u0330\3\u0462\5\u0330\2\u0462"+ + "\1\u055f\4\u0462\2\u0330\4\u0462\2\u0330\1\u0462\1\u0330\2\u0462"+ + "\2\u0330\15\u0462\1\u0330\1\u0462\1\u0330\5\u0462\1\u0330\20\u0462"+ + "\1\u0330\5\u0462\2\u0330\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u07f8\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u07f9"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u07fa\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u07fb\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0471\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u03c3\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u07fc\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u07fd\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u07fe\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u07ff"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\2\264"+ + "\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u0800\16\264\1\250\12\0\3\264\1\u05bc"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0801\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0802"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0803\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0804\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0372\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0805\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\11\264\1\u0806\4\264"+ + "\4\0\21\264\1\250\12\0\1\u0807\5\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0808\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0809\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u080a\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u080b"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\264\1\u080c\14\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u080d\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\1\u080e\3\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u080f\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0810"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0811"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0812\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0813\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\264\1\u0814\2\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0815\20\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0816\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0817"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0818\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0819\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\1\264\1\u081a\2\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u081b"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u081c\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u081d"+ + "\12\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u081e\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\2\264\1\u081f\13\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u0820\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0821"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0822"+ + "\10\264\4\0\21\264\1\250\12\0\2\264\1\u05bb\1\u05bc"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0823\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\2\264\1\u05a1\1\264"+ + "\1\u05bd\1\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0824\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0825\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\6\264\1\324\12\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0826\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0827\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0828\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0829\13\264"+ + "\4\0\21\264\42\0\1\u082a\140\0\1\u082b\74\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u082c\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\15\264\1\u033d\4\0\21\264\61\0\1\u082d\137\0"+ + "\1\u082e\116\0\1\u082f\201\0\1\u0830\35\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0831\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0832\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0833\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u03cd\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0834\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0835"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0836\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0837"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0838\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0839\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u07dd\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u083a\10\264"+ + "\4\0\21\264\1\250\12\0\1\u083b\1\u083c\4\264\1\0"+ + "\1\264\1\u067c\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\2\264\1\u083d\3\264\1\324\12\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u06b4\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\43\0\1\u083e\154\0\1\u083e\57\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\7\264\1\u083f\6\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0840\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0841"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\1\264\1\u0842\2\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0843\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0844"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0845\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\3\264\1\u05bf\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0846\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0847"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u0848"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0849\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0383\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u084a\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u084b\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u06e9\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u084c\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u084d\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u084e\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u084f\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0850\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\3\264\1\u0851\2\264\1\0\1\264\1\u0852"+ + "\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\12\264"+ + "\1\u0853\3\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0854\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0855\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\4\264\1\u0856\2\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0857\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0858\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0859\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u085a\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u085b\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0372\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\76\0\1\u085c\41\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u085d\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u085e\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u085f\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0860\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u0861\11\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0862\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0863\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0864\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0865\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\2\264\1\u0597\16\264"+ + "\42\0\1\u0866\157\0\1\u075c\137\0\1\u0867\120\0\1\u0868"+ + "\74\0\2\73\1\0\1\73\1\0\2\73\4\0\6\73"+ + "\1\0\11\73\1\u012a\25\73\1\u012a\56\73\1\141\12\0"+ + "\6\152\1\0\3\152\2\0\7\152\1\0\1\u016f\6\152"+ + "\1\0\1\141\1\152\1\0\4\152\2\0\4\152\10\0"+ + "\1\141\16\152\4\0\13\152\1\u06cc\5\152\44\0\1\u0869"+ + "\153\0\1\u086a\121\0\1\u086b\155\0\1\u086c\166\0\1\u086d"+ + "\30\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u086e\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u086f\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\4\264\1\u0870\1\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u072c\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0871\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\4\264\1\u0872\1\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0873\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0874\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0875\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u0372\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0876"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0877\15\264\4\0\21\264\52\0\1\u07ad\65\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0878\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0879\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u087a\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u087b\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u087c\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u087d\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u087e\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\2\264\1\u05bb\3\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\16\264\1\u05c3\2\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\1\0"+ + "\1\u087f\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u0880\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0881\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\264\1\u0882\14\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0883\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0884\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\1\264\1\u0885\2\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u0886\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u0887\1\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0888\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0889\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u088a\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u088b"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\15\264\1\u088c\3\264\1\250\12\0\6\264\1\0\1\264"+ + "\1\u088d\1\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u088e\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u088f\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u0890"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\2\264\1\u0891"+ + "\13\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0892\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0893\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0686\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0894\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u033d\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u056e\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\3\264\1\u0895\2\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0896\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0897\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0898\2\264\7\0\2\250\16\264\4\0\21\264\61\0"+ + "\1\u0899\155\0\1\u089a\40\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u0666\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\42\0\1\u089b\140\0\1\u089c\176\0"+ + "\1\u089d\117\0\1\u089e\55\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u079d\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\3\264"+ + "\1\u0499\12\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u089f\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u08a0\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u0480\5\264\1\250\12\0\3\264\1\u08a1"+ + "\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\15\264"+ + "\1\u0372\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08a2\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0472\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0372\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u08a3\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u08a4\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08a5\1\u08a6\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\77\0\1\u08a7\40\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\2\264\1\u08a8\16\264\1\250\12\0\3\264\1\u05bc\2\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u05c1\20\264\1\250\12\0\1\264\1\u08a9"+ + "\4\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u08aa\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u08ab\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\6\264\1\u08ac\7\264\4\0\21\264\1\250\12\0\1\u0663"+ + "\5\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u08ad\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08ae"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u08af\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\13\264"+ + "\1\u0739\5\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u0237\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u08b0\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u08b1\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u05ec\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08b2\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\u08b3\5\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u08b4\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0472\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u08b5\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u08b6\2\264"+ + "\7\0\2\250\1\u08b7\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u08b8\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u08b9\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u08ba"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\11\264\1\u08bb\4\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\2\264\1\u08bc\1\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\3\264\1\u08bd\12\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\4\264\1\u08be"+ + "\1\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u08bf\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u08c0\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u08c1\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08c2\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08c3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\3\264\1\u08c4\2\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u08c5\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u08c6\4\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u08c7\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u077b\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\76\0\1\u08c8\121\0\1\u08c9\21\0\1\u08ca"+ + "\77\0\1\u08cb\155\0\1\u08cc\141\0\1\u086c\136\0\1\u0452"+ + "\157\0\1\u0452\133\0\1\u08cd\42\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u08ce\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u08cf\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08d0\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\2\264"+ + "\1\u08d1\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u08d2\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u08d3\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u08d4\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u08d5\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\1\u059b\6\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\264\1\u08d6\4\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u08d7\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u06b4\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u08d8\6\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\2\264\1\u08d9"+ + "\16\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u04da\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u08da\7\0\2\250\16\264\4\0\21\264"+ + "\13\0\1\u08db\106\0\1\u08dc\15\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u08dd"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u08de\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\1\u08df\5\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u08e0"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08e1"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u08e2\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u08e3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\1\u08e4\3\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\11\264\1\u08e5\4\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u08e6\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u08e7\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\7\264\1\u08e8\6\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u08e9\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u08ea\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u07dd\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u08eb\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u0857\5\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08ec\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u08ed"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\5\264\1\u08ee"+ + "\10\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u08ef\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u08f0\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u08f1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u08bb\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\2\264\1\u033d\1\264\7\0\2\250\16\264"+ + "\4\0\21\264\42\0\1\u08f2\156\0\1\u08f3\136\0\1\u08f4"+ + "\162\0\1\u08f5\116\0\1\u08f6\117\0\1\u08f7\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u08f8\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08f9\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08fa\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u08fb\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u033d\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\14\264\1\u08fc"+ + "\4\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u08fd\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u08fe\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\7\264\1\u08ff\6\264\4\0"+ + "\21\264\75\0\1\u08f6\42\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u08a5\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u0900\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\52\0\1\u0901\65\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0902\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0903\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u079c\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\7\264\1\u03cd"+ + "\6\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\3\264\1\u0801\2\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\1\u0904\15\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0905\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0906\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u0907\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\u0908\5\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u0909\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u090a\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\1\u057f\5\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0372\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u077f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u090b\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u090c\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u01ed\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u08bc\15\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\3\264\1\u090d\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\13\264\1\u090e\5\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u090f\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\11\264"+ + "\1\u0910\4\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\4\264"+ + "\1\u0911\11\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\4\264"+ + "\1\u0912\11\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\1\u0372\20\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0913"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0914\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u0915"+ + "\12\264\4\0\21\264\104\0\1\u06bd\75\0\1\u0509\140\0"+ + "\1\u06bd\136\0\1\u076a\174\0\1\u062f\40\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u0865\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u0916\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0917\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0918"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0919\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u091a\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u091b\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u091c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\2\264\1\u091d"+ + "\3\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u091e\3\264"+ + "\1\u091f\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0920"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\7\264\1\u0757\6\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u0921\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u0922\10\264\4\0\21\264\40\0\1\u0923\142\0"+ + "\1\u0924\74\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u0925\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0926\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0927\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\3\264\1\u08c4\2\264\1\0\2\264"+ + "\1\u04aa\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0928\15\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0929\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\5\264\1\u092a\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u092b\15\264\4\0\21\264\1\250\12\0"+ + "\2\264\1\u05bb\3\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\2\264\1\u092c\13\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u0372"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u092d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u077f\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\2\264"+ + "\1\u092e\13\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u092f\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0930\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0931\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u0932\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0933"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0934\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0935\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\60\0\1\u085c\117\0\1\u0936\202\0\1\u0937\74\0"+ + "\1\u0938\200\0\1\u0939\116\0\1\u093a\57\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u093b\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u049b"+ + "\3\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\3\264"+ + "\1\u093c\2\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u093d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\u093e\5\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\2\264\1\u093f\1\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\3\264\1\u0940"+ + "\12\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0941\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u0942\15\264\4\0"+ + "\21\264\102\0\1\u0943\35\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\3\264\1\u0944\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\1\264\1\u0945\4\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u0946\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0947"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0948"+ + "\4\264\4\0\21\264\1\250\12\0\1\u0949\5\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\7\264\1\u094a\11\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u094b\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\6\264"+ + "\1\u033d\7\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0372\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u094c\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u077f\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u094d"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u094e\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u094f\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u0950\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\1\264\1\u0951\4\264\1\0"+ + "\2\264\1\u0952\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\1\u0953\20\264\1\250\12\0\6\264\1\0"+ + "\1\264\1\u0954\1\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0955\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u0956\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u0957\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u056f\5\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0958\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\13\264\1\u06b4"+ + "\2\264\4\0\21\264\1\250\12\0\4\264\1\u05bd\1\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u0959"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\6\264\1\u056f"+ + "\7\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u095a\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\117\0\1\u095b\20\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\1\0\1\u095c\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u095d"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u095e\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u095f\15\264\4\0\21\264\53\0\1\u0960\166\0\1\u0961"+ + "\35\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\2\264\1\u0962\1\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\3\264"+ + "\1\u0963\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0964\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u01ed\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\264\1\u0965\4\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\3\264\1\u0966\12\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0967\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u0372\12\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0968\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u0969\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\4\264\1\u096a\11\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u01ed\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u096b\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\1\u096c\15\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u096d\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u096e\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u096f\2\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\103\0\1\u0970\131\0\1\u074d"+ + "\123\0\1\u0971\136\0\1\u0972\120\0\1\u0973\76\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\u0974\3\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0975\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u0976\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u0977\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\u0978\3\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u0979"+ + "\15\264\4\0\21\264\13\0\1\u097a\124\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\3\264\1\u077b"+ + "\7\0\2\250\16\264\4\0\21\264\103\0\1\u097b\34\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u097c\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u097d\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\11\264\1\u097e\4\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\16\264\1\u05c3\2\264\1\250"+ + "\12\0\1\264\1\u097f\4\264\1\0\2\264\1\u04aa\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u0980\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u0981\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u0982\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\1\u0983\5\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\264\1\u0984\14\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\u0985\5\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\1\264\1\u0969\2\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u0986\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u0987\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u0988\1\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0989\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\7\264\1\u098a\6\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u098b\10\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u098c\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u098d"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u066f\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\11\264\1\u098e\4\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\u098f"+ + "\5\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264\1\u0990"+ + "\2\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\44\0\1\u0991\126\0"+ + "\1\u0992\104\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0993\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u0994\10\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0372\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\63\0\1\u0995\153\0\1\u0996\40\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u0997"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u0576\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u0998\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u0999"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264"+ + "\1\u099a\4\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u099b\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\2\264"+ + "\1\u099c\3\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\2\264\1\u07dd"+ + "\1\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\1\u0797\5\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\1\264"+ + "\1\u099d\2\264\1\u099e\1\264\1\0\2\264\1\u04aa\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\16\264\1\u09a0\2\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u096a\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u09a1\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u09a2\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u09a3\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\100\0\1\u09a4\142\0\1\u09a5\75\0\1\u085c"+ + "\200\0\1\u09a6\35\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\u09a7\5\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\5\264\1\u09a8\10\264"+ + "\4\0\21\264\1\250\12\0\4\264\1\u09a9\1\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u09aa\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\2\264\1\u0706\13\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u06b4\11\264"+ + "\4\0\21\264\102\0\1\u09ab\144\0\1\u09ac\30\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09ad\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u09ae\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09af\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\2\264"+ + "\1\u09b0\1\264\7\0\2\250\1\u09b1\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u09b2\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u09b3\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u09b4\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u09b5\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\u09b6\5\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u0979\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u07dd\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\4\264\1\u09b7\2\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\16\264\1\u09a0"+ + "\2\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09b8\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u09b9\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u09ba\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u09bb\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\1\264\1\u057b\4\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\3\264\1\u09bc\2\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u0851\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u09bd\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u09be\11\264\4\0\21\264"+ + "\16\0\1\u09bf\1\u09c0\3\0\1\u09c1\63\0\1\u09c2\103\0"+ + "\1\u09c3\64\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u05ec\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\4\264\1\u09c4\1\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\60\0\1\u09c5\154\0\1\u09c6\42\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\1\0\1\u09c7"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\5\264\1\u09c8\10\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u09c9"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u09ca\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\4\264\1\u08e7\11\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09cb\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\1\u09cc\15\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u09cd\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\2\264\1\u09ce\1\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u09cf\10\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u09d0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\2\264\1\u09d1\3\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u08e7\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\42\0\1\u09d2\155\0\1\u09d3\122\0"+ + "\1\u09d4\74\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u09d5\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u09d6\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u09d7\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\2\264\1\u09d8\3\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\106\0\1\u09d9\111\0\1\u09da\57\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\6\264\1\u0824\7\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\14\264\1\u09db\1\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\2\264\1\u09dc\3\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\264"+ + "\1\u09dd\2\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u09de\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\1\u09df"+ + "\3\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\u09e0\3\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09e1\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u09e2"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u09e3\10\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u081e"+ + "\4\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u09e4\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u09e5"+ + "\15\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\1\264\1\u09e6\4\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\15\264\1\u06b4"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u09e7\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\264\1\u05ad\2\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\1\u056e\15\264\4\0"+ + "\21\264\43\0\1\u09c5\135\0\1\u09e8\173\0\1\u09e9\137\0"+ + "\1\u09ea\125\0\1\u09eb\54\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\5\264"+ + "\1\u09ec\10\264\4\0\21\264\42\0\1\u085c\176\0\1\u09ed"+ + "\52\0\1\u09ee\123\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u09ef\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u09f0\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09f1\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\u09f2\3\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u06f3\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\4\264\1\u09f3\11\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u09f4\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\1\264\1\u09f5\2\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\4\264\1\u09f6\11\264\4\0"+ + "\21\264\15\0\1\u09f7\122\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\1\u09f8"+ + "\15\264\4\0\21\264\24\0\1\u09f9\130\0\1\u09fa\225\0"+ + "\1\u09fb\34\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0"; - } + private static final String ZZ_TRANS_PACKED_2 = + "\4\264\7\0\2\250\4\264\1\u0576\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u09fc\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\1\u09fd\15\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u09fe\10\264\4\0\21\264\104\0"+ + "\1\u09ff\132\0\1\u0a00\40\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\u0a01\3\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\3\264\1\u099f\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\3\264\1\u0824\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\3\264\1\u0a02\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u03ce\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0a03\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\4\264\1\u0673\11\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\u0a04\3\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\16\264\4\0\13\264\1\u07dd\5\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\3\264"+ + "\1\u0a05\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\4\264\1\u0a06\11\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u0a07"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\1\264\1\u04a4"+ + "\2\264\7\0\2\250\16\264\4\0\21\264\102\0\1\u0a08"+ + "\100\0\1\u0a09\134\0\1\u0a0a\141\0\1\u0a0b\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u09e6\13\264\4\0\21\264\60\0"+ + "\1\u0a0c\154\0\1\u0a0d\42\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\2\264\1\u0a0e\3\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\3\264\1\u0a0f\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\4\264\1\u0a10"+ + "\11\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\3\264\1\u074f\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0a11\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\2\264\1\u0a12\13\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\6\264\1\u08e7\7\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\2\264\1\u092c\3\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\60\0\1\u0a13\57\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\1\264\1\u0a14\4\264"+ + "\1\0\1\250\1\264\1\0\4\264\2\0\4\264\7\0"+ + "\2\250\16\264\4\0\21\264\105\0\1\u0a15\113\0\1\u0a16"+ + "\177\0\1\u0a17\16\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0a18\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\10\264\1\u06e9"+ + "\5\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\264\1\u0a19\2\264\7\0\2\250"+ + "\16\264\4\0\21\264\62\0\1\u0a1a\157\0\1\u0a1b\35\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\1\264\1\u0a1c\4\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0a1d\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\11\264\1\u0a1e\4\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\1\264\1\u0a1f\2\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\7\264\1\u0a20\11\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0a21\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u08da\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\106\0\1\u0a22\134\0\1\u085c\107\0\1\u0a23\125\0\1\u0a24"+ + "\111\0\1\u0a25\36\0\1\u0a26\130\0\1\u0a27\74\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u0a28\10\264\4\0\21\264\1\250"+ + "\12\0\1\264\1\u0a29\4\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\1\264\1\u070f\1\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\4\264\1\u0a2a\1\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\5\264\1\u087e\10\264\4\0\21\264\101\0"+ + "\1\u0a2b\36\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\1\0\1\u0a2c\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\77\0\1\u0a2d\103\0\1\u0a2e\171\0\1\u0a2f\42\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0a30\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\2\264\1\u0a31\1\264\7\0\2\250\16\264\4\0\21\264"+ + "\60\0\1\u0a32\165\0\1\u0a33\31\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0a34\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\1\264\1\u0a35\2\264\7\0"+ + "\2\250\16\264\4\0\21\264\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\1\0\1\u0a36\4\264\7\0\2\250"+ + "\16\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\11\264\1\u0a37"+ + "\4\264\4\0\21\264\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\1\u0a38\3\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\3\264\1\u0a39\2\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\102\0\1\u0a3a\117\0\1\u08f2\136\0\1\u0a3b"+ + "\155\0\1\u0a3c\122\0\1\u0a3d\117\0\1\u0a3e\75\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\2\264\1\u0824\13\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\3\264\1\u0a3f\12\264\4\0\21\264\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\6\264\1\0\1\250\1\264\1\0\4\264\2\0\4\264"+ + "\7\0\2\250\1\u0a40\15\264\4\0\21\264\102\0\1\u0a41"+ + "\154\0\1\u0a42\100\0\1\u0a43\162\0\1\u08f2\135\0\1\u08f2"+ + "\36\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\5\264\1\u0a44\10\264\4\0"+ + "\21\264\1\250\12\0\6\264\1\0\1\264\1\u067c\1\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\2\0\4\264\7\0\2\250\16\264\4\0"+ + "\21\264\16\0\1\u0a45\5\0\1\u05e4\174\0\1\u0a46\56\0"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\5\264\1\u0a47\10\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\3\264\1\u0a48\2\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\123\0\1\u0a49\14\0\1\250\12\0\6\264\1\0\3\264"+ + "\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264"+ + "\1\0\4\264\1\0\1\u0a4a\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\1\264\1\u0a4b\4\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\21\264\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\6\264\1\u0372\7\264"+ + "\4\0\21\264\42\0\1\u0a4c\174\0\1\u0a4d\101\0\1\u0a4e"+ + "\173\0\1\u0a4f\103\0\1\u0a50\76\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\1\264\1\u0a51\2\264"+ + "\7\0\2\250\16\264\4\0\21\264\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\4\264\7\0\2\250"+ + "\5\264\1\u090c\10\264\4\0\21\264\41\0\1\u0a52\142\0"+ + "\1\u0a53\177\0\1\u0a54\33\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\13\264\1\u0a55\5\264\106\0\1\u0a56\113\0\1\u0a57"+ + "\55\0\1\250\12\0\6\264\1\0\3\264\2\0\7\264"+ + "\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\1\u0a58\15\264\4\0\21\264"+ + "\1\250\12\0\6\264\1\0\3\264\2\0\7\264\1\0"+ + "\1\u01d8\2\264\1\u0824\3\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\4\264\7\0\2\250\16\264\4\0\21\264"+ + "\60\0\1\u0a59\76\0\1\u0a5a\120\0\1\250\12\0\6\264"+ + "\1\0\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0"+ + "\1\250\1\264\1\0\4\264\2\0\3\264\1\u0680\7\0"+ + "\2\250\16\264\4\0\21\264\102\0\1\u0a5b\77\0\1\u0a5c"+ + "\177\0\1\u0a5d\134\0\1\u0a5e\135\0\1\u0a5f\42\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\3\264\1\u05a0\2\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\60\0"+ + "\1\u0a60\75\0\1\u09bf\4\0\1\u09c1\63\0\1\u09c2\72\0"+ + "\1\u0a61\75\0\1\250\12\0\6\264\1\0\3\264\2\0"+ + "\7\264\1\0\1\u01d8\6\264\1\0\1\250\1\264\1\0"+ + "\4\264\2\0\1\u0a62\3\264\7\0\2\250\16\264\4\0"+ + "\21\264\106\0\1\u0a63\54\0\1\u0a64\114\0\1\250\12\0"+ + "\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8\3\264"+ + "\1\u0a65\2\264\1\0\1\250\1\264\1\0\4\264\2\0"+ + "\4\264\7\0\2\250\16\264\4\0\21\264\42\0\1\u0a66"+ + "\135\0\1\u0a59\210\0\1\u08f2\41\0\1\u0a67\2\0\1\u0a68"+ + "\4\0\1\u0a69\63\0\1\u0a6a\134\0\1\u09c5\145\0\1\u085c"+ + "\107\0\1\u085c\154\0\1\u0a6b\142\0\1\u0a6c\35\0\1\250"+ + "\12\0\6\264\1\0\3\264\2\0\7\264\1\0\1\u01d8"+ + "\1\264\1\u06b4\4\264\1\0\1\250\1\264\1\0\4\264"+ + "\2\0\4\264\7\0\2\250\16\264\4\0\21\264\40\0"+ + "\1\u0a6d\160\0\1\u0a6e\56\0\1\250\12\0\6\264\1\0"+ + "\3\264\2\0\7\264\1\0\1\u01d8\6\264\1\0\1\250"+ + "\1\264\1\0\4\264\2\0\4\264\7\0\2\250\16\264"+ + "\4\0\2\264\1\u065a\16\264\55\0\1\u0a6f\166\0\1\u0a70"+ + "\76\0\1\u0a71\171\0\1\u0a72\137\0\1\u0a73\104\0\1\u0a74"+ + "\172\0\1\u0a75\104\0\1\u0a76\173\0\1\u0a77\143\0\1\u0a78"+ + "\117\0\1\u0a79\117\0\1\u0a7a\140\0\1\u0a7b\134\0\1\u0a7c"+ + "\156\0\1\u0a7d\123\0\1\u0a7e\155\0\1\u0a7f\153\0\1\u0a80"+ + "\122\0\1\u0a81\161\0\1\u0a82\50\0\1\u0a67\227\0\1\u0a7a"+ + "\107\0\1\u0a83\104\0\1\u0a84\246\0\1\u0a85\63\0\1\u0a86"+ + "\124\0\1\u0a87\161\0\1\u0a88\117\0\1\u0a89\157\0\1\u0a8a"+ + "\153\0\1\u0a8b\122\0\1\u0a8c\140\0\1\u0a8d\117\0\1\u0a8e"+ + "\176\0\1\u085c\116\0\1\u0a8f\137\0\1\u0a7a\163\0\1\u08f2"+ + "\76\0\1\u0a90\154\0\1\u04ec\134\0\1\u0a91\123\0\1\u0a92"+ + "\177\0\1\u0a93\133\0\1\u0a94\123\0\1\u0a95\140\0\1\u0939"+ + "\116\0\1\u0a96\140\0\1\u0a97\203\0\1\u085c\126\0\1\u0972"+ + "\42\0"; - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @param complete - * Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; - } + private static int [] zzUnpackTrans() { + int [] result = new int[246048]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, offset, result); + return result; + } - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public JSPTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public JSPTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 194) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\2\1\1\0\2\1\1\0\2\1\14\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\1\11\2\1"+ + "\2\11\2\1\4\11\1\1\1\11\1\1\1\11\26\1"+ + "\1\11\2\1\2\11\1\1\5\11\1\1\1\11\2\1"+ + "\1\11\2\1\1\11\1\1\2\11\14\1\1\11\7\1"+ + "\1\11\1\1\1\11\11\1\2\11\2\1\2\11\2\1"+ + "\1\11\6\1\1\11\4\1\1\11\2\1\1\11\10\1"+ + "\1\11\57\1\1\11\5\1\2\11\4\1\2\11\1\1"+ + "\2\11\5\1\3\11\4\1\4\11\1\1\1\11\6\1"+ + "\4\11\1\1\3\11\2\1\1\11\2\1\1\11\1\1"+ + "\1\11\1\1\1\11\5\1\2\11\5\0\1\11\105\1"+ + "\1\11\2\0\1\1\1\0\1\1\1\11\1\0\76\1"+ + "\1\11\2\1\3\0\1\11\12\0\1\11\2\0\1\11"+ + "\16\0\1\1\1\11\2\1\1\0\1\11\52\1\1\11"+ + "\130\1\2\11\3\1\1\0\1\11\1\1\15\0\1\1"+ + "\1\0\1\11\5\0\1\1\4\11\3\1\1\11\1\0"+ + "\1\11\1\0\1\11\4\0\101\1\1\11\1\0\1\1"+ + "\1\0\3\1\1\0\72\1\44\0\1\11\1\1\1\0"+ + "\3\1\1\0\242\1\25\0\2\1\2\11\2\0\44\1"+ + "\1\0\1\11\47\1\1\0\1\11\3\0\1\1\3\0"+ + "\1\1\1\11\11\0\1\11\11\0\1\1\5\0\212\1"+ + "\1\0\17\1\23\0\2\1\2\0\24\1\1\0\30\1"+ + "\37\0\205\1\1\0\15\1\16\0\14\1\1\0\21\1"+ + "\24\0\172\1\1\0\13\1\12\0\4\1\1\0\10\1"+ + "\4\0\1\1\6\0\66\1\1\0\3\1\1\0\22\1"+ + "\1\0\45\1\1\0\13\1\6\0\1\1\1\0\3\1"+ + "\13\0\70\1\2\0\2\1\4\0\16\1\2\0\37\1"+ + "\1\0\12\1\1\11\4\0\1\1\1\11\1\1\2\11"+ + "\5\0\14\1\1\0\45\1\2\0\1\1\4\0\15\1"+ + "\1\0\35\1\1\11\11\1\10\0\21\1\1\0\31\1"+ + "\6\0\10\1\1\0\2\1\1\0\35\1\3\0\1\11"+ + "\2\0\15\1\2\0\25\1\6\0\11\1\1\0\34\1"+ + "\1\0\4\1\2\0\21\1\5\0\6\1\1\0\1\1"+ + "\1\0\27\1\2\0\3\1\2\0\16\1\4\0\6\1"+ + "\2\0\25\1\2\0\2\1\2\0\15\1\3\0\4\1"+ + "\2\0\22\1\5\0\1\1\3\0\10\1\1\0\1\1"+ + "\3\0\4\1\2\0\15\1\4\0\1\1\2\0\10\1"+ + "\1\0\1\1\3\0\3\1\2\0\7\1\6\0\5\1"+ + "\1\0\1\1\3\0\2\1\2\0\6\1\6\0\3\1"+ + "\5\0\2\1\2\0\2\1\1\0\3\1\5\0\2\1"+ + "\3\0\1\1\2\0\2\1\2\0\1\1\5\0\1\1"+ + "\3\0\1\1\2\0\1\1\11\0\1\1\2\0\1\1"+ + "\16\0\1\1\43\0"; - if (zzReader != null) - zzReader.close(); - } + private static int [] zzUnpackAttribute() { + int [] result = new int[2711]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** the input device */ + private java.io.Reader zzReader; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + /** the current state of the DFA */ + private int zzState; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to JSPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; + + /** + * Token type specifying we're in a JSP hidden comment ("<%-- ... --%>"). + */ + private static final int INTERNAL_IN_HIDDEN_COMMENT = -10; + + /** + * Token type specifying we're in a JSP directive (either include, page + * or taglib). + */ + private static final int INTERNAL_IN_JSP_DIRECTIVE = -11; + + /** + * Token type specifying we're in JavaScript. + */ + static final int INTERNAL_IN_JS = -12; + + /** + * Token type specifying we're in a JavaScript multi-line comment. + */ + private static final int INTERNAL_IN_JS_MLC = -13; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -14; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -15; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -16; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -17; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -18; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -19; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -20; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in a Java documentation comment. + */ + private static final int INTERNAL_IN_JAVA_DOCCOMMENT = -(4<<11); + + /** + * Token type specifying we're in Java code. + */ + static final int INTERNAL_IN_JAVA_EXPRESSION = -(5<<11); + + /** + * Token type specifying we're in Java multiline comment. + */ + private static final int INTERNAL_IN_JAVA_MLC = -(6<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; + + /** + * The state JSP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int jspInState; + + /** + * Whether closing markup tags are automatically completed for JSP. + */ + private static boolean completeCloseTags; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public JSPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } - throw new Error(message); + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + jspInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = 0; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.PREPROCESSOR: + state = PI; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_HIDDEN_COMMENT: + state = HIDDEN_COMMENT; + break; + case INTERNAL_IN_JSP_DIRECTIVE: + state = JSP_DIRECTIVE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { + // INTERNAL_IN_JAVAxxx - jspInState or + // INTERNAL_IN_CSSxxx - cssPrevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_JAVA_DOCCOMMENT: + state = JAVA_DOCCOMMENT; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_EXPRESSION: + state = JAVA_EXPRESSION; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_IN_JAVA_MLC: + state = JAVA_MLC; + jspInState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = Token.NULL; + } + break; + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public JSPTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public JSPTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 202) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + throw new Error(message); + } - while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 67: { - addToken(Token.SEPARATOR); - yybegin(JSP_DIRECTIVE); - } - case 79: - break; - case 54: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 80: - break; - case 10: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.VARIABLE); - } - case 81: - break; - case 23: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE_SCRIPT); - } - case 82: - break; - case 70: { - start = zzMarkedPos - 4; - yybegin(HIDDEN_COMMENT); - } - case 83: - break; - case 4: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(INTAG); - } - case 84: - break; - case 49: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.PREPROCESSOR); - } - case 85: - break; - case 5: { - addToken(Token.WHITESPACE); - } - case 86: - break; - case 33: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; - } - case 87: - break; - case 74: { - addToken(Token.FUNCTION); - } - case 88: - break; - case 68: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.COMMENT_MULTILINE); - } - case 89: - break; - case 37: { - addToken(Token.ERROR_STRING_DOUBLE); - addEndToken(INTERNAL_IN_JAVA_EXPRESSION); - return firstToken; - } - case 90: - break; - case 42: { - addToken(Token.ERROR_CHAR); - } - case 91: - break; - case 20: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 92: - break; - case 77: { - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 6, zzMarkedPos - 1, Token.MARKUP_TAG_NAME); - start = zzMarkedPos; - yybegin(INTAG_SCRIPT); - } - case 93: - break; - case 62: { - addToken(Token.SEPARATOR); - yybegin(YYINITIAL); - } - case 94: - break; - case 50: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(YYINITIAL); - } - case 95: - break; - case 78: { - yybegin(YYINITIAL); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 7, zzMarkedPos - 2, Token.MARKUP_TAG_NAME); - addToken(zzMarkedPos - 1, zzMarkedPos - 1, Token.MARKUP_TAG_DELIMITER); - } - case 96: - break; - case 21: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 97: - break; - case 40: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JAVA_MLC); - return firstToken; - } - case 98: - break; - case 17: { /* A non-recognized HTML tag name */ - yypushback(yylength()); - yybegin(INTAG); - } - case 99: - break; - case 26: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 100: - break; - case 44: { - addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ - } - case 101: - break; - case 75: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 3, Token.COMMENT_MULTILINE); - } - case 102: - break; - case 76: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 103: - break; - case 46: { - addToken(Token.SEPARATOR); - yybegin(JAVA_EXPRESSION); - } - case 104: - break; - case 72: { - addToken(Token.COMMENT_MULTILINE); - } - case 105: - break; - case 69: { - start = zzMarkedPos - 3; - yybegin(JAVA_DOCCOMMENT); - } - case 106: - break; - case 48: { - start = zzMarkedPos - 2; - yybegin(PI); - } - case 107: - break; - case 45: { - int count = yylength(); - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 1); // yypushback(count-1); - yybegin(INTAG_CHECK_TAG_NAME); - } - case 108: - break; - case 59: { - yybegin(JAVA_EXPRESSION); - addToken(start, zzStartRead + 1, Token.COMMENT_DOCUMENTATION); - } - case 109: - break; - case 57: { - yybegin(JAVASCRIPT); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 110: - break; - case 28: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 111: - break; - case 12: { - addToken(Token.OPERATOR); - } - case 112: - break; - case 38: { - addToken(Token.ERROR_CHAR); - addEndToken(INTERNAL_IN_JAVA_EXPRESSION); - return firstToken; - } - case 113: - break; - case 71: { - start = zzMarkedPos - 4; - yybegin(COMMENT); - } - case 114: - break; - case 61: { - start = zzMarkedPos - 2; - yybegin(JAVA_MLC); - } - case 115: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 116: - break; - case 39: { - addToken(Token.VARIABLE); /* FIXME: Add token type to Token? */ - } - case 117: - break; - case 34: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_HIDDEN_COMMENT); - return firstToken; - } - case 118: - break; - case 8: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - return firstToken; - } - case 119: - break; - case 25: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 120: - break; - case 29: { - addToken(Token.ERROR_STRING_DOUBLE); - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 121: - break; - case 41: { - addToken(Token.ERROR_STRING_DOUBLE); - } - case 122: - break; - case 7: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 123: - break; - case 36: { - addEndToken(INTERNAL_IN_JAVA_EXPRESSION); - return firstToken; + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 124: - break; - case 24: { - yybegin(JAVASCRIPT); - addToken(Token.MARKUP_TAG_DELIMITER); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 66: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 139: break; + case 93: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 140: break; + case 75: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 141: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 142: break; + case 10: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 143: break; + case 62: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 144: break; + case 121: + { start = zzMarkedPos-4; yybegin(HIDDEN_COMMENT); + } + case 145: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 146: break; + case 133: + { addToken(Token.RESERVED_WORD_2); + } + case 147: break; + case 111: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 148: break; + case 108: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 149: break; + case 42: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 150: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 151: break; + case 134: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 152: break; + case 110: + { addToken(Token.REGEX); + } + case 153: break; + case 43: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 154: break; + case 138: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 155: break; + case 120: + { addToken(Token.FUNCTION); + } + case 156: break; + case 100: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; + } + case 157: break; + case 8: + { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; + } + case 158: break; + case 37: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 159: break; + case 58: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 160: break; + case 112: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack<>(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 161: break; + case 83: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 162: break; + case 78: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 163: break; + case 53: + { addToken(Token.ERROR_CHAR); + } + case 164: break; + case 80: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 165: break; + case 20: + { /* Allowing JSP expressions, etc. */ + } + case 166: break; + case 26: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 167: break; + case 36: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 168: break; + case 129: + { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.MARKUP_COMMENT); + } + case 169: break; + case 96: + { /* Skip all escaped chars. */ + } + case 170: break; + case 90: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 171: break; + case 29: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 172: break; + case 126: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 173: break; + case 118: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 174: break; + case 67: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 175: break; + case 17: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 176: break; + case 28: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 177: break; + case 76: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 178: break; + case 113: + { varDepths.push(Boolean.TRUE); + } + case 179: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 180: break; + case 55: + { addToken(Token.IDENTIFIER); /* Needed as InTagIdentifier ignores it. */ + } + case 181: break; + case 7: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; + } + case 182: break; + case 98: + { /* Invalid latin-1 character \xXX */ validJSString = false; + } + case 183: break; + case 25: + { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 184: break; + case 38: + { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 185: break; + case 124: + { addToken(Token.COMMENT_MULTILINE); + } + case 186: break; + case 48: + { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 187: break; + case 119: + { start = zzMarkedPos-3; yybegin(JAVA_DOCCOMMENT); + } + case 188: break; + case 87: + { start = zzMarkedPos-2; yybegin(PI); + } + case 189: break; + case 135: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 190: break; + case 63: + { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 191: break; + case 9: + { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; + } + case 192: break; + case 84: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-1); //yypushback(count-1); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 193: break; + case 74: + { /* Skip escaped chars. */ + } + case 194: break; + case 97: + { /* Invalid Unicode character \\uXXXX */ validJSString = false; + } + case 195: break; + case 132: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-5,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; cssPrevState = zzLexicalState; yybegin(INTAG_STYLE); + } + case 196: break; + case 101: + { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); + } + case 197: break; + case 88: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); + } + case 198: break; + case 99: + { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 199: break; + case 85: + { addToken(Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); + } + case 200: break; + case 31: + { addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 201: break; + case 40: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 202: break; + case 45: + { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; + } + case 203: break; + case 12: + { addToken(Token.OPERATOR); + } + case 204: break; + case 69: + { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); + } + case 205: break; + case 49: + { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 206: break; + case 122: + { start = zzMarkedPos-4; yybegin(COMMENT); + } + case 207: break; + case 116: + { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); + } + case 208: break; + case 109: + { addToken(Token.VARIABLE); + } + case 209: break; + case 56: + { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 210: break; + case 104: + { start = zzMarkedPos-2; yybegin(JAVA_MLC); + } + case 211: break; + case 81: + { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 212: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 213: break; + case 127: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 214: break; + case 24: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); + } + case 215: break; + case 103: + { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 216: break; + case 128: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 217: break; + case 65: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 218: break; + case 137: + { yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 219: break; + case 32: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 220: break; + case 46: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; + } + case 221: break; + case 73: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 222: break; + case 79: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 223: break; + case 64: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 224: break; + case 52: + { addToken(Token.ERROR_STRING_DOUBLE); + } + case 225: break; + case 41: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 226: break; + case 115: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JSP_DIRECTIVE); + } + case 227: break; + case 33: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 228: break; + case 131: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 229: break; + case 92: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 230: break; + case 95: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 231: break; + case 71: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 232: break; + case 106: + { yybegin(JAVA_EXPRESSION); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 233: break; + case 51: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; + } + case 234: break; + case 50: + { addToken(Token.ANNOTATION); + } + case 235: break; + case 30: + { addToken(Token.ERROR_IDENTIFIER); + } + case 236: break; + case 68: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 237: break; + case 123: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 238: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 239: break; + case 125: + { addToken(Token.LITERAL_BOOLEAN); + } + case 240: break; + case 18: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 241: break; + case 3: + { addNullToken(); return firstToken; + } + case 242: break; + case 57: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 243: break; + case 136: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 244: break; + case 59: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 245: break; + case 54: + { addToken(Token.RESERVED_WORD); + } + case 246: break; + case 105: + { addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; yybegin(jspInState); + } + case 247: break; + case 13: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 248: break; + case 107: + { addToken(Token.LITERAL_CHAR); + } + case 249: break; + case 16: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 250: break; + case 60: + { addToken(Token.DATA_TYPE); + } + case 251: break; + case 47: + { addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; + } + case 252: break; + case 35: + { addToken(Token.SEPARATOR); + } + case 253: break; + case 114: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 254: break; + case 72: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 255: break; + case 70: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 256: break; + case 19: + { addToken(Token.MARKUP_TAG_NAME); + } + case 257: break; + case 11: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 258: break; + case 130: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; + } + case 259: break; + case 91: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 260: break; + case 39: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 261: break; + case 94: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 262: break; + case 14: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 263: break; + case 117: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 264: break; + case 102: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 265: break; + case 77: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 266: break; + case 15: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 267: break; + case 34: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 268: break; + case 86: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 269: break; + case 89: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); jspInState = zzLexicalState; yybegin(JAVA_EXPRESSION); + } + case 270: break; + case 21: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); + } + case 271: break; + case 22: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 272: break; + case 44: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 273: break; + case 82: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 274: break; + case 61: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 275: break; + case 1: + { + } + case 276: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } - case 125: - break; - case 53: { - start = zzMarkedPos - 2; - yybegin(JS_MLC); + case 2712: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 126: - break; - case 56: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + case 2713: break; + case JAVA_EXPRESSION: { + addEndToken(INTERNAL_IN_JAVA_EXPRESSION - jspInState); return firstToken; } - case 127: - break; - case 52: { - addToken(Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_JS); - return firstToken; + case 2714: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } - case 128: - break; - case 63: { - yybegin(JAVA_EXPRESSION); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); + case 2715: break; + case HIDDEN_COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_HIDDEN_COMMENT); return firstToken; } - case 129: - break; - case 27: { - addToken(Token.ERROR_IDENTIFIER); + case 2716: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } - case 130: - break; - case 73: { - addToken(Token.LITERAL_BOOLEAN); + case 2717: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } - case 131: - break; - case 18: { /* Shouldn't happen */ - yypushback(1); - yybegin(INTAG); + case 2718: break; + case JAVA_DOCCOMMENT: { + yybegin(JAVA_EXPRESSION); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT - jspInState); return firstToken; } - case 132: - break; - case 3: { - addNullToken(); - return firstToken; + case 2719: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } - case 133: - break; - case 60: { - addToken(Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_JAVA_EXPRESSION); - return firstToken; + case 2720: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; } - case 134: - break; - case 43: { - addToken(Token.RESERVED_WORD); + case 2721: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } - case 135: - break; - case 13: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE); + case 2722: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } - case 136: - break; - case 65: { - yybegin(YYINITIAL); - addToken(Token.SEPARATOR); + case 2723: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; } - case 137: - break; - case 9: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; + case 2724: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; } - case 138: - break; - case 64: { - addToken(Token.LITERAL_CHAR); + case 2725: break; + case JSP_DIRECTIVE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); return firstToken; } - case 139: - break; - case 16: { - yybegin(YYINITIAL); - addToken(Token.MARKUP_TAG_DELIMITER); + case 2726: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } - case 140: - break; - case 35: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT); - return firstToken; + case 2727: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } - case 141: - break; - case 6: { - addToken(Token.DATA_TYPE); + case 2728: break; + case PI: { + addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } - case 142: - break; - case 32: { - addToken(Token.SEPARATOR); + case 2729: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; } - case 143: - break; - case 66: { - int count = yylength(); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 2); // yypushback(count-2); - yybegin(INTAG_CHECK_TAG_NAME); + case 2730: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 144: - break; - case 19: { - addToken(Token.MARKUP_TAG_NAME); + case 2731: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 145: - break; - case 11: { - addToken(Token.MARKUP_TAG_ATTRIBUTE); + case 2732: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } - case 146: - break; - case 30: { - addToken(Token.ERROR_CHAR); - addEndToken(INTERNAL_IN_JS); - return firstToken; + case 2733: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } - case 147: - break; - case 55: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 2734: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 148: - break; - case 14: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE); + case 2735: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } - case 149: - break; - case 15: { - addToken(Token.MARKUP_TAG_DELIMITER); + case 2736: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } - case 150: - break; - case 31: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + case 2737: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; } - case 151: - break; - case 51: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + case 2738: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 152: - break; - case 47: { - start = zzMarkedPos - 2; - yybegin(DTD); + case 2739: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } - case 153: - break; - case 58: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.PREPROCESSOR); - start = zzMarkedPos; + case 2740: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 154: - break; - case 22: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE_SCRIPT); + case 2741: break; + case JAVA_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JAVA_MLC - jspInState); return firstToken; } - case 155: - break; - case 1: { + case 2742: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } - case 156: - break; + case 2743: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case INATTR_SINGLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); - return firstToken; - } - case 1258: - break; - case JAVA_EXPRESSION: { - addEndToken(INTERNAL_IN_JAVA_EXPRESSION); - return firstToken; - } - case 1259: - break; - case HIDDEN_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_HIDDEN_COMMENT); - return firstToken; - } - case 1260: - break; - case JS_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; - } - case 1261: - break; - case INTAG_SCRIPT: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG_SCRIPT); - return firstToken; - } - case 1262: - break; - case JAVA_DOCCOMMENT: { - yybegin(JAVA_EXPRESSION); - addToken(start, zzEndRead, Token.COMMENT_DOCUMENTATION); - addEndToken(INTERNAL_IN_JAVA_DOCCOMMENT); - return firstToken; - } - case 1263: - break; - case JSP_DIRECTIVE: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_IN_JSP_DIRECTIVE); - return firstToken; - } - case 1264: - break; - case COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 1265: - break; - case INATTR_DOUBLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); - return firstToken; - } - case 1266: - break; - case PI: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - return firstToken; - } - case 1267: - break; - case JAVASCRIPT: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 1268: - break; - case INTAG: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 1269: - break; - case INTAG_CHECK_TAG_NAME: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 1270: - break; - case DTD: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 1271: - break; - case INATTR_SINGLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 1272: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 1273: - break; - case INATTR_DOUBLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 1274: - break; - case JAVA_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JAVA_MLC); - return firstToken; - } - case 1275: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex new file mode 100755 index 000000000..2167ceabc --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/JavaScriptTokenMaker.flex @@ -0,0 +1,990 @@ +/* + * 02/05/2012 + * + * JavaScriptTokenMaker.java - Parses a document into JavaScript tokens. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for JavaScript files. Its states could be simplified, but are + * kept the way they are to keep a degree of similarity (i.e. copy/paste) + * between it and HTML/JSP/PHPTokenMaker. This should cause no difference in + * performance.

                        + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                          + *
                        • The generated JavaScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • + *
                        + * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class JavaScriptTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -9; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + private static final int INTERNAL_E4X = -14; + + private static final int INTERNAL_E4X_INTAG = -15; + + private static final int INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION = -16; + + private static final int INTERNAL_IN_E4X_COMMENT = -17; + + private static final int INTERNAL_E4X_DTD = -18; + + private static final int INTERNAL_E4X_DTD_INTERNAL = -19; + + private static final int INTERNAL_E4X_ATTR_SINGLE = -20; + + private static final int INTERNAL_E4X_ATTR_DOUBLE = -21; + + private static final int INTERNAL_E4X_MARKUP_CDATA = -22; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Whether we're in an internal DTD. Only valid if in an e4x DTD. + */ + private boolean e4x_inInternalDtd; + + /** + * The previous e4x state. Only valid if in an e4x state. + */ + private int e4x_prevState; + + /** + * The version of JavaScript being highlighted. + */ + private static String jsVersion; + + /** + * Whether e4x is being highlighted. + */ + private static boolean e4xSupported; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on E4X tokens. + */ + private static final int LANG_INDEX_E4X = 1; + + private Stack varDepths; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public JavaScriptTokenMaker() { + super(); + } + + + static { + jsVersion = "1.7"; // Many folks using JS tend to be bleeding edge + e4xSupported = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes} "standard" token type for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + return TokenTypes.COMMENT_DOCUMENTATION; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + return TokenTypes.LITERAL_BACKQUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + return TokenTypes.ERROR_STRING_DOUBLE; + } + return type; + } + + + /** + * Returns the JavaScript version being highlighted. + * + * @return Supported JavaScript version. + * @see #isJavaScriptCompatible(String) + */ + public static String getJavaScriptVersion() { + return jsVersion; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + e4x_prevState = YYINITIAL; + e4x_inInternalDtd = false; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + start = text.offset; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + case INTERNAL_E4X: + state = E4X; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_INTAG: + state = E4X_INTAG; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION: + state = E4X_PI; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD: + state = E4X_DTD; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD_INTERNAL: + state = E4X_DTD; + e4x_inInternalDtd = true; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_SINGLE: + state = E4X_INATTR_SINGLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_DOUBLE: + state = E4X_INATTR_DOUBLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_CDATA: + state = E4X_CDATA; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_E4X_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_E4X_COMMENT: + state = E4X_COMMENT; + break; + } + e4x_prevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_E4X; + } + else { // Shouldn't happen + state = Token.NULL; + } + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether e4x is being highlighted. + * + * @return Whether e4x is being highlighted. + * @see #setE4xSupported(boolean) + */ + public static boolean isE4xSupported() { + return e4xSupported; + } + + + /** + * Returns whether features for a specific JS version should be honored + * while highlighting. + * + * @param version JavaScript version required + * @return Whether the JavaScript version is the same or greater than + * version required. + */ + public static boolean isJavaScriptCompatible(String version) { + return jsVersion.compareTo(version) >= 0; + } + + + /** + * Sets whether e4x should be highlighted. A repaint should be forced on + * all RSyntaxTextAreas editing JavaScript if this property + * is changed to see the difference. + * + * @param supported Whether e4x should be highlighted. + * @see #isE4xSupported() + */ + public static void setE4xSupported(boolean supported) { + e4xSupported = supported; + } + + + /** + * Set the supported JavaScript version because some keywords were + * introduced on or after this version. + * + * @param javaScriptVersion The version of JavaScript to support, such as + * "1.5" or "1.6". + * @see #isJavaScriptCompatible(String) + * @see #getJavaScriptVersion() + */ + public static void setJavaScriptVersion(String javaScriptVersion) { + jsVersion = javaScriptVersion; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_E4xAttribute = ("@"{Letter}{LetterOrDigit}*) + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") + +e4x_NameStartChar = ([\:A-Z_a-z]) +e4x_NameChar = ({e4x_NameStartChar}|[\-\.0-9]) +e4x_TagName = ({e4x_NameStartChar}{e4x_NameChar}*) +e4x_Identifier = ([^ \t\n<&;]+) +e4x_EndXml = ([;]) +e4x_EntityReference = ([&][^; \t]*[;]?) +e4x_InTagIdentifier = ([^ \t\n\"\'=\/>]+) +e4x_CDataBegin = ("") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_DOCCOMMENT +%state JS_EOL_COMMENT +%state E4X +%state E4X_COMMENT +%state E4X_PI +%state E4X_DTD +%state E4X_INTAG +%state E4X_INATTR_DOUBLE +%state E4X_INATTR_SINGLE +%state E4X_CDATA +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + +%% + + { + + // ECMA 3+ keywords. + "break" | + "continue" | + "delete" | + "else" | + "for" | + "function" | + "if" | + "in" | + "new" | + "this" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //e4X + "each" {if(e4xSupported){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + // e4x miscellaneous + {JS_E4xAttribute} { addToken(isE4xSupported() ? Token.MARKUP_TAG_ATTRIBUTE : Token.ERROR_IDENTIFIER); } + + // Reserved (but not yet used) ECMA keywords. + "abstract" { addToken(Token.RESERVED_WORD); } + "boolean" { addToken(Token.DATA_TYPE); } + "byte" { addToken(Token.DATA_TYPE); } + "case" { addToken(Token.RESERVED_WORD); } + "catch" { addToken(Token.RESERVED_WORD); } + "char" { addToken(Token.DATA_TYPE); } + "class" { addToken(Token.RESERVED_WORD); } + "const" { addToken(Token.RESERVED_WORD); } + "debugger" { addToken(Token.RESERVED_WORD); } + "default" { addToken(Token.RESERVED_WORD); } + "do" { addToken(Token.RESERVED_WORD); } + "double" { addToken(Token.DATA_TYPE); } + "enum" { addToken(Token.RESERVED_WORD); } + "export" { addToken(Token.RESERVED_WORD); } + "extends" { addToken(Token.RESERVED_WORD); } + "final" { addToken(Token.RESERVED_WORD); } + "finally" { addToken(Token.RESERVED_WORD); } + "float" { addToken(Token.DATA_TYPE); } + "goto" { addToken(Token.RESERVED_WORD); } + "implements" { addToken(Token.RESERVED_WORD); } + "import" { addToken(Token.RESERVED_WORD); } + "instanceof" { addToken(Token.RESERVED_WORD); } + "int" { addToken(Token.DATA_TYPE); } + "interface" { addToken(Token.RESERVED_WORD); } + "long" { addToken(Token.DATA_TYPE); } + "native" { addToken(Token.RESERVED_WORD); } + "package" { addToken(Token.RESERVED_WORD); } + "private" { addToken(Token.RESERVED_WORD); } + "protected" { addToken(Token.RESERVED_WORD); } + "public" { addToken(Token.RESERVED_WORD); } + "short" { addToken(Token.DATA_TYPE); } + "static" { addToken(Token.RESERVED_WORD); } + "super" { addToken(Token.RESERVED_WORD); } + "switch" { addToken(Token.RESERVED_WORD); } + "synchronized" { addToken(Token.RESERVED_WORD); } + "throw" { addToken(Token.RESERVED_WORD); } + "throws" { addToken(Token.RESERVED_WORD); } + "transient" { addToken(Token.RESERVED_WORD); } + "try" { addToken(Token.RESERVED_WORD); } + "volatile" { addToken(Token.RESERVED_WORD); } + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" { addToken(Token.RESERVED_WORD); } + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + [\+]?"="{Whitespace}*"<" { + int start = zzStartRead; + int operatorLen = yycharat(0)=='+' ? 2 : 1; + int yylen = yylength(); // Cache before first addToken() invalidates it + //System.out.println("'" + yytext() + "': " + yylength() + ", " + (operatorLen+1)); + addToken(zzStartRead,zzStartRead+operatorLen-1, Token.OPERATOR); + if (yylen>operatorLen+1) { + //System.out.println((start+operatorLen) + ", " + (zzMarkedPos-2)); + addToken(start+operatorLen,zzMarkedPos-2, Token.WHITESPACE); + } + zzStartRead = zzCurrentPos = zzMarkedPos = zzMarkedPos - 1; + if (isE4xSupported()) { + // Scanning will continue with "<" as markup tag start + yybegin(E4X, LANG_INDEX_E4X); + } + // Found e4x (or syntax error) but option not enabled; + // Scanning will continue at "<" as operator + } + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + { + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(e4x_prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_E4X_COMMENT - e4x_prevState); return firstToken; } +} + + { + [^\n\?]+ {} + "?>" { yybegin(E4X); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); addEndToken(INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n\[\]<>]+ {} + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "-->" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n\?]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } - "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} - <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { [^\n>]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.FUNCTION); return firstToken; } - ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.FUNCTION); } - <> { addToken(start,zzStartRead-1, Token.FUNCTION); return firstToken; } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { @@ -533,14 +537,14 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) { [^\"]* {} - [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { [^\']* {} - [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { @@ -557,21 +561,21 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) { [^\"]* {} - [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } + [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { [^\']* {} - [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } + [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); } + <> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } } { [^\]]+ {} - {CDataEnd} { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.VARIABLE); addToken(temp,zzMarkedPos-1, Token.DATA_TYPE); } + {CDataEnd} { int temp=zzStartRead; yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.MARKUP_CDATA); addToken(temp,zzMarkedPos-1, Token.MARKUP_CDATA_DELIMITER); } "]" {} - <> { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_CDATA); return firstToken; } } { @@ -595,7 +599,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) /* ActionScript snippets are usually wrapped in CDATA. */ {CDataBegin} | - {CDataEnd} { addToken(Token.DATA_TYPE); } + {CDataEnd} { addToken(Token.MARKUP_CDATA_DELIMITER); } /* Keywords */ "add" | @@ -803,7 +807,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_AS); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java old mode 100644 new mode 100755 index cb6983a3e..fb2d15544 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/MxmlTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 1/21/11 4:03 PM */ +/* The following code was generated by JFlex 1.4.1 on 6/18/15 6:41 PM */ /* * 01/21/2011 * * MxmlTokenMaker.java - Generates tokens for MXML syntax highlighting. - * Copyright (C) 2011 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,2792 +15,2712 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * Scanner for MXML. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                        - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                        - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * * If you wish to regenerate this file yourself, keep in mind the following: *

                          - *
                        • The generated MXMLTokenMaker.java file will contain two definitions of both zzRefill - * and yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                        • - *
                        • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                        • - *
                        • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                        • + *
                        • The generated MXMLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • *
                        - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class MxmlTokenMaker extends AbstractMarkupTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int AS_EOL_COMMENT = 13; - public static final int AS_MLC = 12; - public static final int INTAG_SCRIPT = 7; - public static final int INATTR_DOUBLE_SCRIPT = 8; - public static final int CDATA = 10; - public static final int INATTR_SINGLE_SCRIPT = 9; - public static final int DTD = 3; - public static final int INATTR_SINGLE = 6; - public static final int INATTR_DOUBLE = 5; - public static final int YYINITIAL = 0; - public static final int AS = 11; - public static final int INTAG = 4; - public static final int COMMENT = 1; - public static final int PI = 2; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\12\1\10\1\0\1\7\1\37\22\0\1\106\1\16\1\32" + - "\1\40\1\41\1\64\1\13\1\31\2\74\1\43\1\52\1\62\1\51" + - "\1\6\1\42\1\3\3\36\4\27\2\2\1\5\1\14\1\11\1\15" + - "\1\25\1\65\1\73\1\22\1\26\1\20\1\21\1\50\1\46\1\1" + - "\1\123\1\122\1\1\1\111\1\45\1\112\1\113\1\114\1\117\1\124" + - "\1\121\1\67\1\23\1\120\1\116\1\1\1\44\2\1\1\17\1\30" + - "\1\24\1\63\1\4\1\0\1\56\1\35\1\70\1\77\1\55\1\47" + - "\1\107\1\75\1\71\1\115\1\100\1\57\1\103\1\34\1\101\1\72" + - "\1\104\1\54\1\60\1\53\1\33\1\110\1\76\1\105\1\102\1\1" + - "\1\61\1\63\1\61\1\66\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\2\1\1\0\2\1\4\0\2\2\1\3\1\4" + - "\1\5\1\6\1\1\1\7\2\1\1\10\2\1\1\11" + - "\1\12\2\13\1\14\1\15\1\16\1\17\1\20\1\1" + - "\1\21\1\1\1\22\1\23\1\24\1\25\1\26\1\27" + - "\2\1\1\30\1\2\2\31\1\2\1\32\2\14\1\2" + - "\1\14\1\33\3\2\1\33\1\14\1\2\1\34\1\35" + - "\3\2\2\30\1\14\3\2\2\14\25\2\1\1\1\36" + - "\5\1\1\37\3\1\1\40\1\41\1\4\1\42\1\6" + - "\1\0\1\43\1\0\1\30\1\44\2\45\1\31\2\44" + - "\1\46\1\44\3\0\3\2\1\0\1\14\1\2\1\34" + - "\1\0\1\34\1\47\2\35\1\50\5\2\1\51\3\2" + - "\1\30\1\52\1\53\21\2\1\51\20\2\2\51\12\2" + - "\1\51\2\2\1\51\11\2\1\54\12\0\1\55\1\56" + - "\1\57\1\30\1\45\1\0\2\46\3\0\3\2\1\60" + - "\1\2\1\34\1\61\2\34\1\47\1\34\1\35\1\62" + - "\1\35\6\2\1\51\4\2\1\30\1\0\1\6\5\2" + - "\1\51\23\2\1\51\10\2\1\6\24\2\1\51\1\2" + - "\1\6\7\2\11\0\1\63\1\30\3\0\2\2\1\34" + - "\1\35\10\2\1\30\1\64\6\2\1\0\1\65\13\2" + - "\1\66\3\2\1\66\36\2\2\0\1\67\2\0\1\70" + - "\1\0\1\30\2\0\1\2\1\34\1\35\7\2\1\30" + - "\5\2\1\51\1\0\26\2\1\66\13\2\5\0\1\30" + - "\2\0\1\2\1\34\1\35\6\2\1\30\5\2\1\0" + - "\30\2\3\0\4\2\1\30\2\2\1\0\23\2\3\0" + - "\1\2\1\66\1\2\1\51\21\2\1\71\1\0\1\72" + - "\4\2\1\66\40\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[614]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\125\0\252\0\377\0\u0154\0\u01a9\0\u01fe\0\u0253" + - "\0\u02a8\0\u02fd\0\u0352\0\u03a7\0\u03fc\0\u0451\0\u04a6\0\u04fb" + - "\0\u0550\0\u05a5\0\u05fa\0\u064f\0\u06a4\0\u0550\0\u06f9\0\u074e" + - "\0\u0550\0\u07a3\0\u07f8\0\u0550\0\u0550\0\u084d\0\u08a2\0\u0550" + - "\0\u0550\0\u0550\0\u0550\0\u08f7\0\u094c\0\u0550\0\u09a1\0\u0550" + - "\0\u0550\0\u0550\0\u0550\0\u0550\0\u0550\0\u09f6\0\u0a4b\0\u0aa0" + - "\0\u0af5\0\u0b4a\0\u0b9f\0\u0bf4\0\u0550\0\u0c49\0\u0c9e\0\u0550" + - "\0\u0cf3\0\u0550\0\u0d48\0\u0d9d\0\u0df2\0\u0e47\0\u0e9c\0\u0ef1" + - "\0\u0f46\0\u0f9b\0\u0ff0\0\u1045\0\u109a\0\u0550\0\u10ef\0\u1144" + - "\0\u1199\0\u11ee\0\u1243\0\u1298\0\u12ed\0\u1342\0\u1397\0\u13ec" + - "\0\u1441\0\u1496\0\u14eb\0\u1540\0\u1595\0\u15ea\0\u163f\0\u1694" + - "\0\u16e9\0\u173e\0\u1793\0\u17e8\0\u183d\0\u1892\0\u18e7\0\u193c" + - "\0\u1991\0\u19e6\0\u1a3b\0\u0550\0\u1a90\0\u1ae5\0\u1b3a\0\u1b8f" + - "\0\u1be4\0\u0550\0\u1c39\0\u1c8e\0\u1ce3\0\u1d38\0\u1d8d\0\u1de2" + - "\0\u0550\0\u0550\0\u1e37\0\u0550\0\u1e8c\0\u1ee1\0\u1f36\0\u1f8b" + - "\0\u1f36\0\u1f36\0\u1fe0\0\u2035\0\u208a\0\u20df\0\u0cf3\0\u2134" + - "\0\u2189\0\u21de\0\u2233\0\u2288\0\u22dd\0\u2332\0\u2387\0\u23dc" + - "\0\u2431\0\u2486\0\u0550\0\u24db\0\u2530\0\u0550\0\u2585\0\u25da" + - "\0\u262f\0\u2684\0\u26d9\0\u272e\0\u2783\0\u27d8\0\u282d\0\u2882" + - "\0\u0550\0\u28d7\0\u292c\0\u2981\0\u29d6\0\u2a2b\0\u2a80\0\u2ad5" + - "\0\u2b2a\0\u2b7f\0\u2bd4\0\u2c29\0\u2c7e\0\u2cd3\0\u2d28\0\u2d7d" + - "\0\u2dd2\0\u2e27\0\u2e7c\0\u0af5\0\u2ed1\0\u2f26\0\u2f7b\0\u2fd0" + - "\0\u3025\0\u307a\0\u30cf\0\u3124\0\u3179\0\u31ce\0\u3223\0\u3278" + - "\0\u32cd\0\u3322\0\u3377\0\u33cc\0\u3421\0\u3476\0\u34cb\0\u3520" + - "\0\u3575\0\u35ca\0\u361f\0\u3674\0\u36c9\0\u371e\0\u3773\0\u37c8" + - "\0\u381d\0\u3872\0\u38c7\0\u391c\0\u3971\0\u39c6\0\u3a1b\0\u3a70" + - "\0\u3ac5\0\u3b1a\0\u3b6f\0\u3bc4\0\u3c19\0\u0550\0\u3c6e\0\u3cc3" + - "\0\u3d18\0\u3d6d\0\u3dc2\0\u3e17\0\u3e6c\0\u3ec1\0\u3f16\0\u3f6b" + - "\0\u3fc0\0\u0550\0\u0550\0\u4015\0\u406a\0\u40bf\0\u1f36\0\u4114" + - "\0\u4169\0\u41be\0\u4213\0\u4268\0\u42bd\0\u4312\0\u0550\0\u4367" + - "\0\u43bc\0\u0550\0\u4411\0\u4466\0\u2431\0\u44bb\0\u4510\0\u0550" + - "\0\u4565\0\u45ba\0\u460f\0\u4664\0\u46b9\0\u470e\0\u4763\0\u47b8" + - "\0\u480d\0\u4862\0\u48b7\0\u490c\0\u4961\0\u49b6\0\u4a0b\0\u4a60" + - "\0\u4ab5\0\u4b0a\0\u4b5f\0\u4bb4\0\u4c09\0\u4c5e\0\u4cb3\0\u4d08" + - "\0\u4d5d\0\u4db2\0\u4e07\0\u4e5c\0\u4eb1\0\u4f06\0\u4f5b\0\u4fb0" + - "\0\u5005\0\u505a\0\u50af\0\u5104\0\u5159\0\u51ae\0\u5203\0\u5258" + - "\0\u52ad\0\u5302\0\u5357\0\u53ac\0\u5401\0\u5456\0\u54ab\0\u5500" + - "\0\u5555\0\u55aa\0\u55ff\0\u5654\0\u56a9\0\u56fe\0\u5753\0\u57a8" + - "\0\u57fd\0\u5852\0\u58a7\0\u58fc\0\u5951\0\u59a6\0\u59fb\0\u5a50" + - "\0\u5aa5\0\u5afa\0\u5b4f\0\u5ba4\0\u5bf9\0\u5c4e\0\u5ca3\0\u5cf8" + - "\0\u0af5\0\u5d4d\0\u5da2\0\u5df7\0\u5e4c\0\u5ea1\0\u5ef6\0\u5f4b" + - "\0\u5fa0\0\u5ff5\0\u604a\0\u609f\0\u60f4\0\u6149\0\u619e\0\u61f3" + - "\0\u6248\0\u0550\0\u629d\0\u62f2\0\u6347\0\u639c\0\u63f1\0\u6446" + - "\0\u649b\0\u64f0\0\u6545\0\u659a\0\u65ef\0\u6644\0\u6699\0\u66ee" + - "\0\u6743\0\u6798\0\u67ed\0\u0550\0\u6842\0\u6897\0\u68ec\0\u6941" + - "\0\u6996\0\u69eb\0\u6a40\0\u0af5\0\u6a95\0\u6aea\0\u6b3f\0\u6b94" + - "\0\u6be9\0\u6c3e\0\u6c93\0\u6ce8\0\u6d3d\0\u6d92\0\u6de7\0\u0af5" + - "\0\u6e3c\0\u6e91\0\u6ee6\0\u6f3b\0\u6f90\0\u6fe5\0\u703a\0\u708f" + - "\0\u70e4\0\u7139\0\u718e\0\u71e3\0\u7238\0\u728d\0\u72e2\0\u7337" + - "\0\u738c\0\u73e1\0\u7436\0\u748b\0\u74e0\0\u7535\0\u758a\0\u75df" + - "\0\u7634\0\u7689\0\u76de\0\u7733\0\u7788\0\u77dd\0\u7832\0\u7887" + - "\0\u78dc\0\u7931\0\u7986\0\u79db\0\u7a30\0\u7a85\0\u7ada\0\u7b2f" + - "\0\u7b84\0\u7bd9\0\u7c2e\0\u7c83\0\u7cd8\0\u7d2d\0\u7d82\0\u7dd7" + - "\0\u7e2c\0\u7e81\0\u7ed6\0\u7f2b\0\u7f80\0\u7fd5\0\u802a\0\u807f" + - "\0\u80d4\0\u8129\0\u817e\0\u81d3\0\u8228\0\u827d\0\u82d2\0\u8327" + - "\0\u837c\0\u83d1\0\u8426\0\u847b\0\u84d0\0\u8525\0\u857a\0\u85cf" + - "\0\u8624\0\u8679\0\u86ce\0\u8723\0\u8778\0\u87cd\0\u8822\0\u8877" + - "\0\u88cc\0\u8921\0\u8976\0\u89cb\0\u8a20\0\u8a75\0\u8aca\0\u8b1f" + - "\0\u8b74\0\u8bc9\0\u8c1e\0\u8c73\0\u8cc8\0\u8d1d\0\u8d72\0\u8dc7" + - "\0\u8e1c\0\u7a30\0\u8e71\0\u7b2f\0\u8ec6\0\u8f1b\0\u8f70\0\u8fc5" + - "\0\u901a\0\u906f\0\u90c4\0\u9119\0\u916e\0\u91c3\0\u9218\0\u926d" + - "\0\u92c2\0\u9317\0\u936c\0\u93c1\0\u9416\0\u946b\0\u94c0\0\u9515" + - "\0\u956a\0\u95bf\0\u9614\0\u9669\0\u96be\0\u9713\0\u9768\0\u97bd" + - "\0\u9812\0\u9867\0\u98bc\0\u9911\0\u9966\0\u99bb\0\u9a10\0\u9a65" + - "\0\u9aba\0\u9b0f\0\u9b64\0\u9bb9\0\u9c0e\0\u9c63\0\u9cb8\0\u9d0d" + - "\0\u9d62\0\u9db7\0\u9e0c\0\u9e61\0\u9eb6\0\u9f0b\0\u9f60\0\u9fb5" + - "\0\ua00a\0\ua05f\0\ua0b4\0\ua109\0\ua15e\0\ua1b3\0\ua208\0\ua25d" + - "\0\ua2b2\0\ua307\0\ua35c\0\ua3b1\0\ua406\0\ua45b\0\ua4b0\0\ua505" + - "\0\ua55a\0\ua5af\0\ua604\0\ua659\0\ua6ae\0\ua703\0\ua758\0\ua7ad" + - "\0\ua802\0\ua857\0\u0aa0\0\ua8ac\0\u0550\0\ua901\0\ua956\0\ua9ab" + - "\0\uaa00\0\uaa55\0\uaaaa\0\uaaff\0\uab54\0\uaba9\0\uabfe\0\uac53" + - "\0\uaca8\0\uacfd\0\uad52\0\uada7\0\uadfc\0\uae51\0\u0550\0\uaea6" + - "\0\u0550\0\uaefb\0\uaf50\0\uafa5\0\uaffa\0\ub04f\0\ub0a4\0\ub0f9" + - "\0\ub14e\0\ub1a3\0\ub1f8\0\ub24d\0\ub2a2\0\ub2f7\0\ub34c\0\ub3a1" + - "\0\ub3f6\0\ub44b\0\ub4a0\0\ub4f5\0\ub54a\0\ub59f\0\ub5f4\0\ub649" + - "\0\ub69e\0\ub6f3\0\ub748\0\ub79d\0\ub7f2\0\ub847\0\ub89c\0\ub8f1" + - "\0\ub946\0\ub99b\0\ub9f0\0\uba45\0\uba9a\0\ubaef"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[614]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\7\17\1\20\1\21\1\22\1\23\1\24\72\17\1\23" + - "\16\17\10\25\1\26\40\25\1\27\53\25\10\30\1\31" + - "\54\30\1\32\37\30\10\33\1\34\14\33\1\35\77\33" + - "\7\36\1\37\1\0\1\36\1\23\2\36\1\40\7\36" + - "\1\41\3\36\1\42\1\43\7\36\1\44\43\36\1\23" + - "\16\36\32\45\1\46\72\45\31\47\1\50\73\47\7\36" + - "\1\37\1\0\1\36\1\23\2\36\1\40\7\36\1\51" + - "\3\36\1\52\1\53\7\36\1\44\43\36\1\23\16\36" + - "\32\45\1\54\72\45\31\47\1\55\73\47\24\56\1\57" + - "\100\56\1\60\1\61\1\62\1\63\1\61\1\40\1\64" + - "\1\23\1\65\1\66\1\23\1\67\1\70\2\71\1\72" + - "\1\73\1\74\1\75\1\61\1\76\1\77\1\100\1\62" + - "\1\60\1\101\1\102\1\103\1\104\1\105\1\62\1\106" + - "\1\107\1\61\1\110\1\71\1\111\1\61\1\112\1\113" + - "\1\61\1\114\1\115\1\116\1\117\1\120\1\121\1\122" + - "\1\123\1\72\1\70\2\71\2\40\1\124\1\125\1\126" + - "\1\127\1\60\1\72\1\61\1\130\1\131\1\61\1\132" + - "\1\61\1\133\2\61\1\23\1\134\1\135\1\136\1\137" + - "\1\140\1\141\1\61\1\142\6\61\10\143\1\144\32\143" + - "\1\145\3\143\1\146\25\143\1\147\1\150\26\143\10\151" + - "\1\152\36\151\1\153\25\151\1\154\1\155\26\151\10\17" + - "\4\0\72\17\1\0\25\17\1\20\2\0\1\23\1\0" + - "\72\17\1\23\16\17\126\0\1\156\3\0\1\156\10\0" + - "\1\157\1\0\4\156\2\0\1\156\4\0\3\156\4\0" + - "\1\160\1\0\5\156\2\0\6\156\4\0\1\161\1\0" + - "\4\156\2\0\11\156\1\0\16\156\7\0\1\23\2\0" + - "\1\23\73\0\1\23\16\0\12\24\1\0\1\24\1\162" + - "\71\24\1\0\16\24\10\25\1\0\40\25\1\0\53\25" + - "\51\0\1\163\53\0\10\30\1\0\54\30\1\0\37\30" + - "\25\0\1\164\77\0\10\33\1\0\14\33\1\0\77\33" + - "\10\36\1\0\1\36\1\0\2\36\1\0\7\36\1\0" + - "\3\36\2\0\7\36\1\0\43\36\1\0\25\36\1\37" + - "\1\0\1\36\1\23\2\36\1\0\7\36\1\0\3\36" + - "\2\0\7\36\1\0\43\36\1\23\16\36\25\0\1\41" + - "\77\0\32\45\1\0\72\45\31\47\1\0\73\47\24\56" + - "\1\0\100\56\24\0\1\165\100\0\5\60\13\0\4\60" + - "\2\0\3\60\2\0\4\60\1\0\2\60\2\0\5\60" + - "\2\0\6\60\6\0\5\60\1\0\11\60\1\0\17\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\2\167\2\62" + - "\1\167\1\0\1\170\11\0\1\167\1\171\2\167\2\0" + - "\1\167\1\62\1\167\2\0\3\167\1\62\1\0\2\167" + - "\2\0\1\167\1\172\2\171\1\173\2\0\2\167\1\173" + - "\1\167\1\172\1\167\6\0\5\167\1\0\2\167\1\171" + - "\6\167\1\0\20\167\1\174\1\175\1\167\1\0\1\170" + - "\11\0\1\167\1\171\2\167\2\0\1\167\1\175\1\167" + - "\2\0\3\167\1\175\1\0\2\167\2\0\1\176\1\172" + - "\2\171\1\173\2\0\2\167\1\173\1\167\1\172\1\167" + - "\6\0\5\167\1\0\2\167\1\171\5\167\1\176\1\0" + - "\16\167\2\0\2\170\23\0\1\170\6\0\1\170\77\0" + - "\1\177\3\0\1\40\1\200\23\0\1\201\75\0\1\40" + - "\1\0\1\40\124\0\1\40\107\0\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\4\61\1\202\4\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\3\61\1\203\2\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\61\1\204" + - "\4\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\24\0\1\205\115\0\1\40\7\0\1\206\77\0\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\4\61\1\207\4\61\1\0\16\61" + - "\10\210\1\211\17\210\1\212\1\213\73\210\10\102\1\214" + - "\17\102\1\215\1\102\1\216\72\102\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\1\61\1\217\2\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\5\61\1\220" + - "\6\0\2\61\1\221\1\222\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\223\3\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\224\1\225\2\61\6\0\4\61\1\60" + - "\1\0\4\61\1\226\4\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\61\1\227\4\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\5\60" + - "\13\0\4\60\2\0\3\60\2\0\4\60\1\0\2\60" + - "\2\0\5\60\2\0\6\60\6\0\2\60\1\230\2\60" + - "\1\0\11\60\1\0\16\60\15\0\1\40\24\0\1\231" + - "\1\232\61\0\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\3\61\1\233\12\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\234\3\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\235\3\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\3\61\1\236\1\61\1\237\6\0" + - "\2\61\1\240\1\61\1\60\1\0\4\61\1\241\4\61" + - "\1\0\16\61\15\0\1\40\33\0\1\40\70\0\1\40" + - "\34\0\1\40\52\0\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\61\1\242\1\243\1\244\2\61\6\0" + - "\4\61\1\60\1\0\1\245\3\61\1\246\1\247\3\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\250\1\251\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\4\61\1\252\1\253\6\0\4\61" + - "\1\60\1\0\7\61\1\254\1\255\1\0\1\61\1\256" + - "\14\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\61\1\257\2\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\2\61" + - "\1\257\6\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\1\254\1\61\1\254\1\260\2\61" + - "\6\0\4\61\1\60\1\0\4\61\1\261\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\262\3\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\1\263\1\61\1\264\3\61\6\0\1\61\1\265" + - "\2\61\1\60\1\0\1\61\1\266\7\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\267" + - "\1\61\1\270\3\61\6\0\4\61\1\60\1\0\4\61" + - "\1\271\4\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\3\61\1\272\1\273\1\61\6\0" + - "\4\61\1\60\1\0\4\61\1\274\4\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\1\61\1\275\2\61\1\0\1\60\1\61\2\0\3\61" + - "\1\276\1\61\2\0\5\61\1\277\6\0\4\61\1\60" + - "\1\0\6\61\1\300\2\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\301\3\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\61\1\302" + - "\1\61\1\303\1\304\1\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\2\61\1\305\1\61\1\60" + - "\1\0\1\306\10\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\307\3\61\6\0" + - "\4\61\1\60\1\0\4\61\1\254\1\310\3\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\61\1\311\2\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\61\1\254\4\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\1\61\1\312\14\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\3\61\1\313\2\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\254\1\61" + - "\1\314\3\61\6\0\4\61\1\60\1\0\4\61\1\315" + - "\4\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\316\2\61\6\0\4\61\1\60" + - "\1\0\4\61\1\317\4\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\2\61\1\320\3\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\3\61\1\321" + - "\2\61\6\0\4\61\1\60\1\0\4\61\1\322\4\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\1\323\3\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\2\61\1\324\1\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\2\61\1\325\3\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\10\143\1\0\32\143\1\0" + - "\3\143\1\0\25\143\2\0\26\143\42\0\1\326\135\0" + - "\1\327\15\0\1\330\106\0\1\331\147\0\1\332\26\0" + - "\10\151\1\0\36\151\1\0\25\151\2\0\26\151\53\0" + - "\1\333\15\0\1\334\106\0\1\335\147\0\1\336\27\0" + - "\3\156\1\0\2\156\11\0\4\156\2\0\2\156\3\0" + - "\4\156\5\0\6\156\1\0\6\156\6\0\4\156\2\0" + - "\11\156\1\0\16\156\17\0\1\337\31\0\1\340\54\0" + - "\1\341\3\0\1\341\12\0\4\341\2\0\1\341\4\0" + - "\3\341\6\0\5\341\2\0\6\341\6\0\4\341\2\0" + - "\11\341\1\0\16\341\25\0\1\342\124\0\1\343\77\0" + - "\5\60\13\0\4\60\2\0\3\60\2\0\1\344\3\60" + - "\1\0\2\60\2\0\5\60\2\0\6\60\6\0\5\60" + - "\1\0\11\60\1\0\16\60\5\167\13\0\4\167\2\0" + - "\3\167\2\0\4\167\1\0\2\167\2\0\5\167\2\0" + - "\6\167\6\0\5\167\1\0\11\167\1\0\20\167\2\170" + - "\1\167\13\0\1\167\1\171\2\167\2\0\1\167\1\170" + - "\1\167\2\0\3\167\1\170\1\0\2\167\2\0\2\167" + - "\2\171\1\173\2\0\2\167\1\173\3\167\6\0\5\167" + - "\1\0\2\167\1\171\6\167\1\0\20\167\2\345\1\167" + - "\13\0\4\167\2\0\1\167\1\345\1\167\2\0\3\167" + - "\1\345\1\0\2\167\2\0\5\167\2\346\6\167\6\0" + - "\5\167\1\0\11\167\1\0\20\167\2\174\1\167\1\0" + - "\1\170\11\0\1\167\1\171\2\167\2\0\1\167\1\174" + - "\1\167\2\0\3\167\1\174\1\0\2\167\2\0\2\167" + - "\2\171\1\173\2\0\2\167\1\173\3\167\6\0\5\167" + - "\1\0\2\167\1\171\6\167\1\0\20\167\1\174\1\175" + - "\1\167\1\0\1\170\11\0\1\167\1\171\2\167\2\0" + - "\1\167\1\175\1\167\2\0\3\167\1\175\1\0\2\167" + - "\2\0\1\167\1\347\2\171\1\173\2\0\2\167\1\173" + - "\1\167\1\347\1\167\6\0\5\167\1\0\2\167\1\171" + - "\6\167\1\0\20\167\2\350\1\167\13\0\3\350\1\167" + - "\2\0\2\350\1\167\2\0\2\167\2\350\1\0\2\167" + - "\2\0\2\167\3\350\2\0\2\167\2\350\2\167\6\0" + - "\1\167\1\350\3\167\1\0\2\167\1\350\6\167\1\0" + - "\16\167\17\0\1\351\106\0\1\352\3\0\1\352\12\0" + - "\4\352\2\0\1\352\4\0\3\352\6\0\5\352\2\0" + - "\6\352\6\0\1\353\3\352\2\0\11\352\1\0\16\352" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\354\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\355\5\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\356\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\25\0\1\357\114\0\1\40\7\0\1\71" + - "\77\0\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\4\61\1\360\4\61" + - "\1\0\16\61\10\361\1\0\20\361\1\362\73\361\31\0" + - "\1\362\73\0\3\361\1\363\4\361\1\0\16\361\1\364" + - "\1\210\1\365\1\210\1\366\2\210\1\363\10\361\1\210" + - "\3\361\2\210\50\361\30\214\1\367\1\214\1\370\75\214" + - "\1\102\4\214\1\0\16\214\4\102\1\371\3\102\10\214" + - "\1\102\3\214\2\102\50\214\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\372\1\61\1\373\1\61" + - "\6\0\4\61\1\60\1\0\2\61\1\374\6\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\254\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\1\61\1\375\2\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\2\61" + - "\1\376\6\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\4\61\1\377\1\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\1\61\1\u0100\6\61\1\u0101\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\u0102\5\61" + - "\6\0\4\61\1\60\1\0\6\61\1\u0103\2\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\254\5\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u0104\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\5\60\13\0\4\60\2\0\3\60\2\0" + - "\1\60\1\u0105\2\60\1\0\2\60\2\0\5\60\2\0" + - "\6\60\6\0\5\60\1\0\11\60\1\0\16\60\43\0" + - "\1\u0106\61\0\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\1\61" + - "\1\u0107\3\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\61\1\u0108\2\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u0109\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\4\61\1\u010a\1\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\1\61" + - "\1\u010b\2\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\1\61" + - "\1\u010c\2\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\61" + - "\1\u010d\4\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\u010e\3\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\3\61\1\u010f\2\61\6\0\4\61\1\60\1\0" + - "\5\61\1\254\3\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\4\61\1\u0110\1\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\61\1\u0111\4\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\61\1\u0112" + - "\4\61\6\0\2\61\1\u0113\1\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\1\u0114\15\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\3\61\1\u0115\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\1\u0116\5\61\6\0\4\61\1\60\1\0\6\61" + - "\1\u0117\2\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u0118\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\5\61\1\220\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\1\61\1\u0119" + - "\2\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\u011a\5\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\3\61\1\u011b\2\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\2\61\1\254\6\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\2\61\1\u011c\1\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\3\61\1\u011d\2\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\3\61\1\u011e\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\3\61\1\u011f\2\61\6\0\4\61\1\60\1\0" + - "\4\61\1\u0120\4\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u0121\5\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\61\1\u0122\4\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\2\61" + - "\1\u0123\1\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\61\1\u0124" + - "\4\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\u0125\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\u0126\3\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\u0127\3\61\1\u011b\1\220\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u0128\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u0129\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u012a\5\61\6\0\1\61" + - "\1\u012b\2\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\2\61\1\u012c\2\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\2\61\1\u012d\2\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\4\61\1\u012e\11\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\3\61\1\u012f\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\2\61\1\u0130\1\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u0131\3\61\6\0\2\61" + - "\1\u0132\1\61\1\60\1\0\4\61\1\u0133\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\u0134\4\61\6\0\1\61\1\u0135\2\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\3\61\1\u0136\2\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u0137\5\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\2\61\1\u0138" + - "\1\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\3\61\1\u0139\1\61\2\0\4\61" + - "\1\u013a\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\61\1\u013b\2\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\1\u013c\3\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\u013d\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\10\61" + - "\1\u013e\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\u013f\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\u0140\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\61\1\254\4\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\257\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\5\61\1\u0141\3\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\u0142\5\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\u0143\3\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\1\61\1\u0144\14\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\u0145\1\61\6\0\4\61\1\60\1\0\6\61\1\u0146" + - "\2\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\6\61\1\u0147\7\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\1\61\1\u0148\2\61" + - "\1\60\1\0\11\61\1\0\16\61\72\0\1\u0149\111\0" + - "\1\u014a\120\0\1\u014b\147\0\1\u014c\120\0\1\u014d\111\0" + - "\1\u014e\120\0\1\u014f\147\0\1\u0150\46\0\1\u0151\155\0" + - "\1\u0152\54\0\3\341\1\0\2\341\11\0\4\341\2\0" + - "\2\341\3\0\4\341\5\0\6\341\1\0\6\341\6\0" + - "\4\341\2\0\11\341\1\0\16\341\2\60\2\u0153\1\60" + - "\13\0\3\u0153\1\60\2\0\2\u0153\1\60\2\0\2\60" + - "\2\u0153\1\0\2\60\2\0\2\60\3\u0153\2\0\2\60" + - "\2\u0153\2\60\6\0\1\60\1\u0153\3\60\1\0\2\60" + - "\1\u0153\6\60\1\0\16\60\2\167\2\345\1\167\13\0" + - "\1\167\1\171\2\167\2\0\1\167\1\345\1\167\2\0" + - "\3\167\1\345\1\0\2\167\2\0\2\167\2\171\1\167" + - "\2\0\6\167\6\0\5\167\1\0\2\167\1\171\6\167" + - "\1\0\16\167\2\0\2\345\23\0\1\345\6\0\1\345" + - "\66\0\2\167\2\350\1\167\13\0\3\350\1\167\2\0" + - "\2\350\1\167\2\0\2\167\2\350\1\0\2\167\2\0" + - "\1\167\1\347\3\350\2\0\2\167\2\350\1\347\1\167" + - "\6\0\1\167\1\350\3\167\1\0\2\167\1\350\6\167" + - "\1\0\16\167\20\0\1\u0154\105\0\3\352\1\0\1\u0155" + - "\1\352\11\0\4\352\2\0\2\352\3\0\4\352\5\0" + - "\6\352\1\0\6\352\6\0\4\352\2\0\11\352\1\0" + - "\16\352\1\0\3\352\1\0\1\u0155\1\352\11\0\4\352" + - "\2\0\2\352\3\0\4\352\5\0\6\352\1\0\6\352" + - "\6\0\1\352\1\u0156\2\352\2\0\11\352\1\0\16\352" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\4\61\1\u0157\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u0141\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\3\61\1\320\2\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\4\61\1\u0158\1\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\10\361\1\0\20\361\1\213" + - "\76\361\1\364\4\361\1\0\16\361\1\364\1\361\1\362" + - "\4\361\1\364\71\361\1\210\4\361\1\0\16\361\1\210" + - "\1\361\1\362\4\361\1\210\70\361\2\u0159\4\361\1\0" + - "\7\361\3\u0159\3\361\2\u0159\1\361\1\213\3\361\2\u0159" + - "\7\361\3\u0159\4\361\2\u0159\11\361\1\u0159\6\361\1\u0159" + - "\25\361\10\214\1\0\116\214\2\u015a\14\214\3\u015a\3\214" + - "\2\u015a\1\367\1\214\1\370\2\214\2\u015a\7\214\3\u015a" + - "\4\214\2\u015a\11\214\1\u015a\6\214\1\u015a\25\214\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\5\61\1\253" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\4\61\1\u015b\4\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\2\61" + - "\1\u015c\3\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\u0141\5\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\3\61\1\u015d\2\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\4\61\1\254\1\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\4\61\1\u015e\1\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\1\u015f\5\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\u0160\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u0161\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\3\61\1\u0162\2\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\5\60" + - "\13\0\4\60\2\0\3\60\2\0\4\60\1\0\2\60" + - "\2\0\5\60\2\0\6\60\6\0\1\60\1\u0163\3\60" + - "\1\0\11\60\1\0\16\60\42\0\1\u0164\62\0\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\1\u0165\3\61\1\60\1\0\11\61\1\0\4\61\1\u0166" + - "\11\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\1\61\1\u0167\2\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\1\61\1\u0168\2\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\5\61\1\u010e\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\4\61" + - "\1\u0169\4\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\3\61\1\u016a\2\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\u016b\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u016c\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\1\61\1\u016d" + - "\2\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\4\61\1\u016e\1\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\1\u016f\15\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\4\61\1\u0170\4\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\5\61" + - "\1\254\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\1\u0171\15\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\2\61" + - "\1\u0172\3\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\u0173\3\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\4\61\1\u0174\4\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\2\61\1\u0175" + - "\6\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u0176\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u0177\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\4\61\1\u0178\1\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\2\61\1\377\3\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\2\61\1\u0179\6\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\2\61" + - "\1\316\3\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\u017a\1\u017b\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\3\61\1\u017c\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\10\61\1\u017d\5\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\4\61" + - "\1\u017e\4\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\1\u0127\5\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\u017f\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u0108\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\61\1\u0180" + - "\2\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\1\61\1\u0137\2\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\5\61" + - "\1\u0113\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\u0181" + - "\4\61\1\226\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u0182\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\4\61\1\u0183\1\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\61\1\u0184\4\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\u0185\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\3\61\1\u0186\2\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\4\61\1\u0187\1\61" + - "\6\0\4\61\1\60\1\0\4\61\1\u0188\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\4\61\1\u017a\1\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\1\61\1\u015f\14\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\61\1\u0189\2\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\1\61\1\u018a\14\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\u018b\5\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\5\61\1\u018c\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\3\61\1\u018d\5\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\5\61\1\u0178\3\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\1\254\10\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\220\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\3\61\1\u018e\2\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\u018f\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u0190\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\4\61\1\u0191\1\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\61\1\u0192\4\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\5\61\1\u0193\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\3\61\1\u0194\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\7\61\1\u0195\1\u017d" + - "\1\u0196\4\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\4\61\1\u0197" + - "\4\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\1\u0141" + - "\10\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\5\61\1\355\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\2\61\1\u0198\1\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\4\61\1\u0141\1\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\2\61\1\u0199\1\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\2\61\1\u019a\3\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\354\5\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\5\0" + - "\1\u019b\174\0\1\u0149\141\0\1\u019c\40\0\1\u019d\123\0" + - "\1\u019e\174\0\1\u014d\141\0\1\u019f\40\0\1\u01a0\137\0" + - "\1\u01a1\103\0\2\60\2\u01a2\1\60\13\0\3\u01a2\1\60" + - "\2\0\2\u01a2\1\60\2\0\2\60\2\u01a2\1\0\2\60" + - "\2\0\2\60\3\u01a2\2\0\2\60\2\u01a2\2\60\6\0" + - "\1\60\1\u01a2\3\60\1\0\2\60\1\u01a2\6\60\1\0" + - "\16\60\21\0\1\u01a3\104\0\3\352\1\0\1\u0155\1\352" + - "\11\0\4\352\2\0\2\352\3\0\4\352\5\0\6\352" + - "\1\0\6\352\6\0\1\353\3\352\2\0\11\352\1\0" + - "\16\352\1\0\3\352\1\0\1\u0155\1\352\11\0\4\352" + - "\2\0\2\352\3\0\4\352\5\0\6\352\1\0\1\352" + - "\1\u01a4\4\352\6\0\4\352\2\0\11\352\1\0\16\352" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\61" + - "\1\u0141\4\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u01a5\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\2\361\2\u01a6\4\361\1\0\7\361\3\u01a6" + - "\3\361\2\u01a6\1\361\1\213\3\361\2\u01a6\7\361\3\u01a6" + - "\4\361\2\u01a6\11\361\1\u01a6\6\361\1\u01a6\25\361\2\214" + - "\2\u01a7\14\214\3\u01a7\3\214\2\u01a7\1\367\1\214\1\370" + - "\2\214\2\u01a7\7\214\3\u01a7\4\214\2\u01a7\11\214\1\u01a7" + - "\6\214\1\u01a7\25\214\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u01a8\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\3\61\1\u01a9\1\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u01aa\5\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\2\61\1\u01ab" + - "\1\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\2\61\1\u01ac\2\61\2\0\6\61" + - "\6\0\1\u01ad\3\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\1\61\1\220" + - "\14\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\5\61\1\u01ae\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\3\61\1\254\5\61" + - "\1\0\16\61\5\60\13\0\4\60\2\0\3\60\2\0" + - "\4\60\1\0\2\60\2\0\5\60\2\0\4\60\1\u01af" + - "\1\60\6\0\5\60\1\0\11\60\1\0\17\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\4\61\1\u01b0\4\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\4\61\1\u01b1\4\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\u01b2" + - "\5\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\u01b3" + - "\5\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\6\61\1\u01b4\2\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\4\61\1\u01b5\1\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\55\0\1\u01b6\47\0\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u0178\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\3\61\1\u01b7\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\2\61\1\u01b8\3\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\1\61\1\254\7\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\u01b9\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\4\61\1\u01ba\4\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\1\61\1\u01bb\4\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\1\61\1\u01bc\14\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\4\61\1\u01bd\4\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\3\61\1\u016d" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\1\61\1\u01be\2\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\3\61\1\u01bf\3\61\1\u01c0" + - "\6\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\2\61\1\u01c1\1\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\1\u01c2\5\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\1\61\1\u01c3\1\u01c4" + - "\1\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\1\61\1\u01c5\4\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\4\61\1\u011b\1\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\61\1\u01c6" + - "\2\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\2\61\1\u0141\6\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\2\61\1\u01c7\1\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\u01c8\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\1\u01c9\3\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\3\61\1\u01ca\2\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\61\1\u01cb\2\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\4\61\1\u0178\11\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u01cc\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\61\1\226\4\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\u01cd\5\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\3\61\1\u018f" + - "\2\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\2\61" + - "\1\u01ce\3\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u01cf\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\3\61\1\u01d0\2\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\u01d1\3\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\220\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\6\61" + - "\1\u017a\2\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\u01d2\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\61\1\u01d3\4\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\1\61" + - "\1\265\2\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\2\61\1\u01d4\1\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\2\61" + - "\1\u01d5\3\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\12\61" + - "\1\u01d6\3\61\1\60\4\61\13\0\2\61\1\u01d7\1\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\2\61\1\u01d8\3\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u0157\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\1\61\1\375" + - "\2\61\1\60\1\0\11\61\1\0\16\61\42\0\1\u01d9" + - "\67\0\1\u019b\52\0\1\u0149\45\0\3\u019d\3\u01da\4\0" + - "\5\u01da\4\u019d\1\u01da\1\0\2\u019d\1\0\1\u01da\1\0" + - "\4\u019d\1\0\1\u01da\2\u019d\1\u01da\5\u019d\2\u01da\6\u019d" + - "\1\0\1\u01da\1\0\3\u01da\4\u019d\2\u01da\11\u019d\1\0" + - "\16\u019d\42\0\1\u01db\67\0\1\u019e\52\0\1\u014d\45\0" + - "\3\u01a0\3\u01dc\4\0\5\u01dc\4\u01a0\1\u01dc\1\0\2\u01a0" + - "\1\0\1\u01dc\1\0\4\u01a0\1\0\1\u01dc\2\u01a0\1\u01dc" + - "\5\u01a0\2\u01dc\6\u01a0\1\0\1\u01dc\1\0\3\u01dc\4\u01a0" + - "\2\u01dc\11\u01a0\1\0\16\u01a0\22\0\1\u01dd\102\0\2\60" + - "\2\u01de\1\60\13\0\3\u01de\1\60\2\0\2\u01de\1\60" + - "\2\0\2\60\2\u01de\1\0\2\60\2\0\2\60\3\u01de" + - "\2\0\2\60\2\u01de\2\60\6\0\1\60\1\u01de\3\60" + - "\1\0\2\60\1\u01de\6\60\1\0\16\60\22\0\1\u01df" + - "\103\0\3\352\1\0\1\u0155\1\352\11\0\4\352\2\0" + - "\2\352\3\0\4\352\5\0\6\352\1\0\6\352\6\0" + - "\2\352\1\u01e0\1\352\2\0\11\352\1\0\16\352\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\3\61\1\u01e1" + - "\2\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\2\361\2\u01e2\4\361\1\0\7\361\3\u01e2\3\361\2\u01e2" + - "\1\361\1\213\3\361\2\u01e2\7\361\3\u01e2\4\361\2\u01e2" + - "\11\361\1\u01e2\6\361\1\u01e2\25\361\2\214\2\u01e3\14\214" + - "\3\u01e3\3\214\2\u01e3\1\367\1\214\1\370\2\214\2\u01e3" + - "\7\214\3\u01e3\4\214\2\u01e3\11\214\1\u01e3\6\214\1\u01e3" + - "\25\214\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\2\61\1\u01e4\6\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\2\61\1\u01e5\1\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\2\61\1\u01e6\3\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u016d\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\61\1\u01e7\4\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\1\61" + - "\1\u01e8\2\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\3\61\1\u01e9\1\60\1\0\11\61\1\0\16\61\5\60" + - "\13\0\4\60\2\0\3\60\2\0\1\u01ea\3\60\1\0" + - "\2\60\2\0\5\60\2\0\6\60\6\0\5\60\1\0" + - "\11\60\1\0\17\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\1\61\1\u01eb\2\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\2\61" + - "\1\355\6\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\2\61\1\u01ec\1\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\2\61\1\u01ed" + - "\1\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\6\61\1\u01ee\2\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\4\61\1\u01ef" + - "\1\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\56\0\1\u01f0\46\0\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u01f1\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\1\u01f2\5\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u01f3\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\3\61\1\254\1\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\61\1\254" + - "\2\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\2\61\1\u01f4" + - "\3\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\6\61\1\u0178\2\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\2\61\1\u0113\6\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\4\61\1\u01f5" + - "\4\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u01f6\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\1\61\1\254\2\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\1\61\1\u01c3\2\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\61\1\u01f7\4\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\4\61\1\u01f8" + - "\1\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\4\61\1\u01f9\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\1\u0141" + - "\15\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\1\61\1\u01fa\2\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\1\61\1\u01fb\2\61\1\0\1\60\1\61" + - "\2\0\3\61\1\u01e9\1\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\2\61\1\220\6\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\6\61\1\u01fc\2\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\2\61\1\u01fd\1\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\6\61\1\u01fe\2\61\1\0" + - "\16\61\1\60\4\61\13\0\2\61\1\u01ff\1\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\4\61\1\u0200\11\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\1\61\1\u0201\2\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\2\61\1\u0202\2\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\13\61\1\u0203\2\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\1\220\15\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\4\61" + - "\1\226\1\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\3\61\1\u0204\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\2\61\1\u01c9\1\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\6\61\1\u0205" + - "\2\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\61\1\u0206\4\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\1\61\1\u0178\3\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\1\61\1\u0207\2\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\1\u0208\3\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\42\0\1\u019d" + - "\124\0\1\u01a0\105\0\1\u0209\101\0\2\60\2\61\1\60" + - "\13\0\3\61\1\60\2\0\2\61\1\60\2\0\2\60" + - "\2\61\1\0\2\60\2\0\2\60\3\61\2\0\2\60" + - "\2\61\2\60\6\0\1\60\1\61\3\60\1\0\2\60" + - "\1\61\6\60\1\0\16\60\23\0\1\u020a\102\0\3\352" + - "\1\0\1\u0155\1\352\11\0\4\352\2\0\2\352\3\0" + - "\4\352\5\0\6\352\1\0\6\352\6\0\3\352\1\u020b" + - "\2\0\11\352\1\0\16\352\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u0141\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\2\361\2\210\4\361" + - "\1\0\7\361\3\210\3\361\2\210\1\361\1\213\3\361" + - "\2\210\7\361\3\210\4\361\2\210\11\361\1\210\6\361" + - "\1\210\25\361\2\214\2\102\14\214\3\102\3\214\2\102" + - "\1\367\1\214\1\370\2\214\2\102\7\214\3\102\4\214" + - "\2\102\11\214\1\102\6\214\1\102\25\214\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\3\61\1\u01bf\12\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\1\61" + - "\1\u020c\2\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\2\61\1\u020d\1\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\3\61\1\u020e\2\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\u01ab\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u020f\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\5\60\13\0\4\60\2\0" + - "\3\60\2\0\4\60\1\0\2\60\2\0\5\60\2\0" + - "\6\60\6\0\5\60\1\0\2\60\1\u0210\6\60\1\0" + - "\17\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\3\61\1\u0211\5\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\4\61\1\u01e1\4\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\4\61\1\u01bb" + - "\4\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u0212\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\5\61\1\254\3\61\1\0\16\61\70\0\1\u0213\34\0" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\61" + - "\1\u0214\4\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\10\61" + - "\1\u0215\5\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\14\61\1\u0216\1\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\3\61\1\u0217\12\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\1\61\1\u0218\14\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\61\1\u0219\4\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\3\61\1\u021a\2\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\4\61\1\u021b" + - "\1\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\3\61\1\u021c\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\1\220\3\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\3\61" + - "\1\377\2\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u021d\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\1\u016d\5\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\u021e\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\5\61\1\u021f\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\u01bd\3\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\u020c\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\4\61\1\u0220\1\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u0221\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\4\61\1\u0222\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u0223\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\5\61\1\u0224\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\2\61\1\u0225\6\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\4\61\1\u0226" + - "\1\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\22\0\1\u0227\124\0\1\u0228\103\0\3\352\1\0\1\u0155" + - "\1\352\11\0\4\352\2\0\2\352\3\0\4\352\5\0" + - "\6\352\1\0\1\u0229\5\352\6\0\4\352\2\0\11\352" + - "\1\0\16\352\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\257\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\3\61\1\u022a\1\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\6\61\1\u016d\2\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\1\61\1\220" + - "\2\61\1\60\1\0\11\61\1\0\16\61\5\60\13\0" + - "\4\60\2\0\3\60\2\0\4\60\1\0\2\60\2\0" + - "\5\60\2\0\2\60\1\u022b\3\60\6\0\5\60\1\0" + - "\11\60\1\0\17\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\375\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\1\61\1\u022c\2\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\75\0\1\u022d\27\0\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\1\u022e\15\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\3\61\1\u022f" + - "\2\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\2\61\1\u0230\1\61\1\60\1\0\11\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\4\61\1\u0231\4\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\2\61\1\u0232\1\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\2\61\1\u0233\1\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\1\u0178\15\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\6\61\6\0\1\u0234\3\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\u0235\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\1\61\1\u0236\3\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\61\1\u0237" + - "\2\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\1\u0238\1\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\4\61\1\60\1\0\4\61\1\u0239\4\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\1\u0178" + - "\5\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\1\61\1\u023a" + - "\14\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\u0178\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\2\61\1\u023b\1\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\1\u023c\3\61\1\60\1\0" + - "\11\61\1\0\10\61\1\u023d\5\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\2\61\1\u023e" + - "\1\61\1\60\1\0\11\61\1\0\16\61\17\0\1\u023f" + - "\124\0\1\357\106\0\3\352\1\0\1\u0155\1\352\1\u0240" + - "\2\0\1\u0240\5\0\4\352\1\0\1\u0241\2\352\3\0" + - "\4\352\5\0\6\352\1\0\6\352\6\0\4\352\2\0" + - "\11\352\1\u0240\16\352\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\u0242\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\2\61" + - "\1\u0178\6\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\2\61\1\226\3\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u0243\5\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\1\u0244\15\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\1\61\1\u0245\14\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\2\61\1\u0246\3\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\3\61\1\u0247" + - "\2\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\4\61\1\u0248\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\u0249\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\4\61\1\u024a" + - "\4\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\1\u0113\5\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\2\61\1\u024b\1\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\3\61\1\u0221\2\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u024c\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\4\61\1\u024d\4\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\1\u024e\5\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\4\61\1\304" + - "\1\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\3\61\1\u0141\1\60\1\0\11\61\1\0\16\61" + - "\7\0\1\u0240\2\0\1\u0240\12\0\1\u0241\60\0\1\u0240" + - "\16\0\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\2\61\1\u024f\3\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\1\u0178\10\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\1\u0250\10\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\2\61\1\u0251\1\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\6\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\4\61\1\u0200\11\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\2\61\1\u0252\1\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\1\u0253\3\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\1\u0136\5\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\3\61\1\u0254\2\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\1\u0255\5\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\1\61\1\226" + - "\2\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\1\61" + - "\1\u0178\2\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\6\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\4\61\1\u0256\4\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\1\61\1\u0257\4\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\15\61\1\u0258\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\2\61\1\u0259\3\61\6\0\4\61\1\60\1\0" + - "\11\61\1\0\16\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\4\61\1\u025a\1\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\1\61\1\u025b\2\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\4\61\1\60" + - "\1\0\2\61\1\u020c\6\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\6\61\6\0\4\61" + - "\1\60\1\0\6\61\1\u025c\2\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\3\61\1\u0178\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\4\61\1\u025d\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\1\u025e" + - "\3\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\1\u025f\3\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\2\61\1\u0260" + - "\3\61\6\0\4\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\4\61\1\60\1\0\2\61\1\u0261\6\61\1\0" + - "\16\61\1\60\4\61\13\0\4\61\2\0\2\61\1\166" + - "\2\0\4\61\1\0\1\60\1\61\2\0\5\61\2\0" + - "\3\61\1\u0262\2\61\6\0\4\61\1\60\1\0\11\61" + - "\1\0\16\61\1\60\4\61\13\0\4\61\2\0\2\61" + - "\1\166\2\0\4\61\1\0\1\60\1\61\2\0\5\61" + - "\2\0\6\61\6\0\4\61\1\60\1\0\11\61\1\0" + - "\1\61\1\u0263\14\61\1\60\4\61\13\0\4\61\2\0" + - "\2\61\1\166\2\0\4\61\1\0\1\60\1\61\2\0" + - "\5\61\2\0\3\61\1\u0264\2\61\6\0\4\61\1\60" + - "\1\0\11\61\1\0\16\61\1\60\4\61\13\0\4\61" + - "\2\0\2\61\1\166\2\0\4\61\1\0\1\60\1\61" + - "\2\0\5\61\2\0\4\61\1\u0265\1\61\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\5\61\1\u0246\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\5\61\1\u0178\6\0\4\61" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\6\61\6\0\3\61\1\u0246" + - "\1\60\1\0\11\61\1\0\16\61\1\60\4\61\13\0" + - "\4\61\2\0\2\61\1\166\2\0\4\61\1\0\1\60" + - "\1\61\2\0\5\61\2\0\2\61\1\u0203\3\61\6\0" + - "\4\61\1\60\1\0\11\61\1\0\16\61\1\60\4\61" + - "\13\0\4\61\2\0\2\61\1\166\2\0\4\61\1\0" + - "\1\60\1\61\2\0\5\61\2\0\4\61\1\u0266\1\61" + - "\6\0\4\61\1\60\1\0\11\61\1\0\16\61\1\60" + - "\4\61\13\0\4\61\2\0\2\61\1\166\2\0\4\61" + - "\1\0\1\60\1\61\2\0\5\61\2\0\6\61\6\0" + - "\2\61\1\u0256\1\61\1\60\1\0\11\61\1\0\16\61" + - "\1\60\4\61\13\0\4\61\2\0\2\61\1\166\2\0" + - "\4\61\1\0\1\60\1\61\2\0\5\61\2\0\6\61" + - "\6\0\2\61\1\u0249\1\61\1\60\1\0\11\61\1\0" + - "\16\61"; - - private static int[] zzUnpackTrans() { - int[] result = new int[47940]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\2\1\1\0\2\1\4\0\2\1\1\11\4\1" + - "\1\11\2\1\1\11\2\1\2\11\2\1\4\11\2\1" + - "\1\11\1\1\6\11\7\1\1\11\2\1\1\11\1\1" + - "\1\11\13\1\1\11\35\1\1\11\5\1\1\11\6\1" + - "\2\11\1\0\1\11\1\0\11\1\3\0\3\1\1\0" + - "\3\1\1\0\1\1\1\11\2\1\1\11\12\1\1\11" + - "\74\1\1\11\12\0\1\1\2\11\2\1\1\0\2\1" + - "\3\0\3\1\1\11\2\1\1\11\5\1\1\11\15\1" + - "\1\0\102\1\11\0\1\11\1\1\3\0\15\1\1\11" + - "\6\1\1\0\57\1\2\0\1\1\2\0\1\1\1\0" + - "\1\1\2\0\21\1\1\0\42\1\5\0\1\1\2\0" + - "\17\1\1\0\30\1\3\0\7\1\1\0\23\1\3\0" + - "\3\1\1\11\21\1\1\11\1\0\1\11\45\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[614]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Token type specific to this class; this signals that the user has ended a line with an unclosed XML tag; thus a - * new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG = -1; - - /** - * Token type specific to this class; this signals that the user has ended a line with an unclosed Script tag; thus - * a new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG_SCRIPT = -2; - - /** - * Token type specific to this class; this signals that the user has ended a line in the middle of a double-quoted - * attribute in a Script tag. - */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; - - /** - * Token type specific to this class; this signals that the user has ended a line in the middle of a single-quoted - * attribute in a Script tag. - */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; - - /** - * Token type specific to this class; this signals that the user has ended a line in an ActionScript code block - * (text content inside a Script tag). - */ - public static final int INTERNAL_IN_AS = -5; - - /** - * Token type specific to this class; this signals that the user has ended a line in an MLC in an ActionScript code - * block (text content inside a Script tag). - */ - public static final int INTERNAL_IN_AS_MLC = -6; - - /** - * Whether closing markup tags are automatically completed for HTML. - */ - private static boolean completeCloseTags; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public MxmlTokenMaker() { - } - - static { - completeCloseTags = true; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int AS_EOL_COMMENT = 13; + public static final int AS_MLC = 12; + public static final int INTAG_SCRIPT = 7; + public static final int INATTR_DOUBLE_SCRIPT = 8; + public static final int CDATA = 10; + public static final int INATTR_SINGLE_SCRIPT = 9; + public static final int DTD = 3; + public static final int INATTR_SINGLE = 6; + public static final int INATTR_DOUBLE = 5; + public static final int YYINITIAL = 0; + public static final int AS = 11; + public static final int INTAG = 4; + public static final int COMMENT = 1; + public static final int PI = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\12\1\10\1\0\1\7\1\36\22\0\1\105\1\16\1\32"+ + "\1\37\1\40\1\63\1\13\1\31\2\73\1\42\1\51\1\61\1\50"+ + "\1\6\1\41\1\3\3\27\4\27\2\2\1\5\1\14\1\11\1\15"+ + "\1\25\1\64\1\72\1\22\1\26\1\20\1\21\1\47\1\45\1\1"+ + "\1\122\1\121\1\1\1\110\1\44\1\111\1\112\1\113\1\116\1\123"+ + "\1\120\1\66\1\23\1\117\1\115\1\1\1\43\2\1\1\17\1\30"+ + "\1\24\1\62\1\4\1\0\1\55\1\35\1\67\1\76\1\54\1\46"+ + "\1\106\1\74\1\70\1\114\1\77\1\56\1\102\1\34\1\100\1\71"+ + "\1\103\1\53\1\57\1\52\1\33\1\107\1\75\1\104\1\101\1\1"+ + "\1\60\1\62\1\60\1\65\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\2\1\1\0\2\1\4\0\2\2\1\3\1\4"+ + "\1\5\1\6\1\1\1\7\5\1\1\10\2\1\1\11"+ + "\1\12\2\13\1\14\1\15\1\16\1\17\1\20\1\1"+ + "\1\21\1\1\1\22\1\23\1\24\1\25\2\1\1\26"+ + "\1\2\2\27\1\2\1\30\2\14\1\2\1\14\1\31"+ + "\3\2\1\31\1\14\1\2\1\32\1\33\3\2\2\26"+ + "\1\14\3\2\2\14\25\2\1\1\1\34\5\1\1\35"+ + "\3\1\1\36\1\37\1\4\1\40\1\6\5\0\1\41"+ + "\1\0\1\26\1\42\2\43\1\27\2\42\1\44\1\42"+ + "\3\0\3\2\1\0\1\14\1\2\1\32\1\45\2\33"+ + "\1\46\5\2\1\47\3\2\1\26\1\50\1\51\21\2"+ + "\1\47\20\2\2\47\12\2\1\47\2\2\1\47\11\2"+ + "\1\52\12\0\1\53\2\0\1\54\2\0\1\55\1\26"+ + "\1\43\1\0\2\44\3\0\3\2\1\56\1\2\2\32"+ + "\1\33\1\57\1\33\6\2\1\47\4\2\1\26\1\0"+ + "\1\60\5\2\1\47\23\2\1\47\10\2\1\60\24\2"+ + "\1\47\1\2\1\60\7\2\11\0\1\61\2\0\1\62"+ + "\1\26\3\0\2\2\1\32\1\63\1\32\1\33\10\2"+ + "\1\26\1\64\6\2\1\0\1\65\13\2\1\66\3\2"+ + "\1\66\36\2\2\0\1\67\2\0\1\70\3\0\1\26"+ + "\2\0\1\2\1\32\1\33\7\2\1\26\5\2\1\47"+ + "\1\0\26\2\1\66\13\2\5\0\1\26\2\0\1\2"+ + "\1\32\1\33\6\2\1\26\5\2\1\0\30\2\3\0"+ + "\4\2\1\26\2\2\1\0\23\2\3\0\1\2\1\66"+ + "\1\2\1\47\21\2\1\71\1\0\1\72\4\2\1\66"+ + "\40\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[624]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\124\0\250\0\374\0\u0150\0\u01a4\0\u01f8\0\u024c"+ + "\0\u02a0\0\u02f4\0\u0348\0\u039c\0\u03f0\0\u0444\0\u0498\0\u04ec"+ + "\0\u0540\0\u0594\0\u05e8\0\u063c\0\u0690\0\u0540\0\u06e4\0\u0738"+ + "\0\u078c\0\u07e0\0\u0834\0\u0540\0\u0888\0\u08dc\0\u0540\0\u0540"+ + "\0\u0930\0\u0984\0\u0540\0\u0540\0\u0540\0\u0540\0\u09d8\0\u0a2c"+ + "\0\u0540\0\u0a80\0\u0540\0\u0540\0\u0540\0\u0540\0\u0ad4\0\u0b28"+ + "\0\u0b7c\0\u0bd0\0\u0c24\0\u0c78\0\u0ccc\0\u0540\0\u0d20\0\u0d74"+ + "\0\u0540\0\u0dc8\0\u0540\0\u0e1c\0\u0e70\0\u0ec4\0\u0f18\0\u0f6c"+ + "\0\u0fc0\0\u1014\0\u1068\0\u10bc\0\u1110\0\u1164\0\u0540\0\u11b8"+ + "\0\u120c\0\u1260\0\u12b4\0\u1308\0\u135c\0\u13b0\0\u1404\0\u1458"+ + "\0\u14ac\0\u1500\0\u1554\0\u15a8\0\u15fc\0\u1650\0\u16a4\0\u16f8"+ + "\0\u174c\0\u17a0\0\u17f4\0\u1848\0\u189c\0\u18f0\0\u1944\0\u1998"+ + "\0\u19ec\0\u1a40\0\u1a94\0\u1ae8\0\u0540\0\u1b3c\0\u1b90\0\u1be4"+ + "\0\u1c38\0\u1c8c\0\u0540\0\u1ce0\0\u1d34\0\u1d88\0\u1ddc\0\u1e30"+ + "\0\u1e84\0\u0540\0\u0540\0\u1ed8\0\u1f2c\0\u1f80\0\u1fd4\0\u2028"+ + "\0\u0540\0\u207c\0\u20d0\0\u2124\0\u2178\0\u2124\0\u2124\0\u21cc"+ + "\0\u2220\0\u2274\0\u22c8\0\u0dc8\0\u231c\0\u2370\0\u23c4\0\u2418"+ + "\0\u246c\0\u24c0\0\u2514\0\u2568\0\u25bc\0\u0540\0\u2610\0\u2664"+ + "\0\u0540\0\u26b8\0\u270c\0\u2760\0\u27b4\0\u2808\0\u285c\0\u28b0"+ + "\0\u2904\0\u2958\0\u29ac\0\u0540\0\u2a00\0\u2a54\0\u2aa8\0\u2afc"+ + "\0\u2b50\0\u2ba4\0\u2bf8\0\u2c4c\0\u2ca0\0\u2cf4\0\u2d48\0\u2d9c"+ + "\0\u2df0\0\u2e44\0\u2e98\0\u2eec\0\u2f40\0\u2f94\0\u0bd0\0\u2fe8"+ + "\0\u303c\0\u3090\0\u30e4\0\u3138\0\u318c\0\u31e0\0\u3234\0\u3288"+ + "\0\u32dc\0\u3330\0\u3384\0\u33d8\0\u342c\0\u3480\0\u34d4\0\u3528"+ + "\0\u357c\0\u35d0\0\u3624\0\u3678\0\u36cc\0\u3720\0\u3774\0\u37c8"+ + "\0\u381c\0\u3870\0\u38c4\0\u3918\0\u396c\0\u39c0\0\u3a14\0\u3a68"+ + "\0\u3abc\0\u3b10\0\u3b64\0\u3bb8\0\u3c0c\0\u3c60\0\u3cb4\0\u3d08"+ + "\0\u0540\0\u3d5c\0\u3db0\0\u3e04\0\u3e58\0\u3eac\0\u3f00\0\u3f54"+ + "\0\u3fa8\0\u3ffc\0\u4050\0\u40a4\0\u40f8\0\u414c\0\u0540\0\u41a0"+ + "\0\u41f4\0\u0540\0\u4248\0\u429c\0\u42f0\0\u2124\0\u4344\0\u4398"+ + "\0\u43ec\0\u4440\0\u4494\0\u44e8\0\u453c\0\u0540\0\u4590\0\u45e4"+ + "\0\u4638\0\u468c\0\u0540\0\u46e0\0\u4734\0\u4788\0\u47dc\0\u4830"+ + "\0\u4884\0\u48d8\0\u492c\0\u4980\0\u49d4\0\u4a28\0\u4a7c\0\u4ad0"+ + "\0\u4b24\0\u4b78\0\u4bcc\0\u4c20\0\u4c74\0\u4cc8\0\u4d1c\0\u4d70"+ + "\0\u4dc4\0\u4e18\0\u4e6c\0\u4ec0\0\u4f14\0\u4f68\0\u4fbc\0\u5010"+ + "\0\u5064\0\u50b8\0\u510c\0\u5160\0\u51b4\0\u5208\0\u525c\0\u52b0"+ + "\0\u5304\0\u5358\0\u53ac\0\u5400\0\u5454\0\u54a8\0\u54fc\0\u5550"+ + "\0\u55a4\0\u55f8\0\u564c\0\u56a0\0\u56f4\0\u5748\0\u579c\0\u57f0"+ + "\0\u5844\0\u5898\0\u58ec\0\u5940\0\u5994\0\u59e8\0\u5a3c\0\u5a90"+ + "\0\u5ae4\0\u5b38\0\u5b8c\0\u5be0\0\u5c34\0\u5c88\0\u5cdc\0\u5d30"+ + "\0\u5d84\0\u5dd8\0\u5e2c\0\u0bd0\0\u5e80\0\u5ed4\0\u5f28\0\u5f7c"+ + "\0\u5fd0\0\u6024\0\u6078\0\u60cc\0\u6120\0\u6174\0\u61c8\0\u621c"+ + "\0\u6270\0\u62c4\0\u6318\0\u636c\0\u0540\0\u63c0\0\u6414\0\u6468"+ + "\0\u64bc\0\u6510\0\u6564\0\u65b8\0\u660c\0\u6660\0\u66b4\0\u0540"+ + "\0\u6708\0\u675c\0\u67b0\0\u6804\0\u6858\0\u68ac\0\u6900\0\u6954"+ + "\0\u69a8\0\u69fc\0\u6a50\0\u0540\0\u6aa4\0\u6af8\0\u6b4c\0\u6ba0"+ + "\0\u6bf4\0\u6c48\0\u6c9c\0\u0bd0\0\u6cf0\0\u6d44\0\u6d98\0\u6dec"+ + "\0\u6e40\0\u6e94\0\u6ee8\0\u6f3c\0\u6f90\0\u6fe4\0\u7038\0\u0bd0"+ + "\0\u708c\0\u70e0\0\u7134\0\u7188\0\u71dc\0\u7230\0\u7284\0\u72d8"+ + "\0\u732c\0\u7380\0\u73d4\0\u7428\0\u747c\0\u74d0\0\u7524\0\u7578"+ + "\0\u75cc\0\u7620\0\u7674\0\u76c8\0\u771c\0\u7770\0\u77c4\0\u7818"+ + "\0\u786c\0\u78c0\0\u7914\0\u7968\0\u79bc\0\u7a10\0\u7a64\0\u7ab8"+ + "\0\u7b0c\0\u7b60\0\u7bb4\0\u7c08\0\u7c5c\0\u7cb0\0\u7d04\0\u7d58"+ + "\0\u7dac\0\u7e00\0\u6468\0\u7e54\0\u7ea8\0\u7efc\0\u7f50\0\u7fa4"+ + "\0\u7ff8\0\u804c\0\u80a0\0\u80f4\0\u8148\0\u819c\0\u81f0\0\u8244"+ + "\0\u8298\0\u82ec\0\u8340\0\u8394\0\u83e8\0\u843c\0\u8490\0\u84e4"+ + "\0\u8538\0\u858c\0\u85e0\0\u8634\0\u8688\0\u86dc\0\u8730\0\u8784"+ + "\0\u87d8\0\u882c\0\u8880\0\u88d4\0\u8928\0\u897c\0\u89d0\0\u8a24"+ + "\0\u8a78\0\u8acc\0\u8b20\0\u8b74\0\u8bc8\0\u8c1c\0\u8c70\0\u8cc4"+ + "\0\u8d18\0\u8d6c\0\u8dc0\0\u8e14\0\u8e68\0\u8ebc\0\u8f10\0\u8f64"+ + "\0\u8fb8\0\u900c\0\u9060\0\u7c5c\0\u90b4\0\u7d58\0\u9108\0\u915c"+ + "\0\u91b0\0\u9204\0\u9258\0\u92ac\0\u9300\0\u9354\0\u93a8\0\u93fc"+ + "\0\u9450\0\u94a4\0\u94f8\0\u954c\0\u95a0\0\u95f4\0\u9648\0\u969c"+ + "\0\u96f0\0\u9744\0\u9798\0\u97ec\0\u9840\0\u9894\0\u98e8\0\u993c"+ + "\0\u9990\0\u99e4\0\u9a38\0\u9a8c\0\u9ae0\0\u9b34\0\u9b88\0\u9bdc"+ + "\0\u9c30\0\u9c84\0\u9cd8\0\u9d2c\0\u9d80\0\u9dd4\0\u9e28\0\u9e7c"+ + "\0\u9ed0\0\u9f24\0\u9f78\0\u9fcc\0\ua020\0\ua074\0\ua0c8\0\ua11c"+ + "\0\ua170\0\ua1c4\0\ua218\0\ua26c\0\ua2c0\0\ua314\0\ua368\0\ua3bc"+ + "\0\ua410\0\ua464\0\ua4b8\0\ua50c\0\ua560\0\ua5b4\0\ua608\0\ua65c"+ + "\0\ua6b0\0\ua704\0\ua758\0\ua7ac\0\ua800\0\ua854\0\ua8a8\0\ua8fc"+ + "\0\ua950\0\ua9a4\0\ua9f8\0\uaa4c\0\u0b7c\0\uaaa0\0\u0540\0\uaaf4"+ + "\0\uab48\0\uab9c\0\uabf0\0\uac44\0\uac98\0\uacec\0\uad40\0\uad94"+ + "\0\uade8\0\uae3c\0\uae90\0\uaee4\0\uaf38\0\uaf8c\0\uafe0\0\ub034"+ + "\0\u0540\0\ub088\0\u0540\0\ub0dc\0\ub130\0\ub184\0\ub1d8\0\ub22c"+ + "\0\ub280\0\ub2d4\0\ub328\0\ub37c\0\ub3d0\0\ub424\0\ub478\0\ub4cc"+ + "\0\ub520\0\ub574\0\ub5c8\0\ub61c\0\ub670\0\ub6c4\0\ub718\0\ub76c"+ + "\0\ub7c0\0\ub814\0\ub868\0\ub8bc\0\ub910\0\ub964\0\ub9b8\0\uba0c"+ + "\0\uba60\0\ubab4\0\ubb08\0\ubb5c\0\ubbb0\0\ubc04\0\ubc58\0\ubcac"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[624]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\7\17\1\20\1\21\1\22\1\23\1\24\71\17\1\23"+ + "\16\17\10\25\1\26\35\25\1\27\1\25\1\30\23\25"+ + "\1\31\1\32\26\25\10\33\1\34\53\33\1\35\37\33"+ + "\10\36\1\37\14\36\1\40\76\36\7\41\1\42\1\0"+ + "\1\41\1\23\2\41\1\43\7\41\1\44\3\41\1\45"+ + "\1\46\6\41\1\47\43\41\1\23\16\41\32\50\1\51"+ + "\71\50\31\52\1\51\72\52\7\41\1\42\1\0\1\41"+ + "\1\23\2\41\1\43\7\41\1\53\3\41\1\54\1\55"+ + "\6\41\1\47\43\41\1\23\16\41\32\50\1\56\71\50"+ + "\31\52\1\56\72\52\24\57\1\60\77\57\1\61\1\62"+ + "\1\63\1\64\1\62\1\43\1\65\1\23\1\66\1\67"+ + "\1\23\1\70\1\71\2\72\1\73\1\74\1\75\1\76"+ + "\1\62\1\77\1\100\1\101\1\63\1\61\1\102\1\103"+ + "\1\104\1\105\1\106\1\107\1\110\1\62\1\111\1\72"+ + "\1\112\1\62\1\113\1\114\1\62\1\115\1\116\1\117"+ + "\1\120\1\121\1\122\1\123\1\124\1\73\1\71\2\72"+ + "\2\43\1\125\1\126\1\127\1\130\1\61\1\73\1\62"+ + "\1\131\1\132\1\62\1\133\1\62\1\134\2\62\1\23"+ + "\1\135\1\136\1\137\1\140\1\141\1\142\1\62\1\143"+ + "\6\62\10\144\1\145\31\144\1\146\3\144\1\147\25\144"+ + "\1\150\1\151\26\144\10\152\1\153\35\152\1\154\25\152"+ + "\1\155\1\156\26\152\10\17\4\0\71\17\1\0\25\17"+ + "\1\20\2\0\1\23\1\0\71\17\1\23\16\17\125\0"+ + "\1\157\3\0\1\157\10\0\1\160\1\0\4\157\2\0"+ + "\1\157\4\0\3\157\3\0\1\161\1\0\5\157\2\0"+ + "\6\157\4\0\1\162\1\0\4\157\2\0\11\157\1\0"+ + "\16\157\7\0\1\23\2\0\1\23\72\0\1\23\16\0"+ + "\12\24\1\0\1\24\1\163\70\24\1\0\16\24\10\25"+ + "\1\0\35\25\1\0\1\25\1\0\23\25\2\0\26\25"+ + "\52\0\1\164\15\0\1\165\103\0\1\166\125\0\1\167"+ + "\146\0\1\170\26\0\10\33\1\0\53\33\1\0\37\33"+ + "\25\0\1\171\76\0\10\36\1\0\14\36\1\0\76\36"+ + "\10\41\1\0\1\41\1\0\2\41\1\0\7\41\1\0"+ + "\3\41\2\0\6\41\1\0\43\41\1\0\25\41\1\42"+ + "\1\0\1\41\1\23\2\41\1\0\7\41\1\0\3\41"+ + "\2\0\6\41\1\0\43\41\1\23\16\41\25\0\1\44"+ + "\76\0\32\50\1\0\71\50\31\52\1\0\72\52\24\57"+ + "\1\0\77\57\24\0\1\172\77\0\5\61\13\0\4\61"+ + "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\17\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\2\174\2\63"+ + "\1\174\1\0\1\175\11\0\1\174\1\176\2\174\2\0"+ + "\1\174\1\63\1\174\2\0\3\174\1\0\2\174\2\0"+ + "\1\174\1\177\2\176\1\200\2\0\2\174\1\200\1\174"+ + "\1\177\1\174\6\0\5\174\1\0\2\174\1\176\6\174"+ + "\1\0\20\174\1\201\1\202\1\174\1\0\1\175\11\0"+ + "\1\174\1\176\2\174\2\0\1\174\1\202\1\174\2\0"+ + "\3\174\1\0\2\174\2\0\1\203\1\177\2\176\1\200"+ + "\2\0\2\174\1\200\1\174\1\177\1\174\6\0\5\174"+ + "\1\0\2\174\1\176\5\174\1\203\1\0\16\174\2\0"+ + "\2\175\23\0\1\175\105\0\1\204\3\0\1\43\1\205"+ + "\22\0\1\206\75\0\1\43\1\0\1\43\123\0\1\43"+ + "\106\0\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\207\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\210\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\211\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\24\0\1\212\114\0\1\43"+ + "\7\0\1\213\76\0\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\214\4\62\1\0\16\62\30\102\1\215\1\216\72\102"+ + "\10\103\1\217\17\103\1\220\1\103\1\221\71\103\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\62"+ + "\1\222\1\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\223\6\0\2\62\1\224\1\225\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\226\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\227\1\230\2\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\231\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\232\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\2\61"+ + "\1\233\2\61\1\0\11\61\1\0\16\61\15\0\1\43"+ + "\23\0\1\234\1\235\61\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\3\62\1\236\12\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\237\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\240\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\241\1\62"+ + "\1\242\6\0\2\62\1\243\1\62\1\61\1\0\4\62"+ + "\1\244\4\62\1\0\16\62\15\0\1\43\32\0\1\43"+ + "\70\0\1\43\33\0\1\43\52\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\245\1\246\1\247"+ + "\2\62\6\0\4\62\1\61\1\0\1\250\3\62\1\251"+ + "\1\252\3\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\253\1\254\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\255\1\256"+ + "\6\0\4\62\1\61\1\0\7\62\1\257\1\260\1\0"+ + "\1\62\1\261\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\262\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\2\62\1\262\6\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\257\1\62\1\257"+ + "\1\263\2\62\6\0\4\62\1\61\1\0\4\62\1\264"+ + "\4\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\265\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\266\1\62\1\267\3\62\6\0"+ + "\1\62\1\270\2\62\1\61\1\0\1\62\1\271\7\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\272\1\62\1\273\3\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\274\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\275\1\276"+ + "\1\62\6\0\4\62\1\61\1\0\4\62\1\277\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\300\1\62\1\0\1\61\1\62"+ + "\2\0\3\62\1\301\1\62\2\0\5\62\1\302\6\0"+ + "\4\62\1\61\1\0\6\62\1\303\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\304\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\305\1\62\1\306\1\307\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\310"+ + "\1\62\1\61\1\0\1\311\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\312"+ + "\3\62\6\0\4\62\1\61\1\0\4\62\1\257\1\313"+ + "\3\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\314\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\257\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\62\1\315\14\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\316\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\257\1\62\1\317\3\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\320\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\321\2\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\322\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\323\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\324\2\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\325\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\326\2\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\2\62\1\327\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\330\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\10\144\1\0\31\144"+ + "\1\0\3\144\1\0\25\144\2\0\26\144\41\0\1\331"+ + "\134\0\1\332\15\0\1\333\105\0\1\334\146\0\1\335"+ + "\26\0\10\152\1\0\35\152\1\0\25\152\2\0\26\152"+ + "\52\0\1\336\15\0\1\337\105\0\1\340\146\0\1\341"+ + "\27\0\3\157\1\0\2\157\11\0\4\157\2\0\2\157"+ + "\3\0\3\157\5\0\6\157\1\0\6\157\6\0\4\157"+ + "\2\0\11\157\1\0\16\157\17\0\1\342\30\0\1\343"+ + "\54\0\1\344\3\0\1\344\12\0\4\344\2\0\1\344"+ + "\4\0\3\344\5\0\5\344\2\0\6\344\6\0\4\344"+ + "\2\0\11\344\1\0\16\344\71\0\1\345\110\0\1\346"+ + "\72\0\1\347\150\0\1\350\146\0\1\351\53\0\1\352"+ + "\76\0\5\61\13\0\4\61\2\0\3\61\2\0\1\353"+ + "\2\61\1\0\2\61\2\0\5\61\2\0\6\61\6\0"+ + "\5\61\1\0\11\61\1\0\16\61\5\174\13\0\4\174"+ + "\2\0\3\174\2\0\3\174\1\0\2\174\2\0\5\174"+ + "\2\0\6\174\6\0\5\174\1\0\11\174\1\0\20\174"+ + "\2\175\1\174\13\0\1\174\1\176\2\174\2\0\1\174"+ + "\1\175\1\174\2\0\3\174\1\0\2\174\2\0\2\174"+ + "\2\176\1\200\2\0\2\174\1\200\3\174\6\0\5\174"+ + "\1\0\2\174\1\176\6\174\1\0\20\174\2\354\1\174"+ + "\13\0\4\174\2\0\1\174\1\354\1\174\2\0\3\174"+ + "\1\0\2\174\2\0\5\174\2\355\6\174\6\0\5\174"+ + "\1\0\11\174\1\0\20\174\2\201\1\174\1\0\1\175"+ + "\11\0\1\174\1\176\2\174\2\0\1\174\1\201\1\174"+ + "\2\0\3\174\1\0\2\174\2\0\2\174\2\176\1\200"+ + "\2\0\2\174\1\200\3\174\6\0\5\174\1\0\2\174"+ + "\1\176\6\174\1\0\20\174\1\201\1\202\1\174\1\0"+ + "\1\175\11\0\1\174\1\176\2\174\2\0\1\174\1\202"+ + "\1\174\2\0\3\174\1\0\2\174\2\0\1\174\1\356"+ + "\2\176\1\200\2\0\2\174\1\200\1\174\1\356\1\174"+ + "\6\0\5\174\1\0\2\174\1\176\6\174\1\0\20\174"+ + "\2\357\1\174\13\0\3\357\1\174\2\0\2\357\1\174"+ + "\2\0\2\174\1\357\1\0\2\174\2\0\2\174\3\357"+ + "\2\0\2\174\2\357\2\174\6\0\1\174\1\357\3\174"+ + "\1\0\2\174\1\357\6\174\1\0\16\174\17\0\1\360"+ + "\105\0\1\361\3\0\1\361\12\0\4\361\2\0\1\361"+ + "\4\0\3\361\5\0\5\361\2\0\6\361\6\0\1\362"+ + "\3\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\4\62\1\363\1\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\364\5\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\365\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\25\0"+ + "\1\366\113\0\1\43\7\0\1\72\76\0\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\367\4\62\1\0\16\62\3\370"+ + "\1\102\4\370\1\0\16\370\4\102\1\371\2\102\10\370"+ + "\1\102\3\370\2\102\50\370\30\217\1\372\1\217\1\373"+ + "\74\217\1\103\4\217\1\0\16\217\4\103\1\374\2\103"+ + "\10\217\1\103\3\217\2\103\50\217\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\2\62\1\375\1\62\1\376"+ + "\1\62\6\0\4\62\1\61\1\0\2\62\1\377\6\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\257\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0100\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\u0101\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\4\62\1\u0102\1\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\62\1\u0103\6\62\1\u0104\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0105"+ + "\5\62\6\0\4\62\1\61\1\0\6\62\1\u0106\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\257\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0107\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ + "\2\0\1\61\1\u0108\1\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\5\61\1\0\11\61\1\0\16\61"+ + "\42\0\1\u0109\61\0\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\1\62\1\u010a\3\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u010b\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u010c\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u010d\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\1\62\1\u010e\2\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u010f\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u0110\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\u0111\2\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0112\2\62\6\0\4\62\1\61"+ + "\1\0\5\62\1\257\3\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0113\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0114"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u0115\4\62\6\0\2\62\1\u0116\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\1\u0117\15\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0118\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\u0119\5\62\6\0\4\62\1\61\1\0"+ + "\6\62\1\u011a\2\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u011b\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\223\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\1\62"+ + "\1\u011c\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u011d\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u011e"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\257\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\2\62\1\u011f\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u0120\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\3\62\1\u0121\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0122\2\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0123\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0124\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0125\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u0126\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0127"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u0128\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u0129\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u012a\3\62\1\u011e\1\223\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u012b\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u012c\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u012d\5\62\6\0\1\62"+ + "\1\u012e\2\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\2\62\1\u012f\2\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\2\62\1\u0130\2\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\4\62\1\u0131\11\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0132\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\2\62\1\u0133\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0134\3\62\6\0\2\62\1\u0135"+ + "\1\62\1\61\1\0\4\62\1\u0136\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u0137\4\62\6\0\1\62\1\u0138\2\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0139\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u013a\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u013b\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\3\62\1\u013c\1\62\2\0\4\62\1\u013d"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u013e\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\1\u013f\3\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u0140\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\10\62\1\u0141"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0142\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0143\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\257\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\262\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\5\62\1\u0144\3\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0145\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\u0146\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\62\1\u0147\14\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0148"+ + "\1\62\6\0\4\62\1\61\1\0\6\62\1\u0149\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\6\62\1\u014a\7\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u014b\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\71\0\1\u014c\110\0\1\u014d"+ + "\117\0\1\u014e\146\0\1\u014f\117\0\1\u0150\110\0\1\u0151"+ + "\117\0\1\u0152\146\0\1\u0153\46\0\1\u0154\153\0\1\u0155"+ + "\54\0\3\344\1\0\2\344\11\0\4\344\2\0\2\344"+ + "\3\0\3\344\5\0\6\344\1\0\6\344\6\0\4\344"+ + "\2\0\11\344\1\0\16\344\5\0\1\u0156\172\0\1\345"+ + "\140\0\1\u0157\40\0\1\u0158\115\0\2\61\2\u0159\1\61"+ + "\13\0\3\u0159\1\61\2\0\2\u0159\1\61\2\0\2\61"+ + "\1\u0159\1\0\2\61\2\0\2\61\3\u0159\2\0\2\61"+ + "\2\u0159\2\61\6\0\1\61\1\u0159\3\61\1\0\2\61"+ + "\1\u0159\6\61\1\0\16\61\2\174\2\354\1\174\13\0"+ + "\1\174\1\176\2\174\2\0\1\174\1\354\1\174\2\0"+ + "\3\174\1\0\2\174\2\0\2\174\2\176\1\174\2\0"+ + "\6\174\6\0\5\174\1\0\2\174\1\176\6\174\1\0"+ + "\16\174\2\0\2\354\23\0\1\354\74\0\2\174\2\357"+ + "\1\174\13\0\3\357\1\174\2\0\2\357\1\174\2\0"+ + "\2\174\1\357\1\0\2\174\2\0\1\174\1\356\3\357"+ + "\2\0\2\174\2\357\1\356\1\174\6\0\1\174\1\357"+ + "\3\174\1\0\2\174\1\357\6\174\1\0\16\174\20\0"+ + "\1\u015a\104\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ + "\6\0\4\361\2\0\11\361\1\0\16\361\1\0\3\361"+ + "\1\0\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0"+ + "\3\361\5\0\6\361\1\0\6\361\6\0\1\361\1\u015c"+ + "\2\361\2\0\11\361\1\0\16\361\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u015d\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0144\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\323"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u015e\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\30\370\1\u015f\1\u0160\74\370\2\u0161\14\370\3\u0161"+ + "\3\370\2\u0161\1\u015f\1\u0160\3\370\1\u0161\7\370\3\u0161"+ + "\4\370\2\u0161\11\370\1\u0161\6\370\1\u0161\25\370\10\217"+ + "\1\0\115\217\2\u0162\14\217\3\u0162\3\217\2\u0162\1\372"+ + "\1\217\1\373\2\217\1\u0162\7\217\3\u0162\4\217\2\u0162"+ + "\11\217\1\u0162\6\217\1\u0162\25\217\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\5\62\1\256\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0163\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0164\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0144\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0165"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\257\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\4\62\1\u0166\1\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u0167\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0168\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0169\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u016a\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\5\61\13\0\4\61"+ + "\2\0\3\61\2\0\3\61\1\0\2\61\2\0\5\61"+ + "\2\0\6\61\6\0\1\61\1\u016b\3\61\1\0\11\61"+ + "\1\0\16\61\41\0\1\u016c\62\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\u016d\3\62"+ + "\1\61\1\0\11\62\1\0\4\62\1\u016e\11\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\1\62\1\u016f\2\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\1\62\1\u0170\2\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0111\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0171\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0172\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\u0173\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0174\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u0175\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0176\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\1\u0177\15\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0178\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\257\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\u0179\15\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u017a\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\1\u017b"+ + "\2\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u017c\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u017d\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u017e\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u017f\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\4\62\1\u0180\1\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u0102\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\2\62\1\u0181\6\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\321\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0182\1\u0183"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\3\62\1\u0184\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\10\62\1\u0185"+ + "\5\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u0186\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u012a\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0187\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u010b\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0188\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u013a"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\5\62\1\u0116\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\u0189\4\62\1\231"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u018a"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u018b\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u018c\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u018d\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u018e\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u018f\1\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u0190\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0182"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\1\62\1\u0167"+ + "\14\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u0191\1\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\1\62\1\u0192\14\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u0193\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\5\62\1\u0194\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\3\62\1\u0195\5\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\5\62\1\u0180\3\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\257\10\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\223\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u0196"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u0197\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u0198\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0199\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\u019a\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\5\62\1\u019b\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\3\62"+ + "\1\u019c\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\7\62\1\u019d\1\u0185\1\u019e\4\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\4\62\1\u019f\4\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\1\u0144\10\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\364\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\2\62\1\u01a0\1\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0144\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\2\62\1\u01a1\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u01a2\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\363\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\5\0\1\u01a3\172\0\1\u014c"+ + "\140\0\1\u01a4\40\0\1\u01a5\122\0\1\u01a6\172\0\1\u0150"+ + "\140\0\1\u01a7\40\0\1\u01a8\136\0\1\u01a9\143\0\1\u01aa"+ + "\67\0\1\u0156\51\0\1\345\45\0\3\u0158\3\u01ab\4\0"+ + "\5\u01ab\4\u0158\1\u01ab\1\0\2\u0158\1\0\1\u01ab\1\0"+ + "\3\u0158\1\0\1\u01ab\2\u0158\1\u01ab\5\u0158\2\u01ab\6\u0158"+ + "\1\0\1\u01ab\1\0\3\u01ab\4\u0158\2\u01ab\11\u0158\1\0"+ + "\16\u0158\2\61\2\u01ac\1\61\13\0\3\u01ac\1\61\2\0"+ + "\2\u01ac\1\61\2\0\2\61\1\u01ac\1\0\2\61\2\0"+ + "\2\61\3\u01ac\2\0\2\61\2\u01ac\2\61\6\0\1\61"+ + "\1\u01ac\3\61\1\0\2\61\1\u01ac\6\61\1\0\16\61"+ + "\21\0\1\u01ad\103\0\3\361\1\0\1\u015b\1\361\11\0"+ + "\4\361\2\0\2\361\3\0\3\361\5\0\6\361\1\0"+ + "\6\361\6\0\1\362\3\361\2\0\11\361\1\0\16\361"+ + "\1\0\3\361\1\0\1\u015b\1\361\11\0\4\361\2\0"+ + "\2\361\3\0\3\361\5\0\6\361\1\0\1\361\1\u01ae"+ + "\4\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\62\1\u0144"+ + "\4\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u01af\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\10\370\1\0\115\370\2\u01b0\14\370\3\u01b0\3\370"+ + "\2\u01b0\1\u015f\1\u0160\3\370\1\u01b0\7\370\3\u01b0\4\370"+ + "\2\u01b0\11\370\1\u01b0\6\370\1\u01b0\25\370\2\217\2\u01b1"+ + "\14\217\3\u01b1\3\217\2\u01b1\1\372\1\217\1\373\2\217"+ + "\1\u01b1\7\217\3\u01b1\4\217\2\u01b1\11\217\1\u01b1\6\217"+ + "\1\u01b1\25\217\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u01b2\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\3\62\1\u01b3\1\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u01b4\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01b5\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\2\62\1\u01b6\2\62\2\0\6\62\6\0"+ + "\1\u01b7\3\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\62\1\223\14\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ + "\1\u01b8\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\3\62\1\257\5\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\4\61\1\u01b9\1\61"+ + "\6\0\5\61\1\0\11\61\1\0\17\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u01ba\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u01bb\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bc\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u01bd\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u01be\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u01bf\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\54\0\1\u01c0\47\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u0180\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\3\62\1\u01c1\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\2\62\1\u01c2\3\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\1\62\1\257\7\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u01c3"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\4\62\1\u01c4\4\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\62\1\u01c5\4\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\62\1\u01c6\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\u01c7\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\3\62\1\u0175\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u01c8\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\3\62\1\u01c9\3\62\1\u01ca\6\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u01cb\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u01cc\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\1\62\1\u01cd\1\u01ce\1\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\62\1\u01cf\4\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u011e\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\u01d0\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\2\62\1\u0144\6\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u01d1\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\62"+ + "\1\u01d2\4\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u01d3\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u01d4\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\u01d5\1\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\4\62\1\u0180\11\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\2\62\1\u01d6\3\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\231\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\u01d7\5\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0197\2\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01d8"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\2\62"+ + "\1\u01d9\3\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u01da\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\u01db\2\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\223\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0182"+ + "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u01dc\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\62\1\u01dd\4\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\270"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u01de\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01df"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\12\62\1\u01e0"+ + "\3\62\1\61\4\62\13\0\2\62\1\u01e1\1\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u01e2\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u015d\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\1\62\1\u0100\2\62"+ + "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01e3\67\0"+ + "\1\u01a3\51\0\1\u014c\45\0\3\u01a5\3\u01e4\4\0\5\u01e4"+ + "\4\u01a5\1\u01e4\1\0\2\u01a5\1\0\1\u01e4\1\0\3\u01a5"+ + "\1\0\1\u01e4\2\u01a5\1\u01e4\5\u01a5\2\u01e4\6\u01a5\1\0"+ + "\1\u01e4\1\0\3\u01e4\4\u01a5\2\u01e4\11\u01a5\1\0\16\u01a5"+ + "\41\0\1\u01e5\67\0\1\u01a6\51\0\1\u0150\45\0\3\u01a8"+ + "\3\u01e6\4\0\5\u01e6\4\u01a8\1\u01e6\1\0\2\u01a8\1\0"+ + "\1\u01e6\1\0\3\u01a8\1\0\1\u01e6\2\u01a8\1\u01e6\5\u01a8"+ + "\2\u01e6\6\u01a8\1\0\1\u01e6\1\0\3\u01e6\4\u01a8\2\u01e6"+ + "\11\u01a8\1\0\16\u01a8\22\0\1\u01e7\142\0\1\u0158\62\0"+ + "\2\61\2\u01e8\1\61\13\0\3\u01e8\1\61\2\0\2\u01e8"+ + "\1\61\2\0\2\61\1\u01e8\1\0\2\61\2\0\2\61"+ + "\3\u01e8\2\0\2\61\2\u01e8\2\61\6\0\1\61\1\u01e8"+ + "\3\61\1\0\2\61\1\u01e8\6\61\1\0\16\61\22\0"+ + "\1\u01e9\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\6\361"+ + "\6\0\2\361\1\u01ea\1\361\2\0\11\361\1\0\16\361"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u01eb\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\2\370\2\u01ec\14\370\3\u01ec\3\370\2\u01ec\1\u015f"+ + "\1\u0160\3\370\1\u01ec\7\370\3\u01ec\4\370\2\u01ec\11\370"+ + "\1\u01ec\6\370\1\u01ec\25\370\2\217\2\u01ed\14\217\3\u01ed"+ + "\3\217\2\u01ed\1\372\1\217\1\373\2\217\1\u01ed\7\217"+ + "\3\u01ed\4\217\2\u01ed\11\217\1\u01ed\6\217\1\u01ed\25\217"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u01ee\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\2\62\1\u01ef\1\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u01f0\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0175\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\62\1\u01f1\4\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\1\62\1\u01f2"+ + "\2\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\3\62"+ + "\1\u01f3\1\61\1\0\11\62\1\0\16\62\5\61\13\0"+ + "\4\61\2\0\3\61\2\0\1\u01f4\2\61\1\0\2\61"+ + "\2\0\5\61\2\0\6\61\6\0\5\61\1\0\11\61"+ + "\1\0\17\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\1\62\1\u01f5\2\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\2\62\1\364"+ + "\6\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u01f6\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u01f7\1\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\6\62\1\u01f8\2\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u01f9\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\55\0"+ + "\1\u01fa\46\0\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u01fb\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\1\u01fc\5\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u01fd\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\3\62\1\257\1\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\62\1\257\1\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u01fe\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u0180\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u0116\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\4\62\1\u01ff\4\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\3\62\1\u0200\2\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\257\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\1\62"+ + "\1\u01cd\2\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0201\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\4\62\1\u0202\1\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u0203\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\1\u0144\15\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0204\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u0205\1\62\1\0\1\61\1\62\2\0"+ + "\3\62\1\u01f3\1\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\223\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\6\62\1\u0206\2\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\2\62"+ + "\1\u0207\1\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\6\62\1\u0208\2\62\1\0\16\62"+ + "\1\61\4\62\13\0\2\62\1\u0209\1\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\4\62\1\u020a\11\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\1\62\1\u020b\2\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\2\62\1\u020c\2\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\13\62\1\u020d\2\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\1\223\15\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\231"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\3\62\1\u020e\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u01d3\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\6\62\1\u020f\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\u0210\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\1\62\1\u0180\3\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0211\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\1\u0212\3\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\41\0\1\u01a5\123\0"+ + "\1\u01a8\105\0\1\u0213\100\0\2\61\2\62\1\61\13\0"+ + "\3\62\1\61\2\0\2\62\1\61\2\0\2\61\1\62"+ + "\1\0\2\61\2\0\2\61\3\62\2\0\2\61\2\62"+ + "\2\61\6\0\1\61\1\62\3\61\1\0\2\61\1\62"+ + "\6\61\1\0\16\61\23\0\1\u0214\101\0\3\361\1\0"+ + "\1\u015b\1\361\11\0\4\361\2\0\2\361\3\0\3\361"+ + "\5\0\6\361\1\0\6\361\6\0\3\361\1\u0215\2\0"+ + "\11\361\1\0\16\361\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0144\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\2\370\2\102\14\370\3\102"+ + "\3\370\2\102\1\u015f\1\u0160\3\370\1\102\7\370\3\102"+ + "\4\370\2\102\11\370\1\102\6\370\1\102\25\370\2\217"+ + "\2\103\14\217\3\103\3\217\2\103\1\372\1\217\1\373"+ + "\2\217\1\103\7\217\3\103\4\217\2\103\11\217\1\103"+ + "\6\217\1\103\25\217\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\3\62\1\u01c9\12\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\1\62\1\u0216\1\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\2\62\1\u0217\1\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\3\62\1\u0218\2\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u01b5"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u0219\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\5\61\13\0\4\61\2\0\3\61\2\0\3\61"+ + "\1\0\2\61\2\0\5\61\2\0\6\61\6\0\5\61"+ + "\1\0\2\61\1\u021a\6\61\1\0\17\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\3\62\1\u021b\5\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u01eb\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u01c5\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\3\62"+ + "\1\u021c\2\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\5\62\1\257\3\62"+ + "\1\0\16\62\67\0\1\u021d\34\0\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u021e\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\10\62\1\u021f\5\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\14\62\1\u0220\1\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\3\62\1\u0221"+ + "\12\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\62"+ + "\1\u0222\14\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\62\1\u0223\4\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\3\62\1\u0224\2\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0225\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0226"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\1\223\2\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\u0102\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0227\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\1\u0175\5\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0228"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\5\62"+ + "\1\u0229\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\u01c7\2\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0216"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u022a\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\62\1\u022b\1\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\4\62"+ + "\1\u022c\2\0\6\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u022d\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\5\62\1\u022e\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\2\62"+ + "\1\u022f\6\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\u0230\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\22\0\1\u0231\123\0"+ + "\1\u0232\102\0\3\361\1\0\1\u015b\1\361\11\0\4\361"+ + "\2\0\2\361\3\0\3\361\5\0\6\361\1\0\1\u0233"+ + "\5\361\6\0\4\361\2\0\11\361\1\0\16\361\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\262"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\3\62\1\u0234\1\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\6\62\1\u0175\2\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\1\62\1\223\2\62\1\61\1\0"+ + "\11\62\1\0\16\62\5\61\13\0\4\61\2\0\3\61"+ + "\2\0\3\61\1\0\2\61\2\0\5\61\2\0\2\61"+ + "\1\u0235\3\61\6\0\5\61\1\0\11\61\1\0\17\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\2\62\1\u0100"+ + "\3\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0236\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\74\0\1\u0237\27\0\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\1\u0238\15\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u0239\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\2\62\1\u023a"+ + "\1\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\4\62\1\u023b\4\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u023c\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u023d\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\11\62\1\0\1\u0180"+ + "\15\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\1\u023e\3\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u023f\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\1\62"+ + "\1\u0240\3\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0241\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\1\u0242\1\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0243\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\u0180\5\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\1\62\1\u0244\14\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0180\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u0245\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\1\u0246\3\62\1\61\1\0\11\62\1\0\10\62"+ + "\1\u0247\5\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\2\62\1\u0248\1\62\1\61\1\0"+ + "\11\62\1\0\16\62\17\0\1\u0249\123\0\1\366\105\0"+ + "\3\361\1\0\1\u015b\1\361\1\u024a\2\0\1\u024a\5\0"+ + "\4\361\1\0\1\u024b\2\361\3\0\3\361\5\0\6\361"+ + "\1\0\6\361\6\0\4\361\2\0\11\361\1\u024a\16\361"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u024c"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\2\62\1\u0180\6\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\231\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u024d\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\u024e\15\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\1\62\1\u024f\14\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u0250\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\3\62\1\u0251\2\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\4\62\1\u0252\4\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\1\62\1\u0253\4\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\4\62\1\u0254\4\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\1\u0116"+ + "\5\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\2\62\1\u0255\1\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u022b\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\2\62\1\u0256\3\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\4\62\1\61\1\0\4\62"+ + "\1\u0257\4\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\1\u0258\5\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\4\62\1\307\1\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\3\62\1\u0144"+ + "\1\61\1\0\11\62\1\0\16\62\7\0\1\u024a\2\0"+ + "\1\u024a\12\0\1\u024b\57\0\1\u024a\16\0\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0259\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\1\u0180\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\4\62\1\61\1\0\1\u025a\10\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\6\62\6\0"+ + "\2\62\1\u025b\1\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\6\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\4\62\1\u020a"+ + "\11\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\2\62\1\u025c\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\1\u025d\2\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\1\u0139\5\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\3\62\1\u025e\2\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\1\u025f\5\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\1\62\1\231\1\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\62\1\u0180\1\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\6\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\4\62\1\u0260\4\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\1\62\1\u0261\4\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\15\62\1\u0262\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\2\62\1\u0263\3\62"+ + "\6\0\4\62\1\61\1\0\11\62\1\0\16\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\4\62\1\u0264"+ + "\1\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\1\62\1\u0265\1\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\4\62\1\61\1\0\2\62\1\u0216\6\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\6\62\6\0\4\62\1\61\1\0\6\62\1\u0266"+ + "\2\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\3\62\1\u0180\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\4\62\1\u0267\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\1\u0268\2\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\1\u0269\3\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\2\62\1\u026a\3\62\6\0\4\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\4\62\1\61\1\0"+ + "\2\62\1\u026b\6\62\1\0\16\62\1\61\4\62\13\0"+ + "\4\62\2\0\2\62\1\173\2\0\3\62\1\0\1\61"+ + "\1\62\2\0\5\62\2\0\3\62\1\u026c\2\62\6\0"+ + "\4\62\1\61\1\0\11\62\1\0\16\62\1\61\4\62"+ + "\13\0\4\62\2\0\2\62\1\173\2\0\3\62\1\0"+ + "\1\61\1\62\2\0\5\62\2\0\6\62\6\0\4\62"+ + "\1\61\1\0\11\62\1\0\1\62\1\u026d\14\62\1\61"+ + "\4\62\13\0\4\62\2\0\2\62\1\173\2\0\3\62"+ + "\1\0\1\61\1\62\2\0\5\62\2\0\3\62\1\u026e"+ + "\2\62\6\0\4\62\1\61\1\0\11\62\1\0\16\62"+ + "\1\61\4\62\13\0\4\62\2\0\2\62\1\173\2\0"+ + "\3\62\1\0\1\61\1\62\2\0\5\62\2\0\4\62"+ + "\1\u026f\1\62\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0250\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\5\62\1\u0180\6\0\4\62\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\6\62\6\0\3\62\1\u0250\1\61\1\0\11\62\1\0"+ + "\16\62\1\61\4\62\13\0\4\62\2\0\2\62\1\173"+ + "\2\0\3\62\1\0\1\61\1\62\2\0\5\62\2\0"+ + "\2\62\1\u020d\3\62\6\0\4\62\1\61\1\0\11\62"+ + "\1\0\16\62\1\61\4\62\13\0\4\62\2\0\2\62"+ + "\1\173\2\0\3\62\1\0\1\61\1\62\2\0\5\62"+ + "\2\0\4\62\1\u0270\1\62\6\0\4\62\1\61\1\0"+ + "\11\62\1\0\16\62\1\61\4\62\13\0\4\62\2\0"+ + "\2\62\1\173\2\0\3\62\1\0\1\61\1\62\2\0"+ + "\5\62\2\0\6\62\6\0\2\62\1\u0260\1\62\1\61"+ + "\1\0\11\62\1\0\16\62\1\61\4\62\13\0\4\62"+ + "\2\0\2\62\1\173\2\0\3\62\1\0\1\61\1\62"+ + "\2\0\5\62\2\0\6\62\6\0\2\62\1\u0253\1\62"+ + "\1\61\1\0\11\62\1\0\16\62"; + + private static int [] zzUnpackTrans() { + int [] result = new int[48384]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\2\1\1\0\2\1\4\0\2\1\1\11\4\1"+ + "\1\11\5\1\1\11\2\1\2\11\2\1\4\11\2\1"+ + "\1\11\1\1\4\11\7\1\1\11\2\1\1\11\1\1"+ + "\1\11\13\1\1\11\35\1\1\11\5\1\1\11\6\1"+ + "\2\11\5\0\1\11\1\0\11\1\3\0\3\1\1\0"+ + "\3\1\1\11\2\1\1\11\12\1\1\11\74\1\1\11"+ + "\12\0\1\1\2\0\1\11\2\0\1\11\2\1\1\0"+ + "\2\1\3\0\3\1\1\11\4\1\1\11\15\1\1\0"+ + "\102\1\11\0\1\11\2\0\2\1\3\0\3\1\1\11"+ + "\13\1\1\11\6\1\1\0\57\1\2\0\1\1\2\0"+ + "\1\1\3\0\1\1\2\0\21\1\1\0\42\1\5\0"+ + "\1\1\2\0\17\1\1\0\30\1\3\0\7\1\1\0"+ + "\23\1\3\0\3\1\1\11\21\1\1\11\1\0\1\11"+ + "\45\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[624]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + public static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to JSPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + public static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to this class; this signals that the user has + * ended a line with an unclosed XML tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG = -3; + + /** + * Token type specific to this class; this signals that the user has + * ended a line with an unclosed Script tag; thus a new line is beginning + * still inside of the tag. + */ + public static final int INTERNAL_INTAG_SCRIPT = -4; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in the middle of a double-quoted attribute in a Script + * tag. + */ + public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in the middle of a single-quoted attribute in a Script + * tag. + */ + public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in an ActionScript code block (text content inside a + * Script tag). + */ + public static final int INTERNAL_IN_AS = -7; + + /** + * Token type specific to this class; this signals that the user has + * ended a line in an MLC in an ActionScript code block (text content + * inside a Script tag). + */ + public static final int INTERNAL_IN_AS_MLC = -8; + + /** + * Whether closing markup tags are automatically completed for HTML. + */ + private static boolean completeCloseTags; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public MxmlTokenMaker() { + } + + + static { + completeCloseTags = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns whether markup close tags should be completed. For XML, the + * default value is true. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + /** + * Static version of {@link #getCompleteCloseTags()}. This hack is + * unfortunately needed for applications to be able to query this value + * without instantiating this class. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + public static boolean getCompleteCloseMarkupTags() { + return completeCloseTags; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in XML files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + start = text.offset; + break; + case Token.MARKUP_DTD: + state = DTD; + start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + start = text.offset; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + start = text.offset; + break; + case Token.MARKUP_PROCESSING_INSTRUCTION: + state = PI; + start = text.offset; + break; + case INTERNAL_INTAG: + state = INTAG; + start = text.offset; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + start = text.offset; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + start = text.offset; + break; + case INTERNAL_IN_AS: + state = AS; + start = text.offset; + break; + case INTERNAL_IN_AS_MLC: + state = AS_MLC; + start = text.offset; + break; + case Token.MARKUP_CDATA: + state = CDATA; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public MxmlTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public MxmlTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 190) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - super.addToken(array, start, end, tokenType, startOffset, hyperlink); - zzStartRead = zzMarkedPos; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Returns whether markup close tags should be completed. For XML, the default value is true. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public boolean getCompleteCloseTags() { - return completeCloseTags; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Static version of {@link #getCompleteCloseTags()}. This hack is unfortunately needed for applications to be able - * to query this value without instantiating this class. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public static boolean getCompleteCloseMarkupTags() { - return completeCloseTags; - } + throw new Error(message); + } - /** - * Always returns false, as you never want "mark occurrences" working in XML files. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return false; - } - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = COMMENT; - start = text.offset; - break; - case Token.FUNCTION: - state = DTD; - start = text.offset; - break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = INATTR_DOUBLE; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = INATTR_SINGLE; - start = text.offset; - break; - case Token.PREPROCESSOR: - state = PI; - start = text.offset; - break; - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - case INTERNAL_INTAG_SCRIPT: - state = INTAG_SCRIPT; - start = text.offset; - break; - case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: - state = INATTR_DOUBLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: - state = INATTR_SINGLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_IN_AS: - state = AS; - start = text.offset; - break; - case INTERNAL_IN_AS_MLC: - state = AS_MLC; - start = text.offset; - break; - case Token.VARIABLE: - state = CDATA; - start = text.offset; - break; - default: - state = Token.NULL; - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + zzMarkedPos -= number; + } - } - /** - * Sets whether markup close tags should be completed. - * - * @param complete - * Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public MxmlTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public MxmlTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 190) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + while (true) { + zzMarkedPosL = zzMarkedPos; - if (zzReader != null) - zzReader.close(); - } + zzAction = -1; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + zzState = zzLexicalState; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 2: { - addToken(Token.IDENTIFIER); - } - case 59: - break; - case 22: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 60: - break; - case 53: { - addToken(Token.LITERAL_BOOLEAN); - } - case 61: - break; - case 31: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_AS); - return firstToken; - } - case 62: - break; - case 39: { - addToken(Token.ERROR_CHAR); - } - case 63: - break; - case 36: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 64: - break; - case 26: { - addEndToken(INTERNAL_IN_AS); - return firstToken; - } - case 65: - break; - case 20: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE_SCRIPT); - } - case 66: - break; - case 13: { - yybegin(YYINITIAL); - addToken(Token.MARKUP_TAG_DELIMITER); - } - case 67: - break; - case 28: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 68: - break; - case 40: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 69: - break; - case 54: { - addToken(Token.FUNCTION); - } - case 70: - break; - case 45: { - int count = yylength(); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - (count - 2), zzMarkedPos - 1, Token.MARKUP_TAG_NAME); - yybegin(INTAG); - } - case 71: - break; - case 33: { - start = zzMarkedPos - 2; - yybegin(DTD); - } - case 72: - break; - case 57: { - addToken(Token.DATA_TYPE); - start = zzMarkedPos; - yybegin(CDATA); - } - case 73: - break; - case 29: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 74: - break; - case 48: { - addToken(Token.DATA_TYPE); - } - case 75: - break; - case 24: { - addToken(Token.ERROR_IDENTIFIER); - } - case 76: - break; - case 10: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.FUNCTION); - } - case 77: - break; - case 18: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_CHAR); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 78: - break; - case 4: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(INTAG); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 79: - break; - case 30: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_AS_MLC); - return firstToken; - } - case 80: - break; - case 35: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.PREPROCESSOR); - } - case 81: - break; - case 49: { - addToken(Token.LITERAL_CHAR); - } - case 82: - break; - case 34: { - start = zzMarkedPos - 2; - yybegin(PI); - } - case 83: - break; - case 15: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE); - } - case 84: - break; - case 44: { - yybegin(AS); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 85: - break; - case 38: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 86: - break; - case 21: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE_SCRIPT); - } - case 87: - break; - case 43: { - start = zzMarkedPos - 2; - yybegin(AS_MLC); - } - case 88: - break; - case 16: { - addToken(Token.MARKUP_TAG_DELIMITER); /* Not valid but we'll still accept it */ - } - case 89: - break; - case 5: { - addToken(Token.WHITESPACE); - } - case 90: - break; - case 32: { - int count = yylength(); - String tag = yytext(); // Get before addToken calls - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - (count - 1), zzMarkedPos - 1, Token.MARKUP_TAG_NAME); - if (tag.endsWith(":Script") || tag.equals("' + while (Character.isWhitespace(text.charAt(tagNameEnd))) { + tagNameEnd--; + } + int tagNameLen = tagNameEnd - 1; + yybegin(YYINITIAL); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(origStart+2,origStart+2+tagNameLen-1, Token.MARKUP_TAG_NAME); + if (tagNameEnd' - while (Character.isWhitespace(text.charAt(tagNameEnd))) { - tagNameEnd--; - } - int tagNameLen = tagNameEnd - 1; - yybegin(YYINITIAL); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - addToken(origStart + 2, origStart + 2 + tagNameLen - 1, Token.MARKUP_TAG_NAME); - if (tagNameEnd < text.length() - 2) { - addToken(origStart + tagNameEnd + 1, zzMarkedPos - 2, Token.WHITESPACE); - } - addToken(zzMarkedPos - 1, zzMarkedPos - 1, Token.MARKUP_TAG_DELIMITER); + case 635: break; + case INTAG: { + addToken(start,zzStartRead-1, INTERNAL_INTAG); return firstToken; } - case 114: - break; - case 50: { - addToken(Token.ERROR_STRING_DOUBLE); + case 636: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } - case 115: - break; - case 1: { + case 637: break; + case PI: { + addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } - case 116: - break; + case 638: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case AS_EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_AS); - return firstToken; - } - case 615: - break; - case AS_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_AS_MLC); - return firstToken; - } - case 616: - break; - case INTAG_SCRIPT: { - addToken(start, zzStartRead - 1, INTERNAL_INTAG_SCRIPT); - return firstToken; - } - case 617: - break; - case INATTR_DOUBLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); - return firstToken; - } - case 618: - break; - case CDATA: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 619: - break; - case INATTR_SINGLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); - return firstToken; - } - case 620: - break; - case DTD: { - addToken(start, zzStartRead - 1, Token.FUNCTION); - return firstToken; - } - case 621: - break; - case INATTR_SINGLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 622: - break; - case INATTR_DOUBLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 623: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 624: - break; - case AS: { - addEndToken(INTERNAL_IN_AS); - return firstToken; - } - case 625: - break; - case INTAG: { - addToken(start, zzStartRead - 1, INTERNAL_INTAG); - return firstToken; - } - case 626: - break; - case COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 627: - break; - case PI: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - return firstToken; - } - case 628: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.flex new file mode 100755 index 000000000..6c8e38a55 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.flex @@ -0,0 +1,742 @@ +/* + * 07/14/2014 + * + * NSISTokenMaker.java - Scanner for NSIS installer scripts. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for NSIS installer scripts.

                        + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                          + *
                        • The generated NSISTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • + *
                        + * + * @author Robert Futrell + * @version 1.0 + * + */ +%% + +%public +%class NSISTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%ignorecase +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public NSISTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Letter = ([A-Za-z]) +LetterOrUnderscore = ({Letter}|"_") +NonzeroDigit = ([1-9]) +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +IdentifierStart = ({LetterOrUnderscore}|[$/]) +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) + +LineTerminator = (\n) +WhiteSpace = ([ \t\f]) + +MLCBegin = ("/*") +MLCEnd = ("*/") +LineCommentBegin = ([;#]) + +IntegerLiteral = (({NonzeroDigit}{Digit}*)|"0") +HexLiteral = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}){NonSeparator}+) +BooleanLiteral = ("true"|"false") + +Separator = ([\(\)\{\}\[\]]) +Separator2 = ([\;,.]) + +NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&") +AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>=") +Operator = ({NonAssignmentOperator}|{AssignmentOperator}) + +Identifier = ({IdentifierStart}{IdentifierPart}*) +VariableStart = ("$") +Variable = ({VariableStart}({Identifier}|"{"{Identifier}"}")) + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrUnderscore}|{Digit}|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{Letter}|{Digit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state STRING +%state CHAR_LITERAL +%state BACKTICKS +%state MLC +%state EOL_COMMENT + +%% + + { + + /* Keywords */ + "function" | + "functionend" | + "section" | + "sectionend" | + "subsection" | + "subsectionend" { addToken(Token.RESERVED_WORD); } + + /* Instructions */ + "addbrandingimage" | + "addsize" | + "allowrootdirinstall" | + "allowskipfiles" | + "autoclosewindow" | + "bggradient" | + "brandingtext" | + "bringtofront" | + "callinstdll" | + "caption" | + "changeui" | + "checkbitmap" | + "completedtext" | + "componenttext" | + "copyfiles" | + "crccheck" | + "createdirectory" | + "createfont" | + "createshortcut" | + "delete" | + "deleteinisec" | + "deleteinistr" | + "deleteregkey" | + "deleteregvalue" | + "detailprint" | + "detailsbuttontext" | + "dirshow" | + "dirtext" | + "enumregkey" | + "enumregvalue" | + "exch" | + "exec" | + "execshell" | + "execwait" | + "expandenvstrings" | + "file" | + "fileclose" | + "fileerrortext" | + "fileopen" | + "fileread" | + "filereadbyte" | + "fileseek" | + "filewrite" | + "filewritebyte" | + "findclose" | + "findfirst" | + "findnext" | + "findwindow" | + "flushini" | + "getcurinsttype" | + "getcurrentaddress" | + "getdlgitem" | + "getdllversion" | + "getdllversionlocal" | + "getfiletime" | + "getfiletimelocal" | + "getfullpathname" | + "getfunctionaddress" | + "getlabeladdress" | + "gettempfilename" | + "getwindowtext" | + "hidewindow" | + "icon" | + "initpluginsdir" | + "installbuttontext" | + "installcolors" | + "installdir" | + "installdirregkey" | + "instprogressflags" | + "insttype" | + "insttypegettext" | + "insttypesettext" | + "intfmt" | + "intop" | + "langstring" | + "langstringup" | + "licensebkcolor" | + "licensedata" | + "licenseforceselection" | + "licensetext" | + "loadlanguagefile" | + "loadlanguagefile" | + "logset" | + "logtext" | + "miscbuttontext" | + "name" | + "nop" | + "outfile" | + "page" | + "plugindir" | + "pop" | + "push" | + "readenvstr" | + "readinistr" | + "readregdword" | + "readregstr" | + "regdll" | + "rename" | + "requestexecutionlevel" | + "reservefile" | + "rmdir" | + "searchpath" | + "sectiongetflags" | + "sectiongetinsttypes" | + "sectiongetsize" | + "sectiongettext" | + "sectionin" | + "sectionsetflags" | + "sectionsetinsttypes" | + "sectionsetsize" | + "sectionsettext" | + "sendmessage" | + "setautoclose" | + "setbkcolor" | + "setbrandingimage" | + "setcompress" | + "setcompressor" | + "setcurinsttype" | + "setdatablockoptimize" | + "setdatesave" | + "setdetailsprint" | + "setdetailsview" | + "setfileattributes" | + "setfont" | + "setoutpath" | + "setoverwrite" | + "setpluginunload" | + "setrebootflag" | + "setshellvarcontext" | + "setstaticbkcolor" | + "setwindowlong" | + "showinstdetails" | + "showuninstdetails" | + "showwindow" | + "silentinstall" | + "silentuninstall" | + "sleep" | + "spacetexts" | + "strcpy" | + "strlen" | + "subcaption" | + "uninstallbuttontext" | + "uninstallcaption" | + "uninstallicon" | + "uninstallsubcaption" | + "uninstalltext" | + "uninstpage" | + "unregdll" | + "var" | + "viaddversionkey" | + "videscription" | + "vicompanyname" | + "vicomments" | + "vilegalcopyrights" | + "vilegaltrademarks" | + "viproductname" | + "viproductversion" | + "windowicon" | + "writeinistr" | + "writeregbin" | + "writeregdword" | + "writeregexpandstr" | + "writeregstr" | + "writeuninstaller" | + "xpstyle" | + + /* Flow control instructions */ + "abort" | + "call" | + "clearerrors" | + "goto" | + "ifabort" | + "iferrors" | + "iffileexists" | + "ifrebootflag" | + "intcmp" | + "intcmpu" | + "iswindow" | + "messagebox" | + "reboot" | + "return" | + "quit" | + "seterrors" | + "strcmp" | + "strcmps" { addToken(Token.FUNCTION); } + + /* Compiler utility commands */ + "!addincludedir" | + "!addplugindir" | + "!define" | + "!include" | + "!cd" | + "!echo" | + "!error" | + "!insertmacro" | + "!packhdr" | + "!system" | + "!warning" | + "!undef" | + "!verbose" | + + /* Conditional compilation */ + "!ifdef" | + "!ifndef" | + "!if" | + "!else" | + "!endif" | + "!macro" | + "!macroend" { addToken(Token.RESERVED_WORD); } + + /* Global variables */ + "$0" | + "$1" | + "$2" | + "$3" | + "$4" | + "$5" | + "$6" | + "$7" | + "$8" | + "$9" | + "$INSTDIR" | + "$OUTDIR" | + "$CMDLINE" | + "$LANGUAGE" | + + /* Local variables */ + ("$R0"{Digit}) | + + /* Constants */ + "ARCHIVE" | + "CENTER" | + "CONTROL" | + "CUR" | + "EXT" | + ("F"{NonzeroDigit}) | + ("F1"{Digit}) | + ("F2"[0-4]) | + "FILE_ATTRIBUTE_ARCHIVE" | + "MB_ABORTRETRYIGNORE" | + "RIGHT" | + "RO" | + "SET" | + "SHIFT" | + "SW_SHOWMAXIMIZED" | + "SW_SHOWMINIMIZED" | + "SW_SHOWNORMAL" | + "a" | + "admin" | + "all" | + "alwaysoff" | + "auto" | + "both" | + "bottom" | + "bzip2" | + "checkbox" | + "colored" | + "components" | + "current" | + "custom" | + "directory" | + "force" | + "hide" | + "highest" | + "ifnewer" | + "instfiles" | + "license" | + "listonly" | + "manual" | + "nevershow" | + "none" | + "off" | + "on" | + "r" | + "radiobuttons" | + "show" | + "silent" | + "silentlog" | + "smooth" | + "textonly" | + "top" | + "try" | + "uninstConfirm" | + "user" | + "w" | + "zlib" | + "$$" | + "$DESKTOP" | + "$EXEDIR" | + "$HWNDPARENT" | + "$PLUGINSDIR" | + "$PROGRAMFILES" | + "$QUICKLAUNCH" | + "$SMPROGRAMS" | + "$SMSTARTUP" | + "$STARTMENU" | + "$SYSDIR" | + "$TEMP" | + "$WINDIR" | + "$\n" | + "$\r" | + "${NSISDIR}" | + "ALT" | + "END" | + "FILE_ATTRIBUTE_HIDDEN" | + "FILE_ATTRIBUTE_NORMAL" | + "FILE_ATTRIBUTE_OFFLINE" | + "FILE_ATTRIBUTE_READONLY" | + "FILE_ATTRIBUTE_SYSTEM" | + "FILE_ATTRIBUTE_TEMPORARY" | + "HIDDEN" | + "HKCC" | + "HKCR" | + "HKCU" | + "HKDD" | + "HKLM" | + "HKPD" | + "HKU" | + "SHCTX" | + "IDABORT" | + "IDCANCEL" | + "IDIGNORE" | + "IDNO" | + "IDOK" | + "IDRETRY" | + "IDYES" | + "LEFT" | + "MB_DEFBUTTON1" | + "MB_DEFBUTTON2" | + "MB_DEFBUTTON3" | + "MB_DEFBUTTON4" | + "MB_ICONEXCLAMATION" | + "MB_ICONINFORMATION" | + "MB_ICONQUESTION" | + "MB_ICONSTOP" | + "MB_OK" | + "MB_OKCANCEL" | + "MB_RETRYCANCEL" | + "MB_RIGHT" | + "MB_SETFOREGROUND" | + "MB_TOPMOST" | + "MB_YESNO" | + "MB_YESNOCANCEL" | + "NORMAL" | + "OFFLINE" | + "READONLY" | + "SYSTEM" | + "TEMPORARY" { addToken(Token.VARIABLE); } + + {LineTerminator} { addNullToken(); return firstToken; } + + /* Operators. */ + {Operator} { addToken(Token.OPERATOR); } + + {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {Identifier} { addToken(Token.IDENTIFIER); } + {Variable} { addToken(Token.VARIABLE); } + + {WhiteSpace}+ { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + \" { start = zzMarkedPos-1; yybegin(STRING); } + \' { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); } + \` { start = zzMarkedPos-1; yybegin(BACKTICKS); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {MLCBegin} { start = zzMarkedPos-2; yybegin(MLC); } + {LineCommentBegin} { start = zzMarkedPos-1; yybegin(EOL_COMMENT); } + + /* Separators. */ + {Separator} { addToken(Token.SEPARATOR); } + {Separator2} { addToken(Token.IDENTIFIER); } + + /* Numbers */ + {IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as identifiers. */ + . { addToken(Token.IDENTIFIER); } + +} + + + { + [^\n\\\$\"]+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; } +} + + + { + [^\n\\\$\']+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_CHAR); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \' { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; } +} + + + { + [^\n\\\$\`]+ {} + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + return firstToken; + } + {Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } + {VariableStart} {} + \` { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); } + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } +} + + + { + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } +} + + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java new file mode 100755 index 000000000..9e741c8c4 --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/NSISTokenMaker.java @@ -0,0 +1,2976 @@ +/* The following code was generated by JFlex 1.4.1 on 10/2/15 11:34 PM */ + +/* + * 07/14/2014 + * + * NSISTokenMaker.java - Scanner for NSIS installer scripts. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for NSIS installer scripts.

                        + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                          + *
                        • The generated NSISTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • + *
                        + * + * @author Robert Futrell + * @version 1.0 + * + */ + +public class NSISTokenMaker extends AbstractJFlexCTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 5; + public static final int STRING = 1; + public static final int CHAR_LITERAL = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 4; + public static final int BACKTICKS = 3; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\16\1\15\1\0\1\16\1\75\22\0\1\16\1\42\1\10"+ + "\1\11\1\13\1\41\1\44\1\51\2\31\1\17\1\33\1\52\1\34"+ + "\1\32\1\14\1\4\1\72\1\73\1\74\1\74\1\6\1\6\1\6"+ + "\1\3\1\3\1\45\1\20\1\35\1\36\1\40\1\43\1\50\1\26"+ + "\1\5\1\60\1\62\1\24\1\25\1\63\1\53\1\55\1\1\1\66"+ + "\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30\1\22\1\7"+ + "\1\70\1\56\1\21\1\67\1\65\1\31\1\12\1\31\1\37\1\2"+ + "\1\76\1\26\1\5\1\60\1\62\1\24\1\77\1\63\1\100\1\55"+ + "\1\1\1\66\1\27\1\64\1\57\1\61\1\54\1\71\1\23\1\30"+ + "\1\22\1\7\1\70\1\101\1\21\1\67\1\65\1\46\1\37\1\47"+ + "\1\43\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\6\0\2\1\2\2\2\1\1\3\1\4\1\1\1\5"+ + "\1\6\1\7\1\5\2\1\1\10\2\1\1\10\2\1"+ + "\1\11\7\5\1\12\3\1\1\10\11\1\1\13\1\14"+ + "\1\15\1\16\1\14\1\17\1\14\1\20\1\21\1\22"+ + "\1\14\1\23\1\14\1\24\1\25\1\14\1\26\10\14"+ + "\1\27\6\14\1\0\1\30\1\31\1\30\6\1\2\10"+ + "\5\1\1\0\10\1\1\32\17\1\2\10\23\1\14\0"+ + "\45\1\1\33\1\34\1\0\1\35\1\0\1\36\4\14"+ + "\4\0\4\14\5\0\1\31\17\1\1\0\11\1\1\0"+ + "\33\1\1\10\12\1\1\10\13\1\10\0\1\37\2\0"+ + "\1\37\3\0\7\1\1\40\26\1\1\10\16\1\1\10"+ + "\20\1\4\0\4\14\4\0\4\14\5\0\14\1\1\0"+ + "\6\1\1\41\1\1\1\42\11\1\1\40\4\1\1\40"+ + "\1\1\1\10\34\1\1\10\5\1\16\0\1\10\30\1"+ + "\1\40\43\1\2\0\1\34\2\0\1\35\3\14\1\43"+ + "\2\0\3\14\1\44\3\0\11\1\1\0\101\1\14\0"+ + "\61\1\1\10\11\1\4\0\1\14\2\0\1\14\3\0"+ + "\10\1\1\0\41\1\1\40\22\1\1\10\1\1\7\0"+ + "\1\37\3\1\1\40\25\1\1\40\32\1\4\0\12\1"+ + "\1\0\30\1\1\10\20\1\1\37\6\1\5\0\55\1"+ + "\4\0\7\1\1\0\11\1\1\37\1\1\1\40\42\1"+ + "\3\0\2\1\1\40\45\1\2\0\44\1\3\0\60\1"+ + "\1\40\13\1\1\37\4\1\3\0\2\1\1\40\45\1"+ + "\1\40\6\1\1\0\10\1\1\40\147\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[1321]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\102\0\204\0\306\0\u0108\0\u014a\0\u018c\0\u01ce"+ + "\0\u0210\0\u0252\0\u0294\0\u02d6\0\u018c\0\u018c\0\u0318\0\u035a"+ + "\0\u018c\0\u039c\0\u03de\0\u0420\0\u0462\0\u04a4\0\u04e6\0\u0528"+ + "\0\u056a\0\u05ac\0\u05ee\0\u018c\0\u0630\0\u0672\0\u06b4\0\u06f6"+ + "\0\u0738\0\u018c\0\u077a\0\u018c\0\u07bc\0\u07fe\0\u0840\0\u0882"+ + "\0\u08c4\0\u0906\0\u0948\0\u098a\0\u09cc\0\u0a0e\0\u0a50\0\u0a92"+ + "\0\u0ad4\0\u018c\0\u0b16\0\u018c\0\u0b58\0\u0b9a\0\u018c\0\u0bdc"+ + "\0\u0b58\0\u018c\0\u018c\0\u0c1e\0\u0b58\0\u0c60\0\u018c\0\u018c"+ + "\0\u0ca2\0\u018c\0\u0ce4\0\u0d26\0\u0d68\0\u0daa\0\u0dec\0\u0e2e"+ + "\0\u0e70\0\u0eb2\0\u018c\0\u0ef4\0\u0f36\0\u0f78\0\u0fba\0\u0ffc"+ + "\0\u103e\0\u1080\0\u10c2\0\u1104\0\u1146\0\u1188\0\u11ca\0\u120c"+ + "\0\u124e\0\u1290\0\u12d2\0\u01ce\0\u018c\0\u1314\0\u1356\0\u1398"+ + "\0\u13da\0\u141c\0\u145e\0\u14a0\0\u14e2\0\u1524\0\u1566\0\u15a8"+ + "\0\u15ea\0\u162c\0\u166e\0\u16b0\0\u16f2\0\u1734\0\u1776\0\u17b8"+ + "\0\u17fa\0\u183c\0\u187e\0\u18c0\0\u1902\0\u1944\0\u1986\0\u19c8"+ + "\0\u1a0a\0\u1a4c\0\u1a8e\0\u1ad0\0\u1b12\0\u1b54\0\u1b96\0\u1bd8"+ + "\0\u1c1a\0\u1c5c\0\u1c9e\0\u1ce0\0\u1d22\0\u1d64\0\u1da6\0\u1de8"+ + "\0\u1e2a\0\u1e6c\0\u1eae\0\u1ef0\0\u1f32\0\u1f74\0\u1fb6\0\u1ff8"+ + "\0\u03de\0\u203a\0\u207c\0\u20be\0\u2100\0\u2142\0\u2184\0\u21c6"+ + "\0\u2208\0\u224a\0\u228c\0\u22ce\0\u2310\0\u2352\0\u2394\0\u23d6"+ + "\0\u2418\0\u245a\0\u249c\0\u24de\0\u2520\0\u2562\0\u25a4\0\u25e6"+ + "\0\u2628\0\u266a\0\u26ac\0\u26ee\0\u2730\0\u2772\0\u27b4\0\u27f6"+ + "\0\u2838\0\u287a\0\u28bc\0\u28fe\0\u2940\0\u2982\0\u29c4\0\u2a06"+ + "\0\u2a48\0\u2a8a\0\u2acc\0\u2b0e\0\u2b50\0\u2b92\0\u2bd4\0\u2c16"+ + "\0\u2c58\0\u018c\0\u2c9a\0\u2cdc\0\u2d1e\0\u2d60\0\u018c\0\u2da2"+ + "\0\u2de4\0\u2e26\0\u2e68\0\u2eaa\0\u2eec\0\u2f2e\0\u2f70\0\u2fb2"+ + "\0\u2ff4\0\u3036\0\u3078\0\u30ba\0\u30fc\0\u313e\0\u3180\0\u31c2"+ + "\0\u1146\0\u3204\0\u3246\0\u3288\0\u32ca\0\u330c\0\u334e\0\u3390"+ + "\0\u33d2\0\u3414\0\u1ad0\0\u3456\0\u3498\0\u34da\0\u351c\0\u355e"+ + "\0\u35a0\0\u35e2\0\u3624\0\u3666\0\u36a8\0\u36ea\0\u372c\0\u376e"+ + "\0\u37b0\0\u37f2\0\u3834\0\u3876\0\u38b8\0\u38fa\0\u393c\0\u397e"+ + "\0\u39c0\0\u3a02\0\u3a44\0\u3a86\0\u3ac8\0\u3b0a\0\u3b4c\0\u3b8e"+ + "\0\u3bd0\0\u3c12\0\u3c54\0\u3c96\0\u3cd8\0\u3d1a\0\u3d5c\0\u3d9e"+ + "\0\u3de0\0\u3e22\0\u3e64\0\u3ea6\0\u3ee8\0\u3f2a\0\u3f6c\0\u3fae"+ + "\0\u3ff0\0\u4032\0\u4074\0\u40b6\0\u40f8\0\u413a\0\u417c\0\u41be"+ + "\0\u4200\0\u4242\0\u4284\0\u42c6\0\u4308\0\u434a\0\u438c\0\u43ce"+ + "\0\u4410\0\u4452\0\u4494\0\u44d6\0\u4518\0\u455a\0\u459c\0\u45de"+ + "\0\u4620\0\u4662\0\u46a4\0\u46e6\0\u4728\0\u476a\0\u47ac\0\u47ee"+ + "\0\u018c\0\u4830\0\u4872\0\u48b4\0\u48f6\0\u4938\0\u497a\0\u49bc"+ + "\0\u49fe\0\u4a40\0\u4a82\0\u01ce\0\u4ac4\0\u4b06\0\u4b48\0\u4b8a"+ + "\0\u4bcc\0\u4c0e\0\u4c50\0\u4c92\0\u4cd4\0\u4d16\0\u4d58\0\u4d9a"+ + "\0\u4ddc\0\u4e1e\0\u4e60\0\u4ea2\0\u4ee4\0\u4f26\0\u4f68\0\u4faa"+ + "\0\u4fec\0\u502e\0\u5070\0\u50b2\0\u50f4\0\u5136\0\u5178\0\u51ba"+ + "\0\u51fc\0\u523e\0\u5280\0\u52c2\0\u5304\0\u5346\0\u5388\0\u53ca"+ + "\0\u540c\0\u544e\0\u5490\0\u54d2\0\u5514\0\u5556\0\u5598\0\u55da"+ + "\0\u561c\0\u565e\0\u56a0\0\u56e2\0\u5724\0\u5766\0\u57a8\0\u57ea"+ + "\0\u582c\0\u586e\0\u58b0\0\u58f2\0\u5934\0\u5976\0\u59b8\0\u59fa"+ + "\0\u5a3c\0\u5a7e\0\u5ac0\0\u5b02\0\u5b44\0\u5b86\0\u5bc8\0\u5c0a"+ + "\0\u5c4c\0\u5c8e\0\u5cd0\0\u5d12\0\u5d54\0\u5d96\0\u5dd8\0\u5e1a"+ + "\0\u5e5c\0\u5e9e\0\u5ee0\0\u5f22\0\u5f64\0\u5fa6\0\u5fe8\0\u602a"+ + "\0\u606c\0\u60ae\0\u60f0\0\u6132\0\u6174\0\u61b6\0\u61f8\0\u544e"+ + "\0\u623a\0\u627c\0\u018c\0\u62be\0\u01ce\0\u6300\0\u6342\0\u6384"+ + "\0\u63c6\0\u6408\0\u644a\0\u648c\0\u64ce\0\u6510\0\u6552\0\u6594"+ + "\0\u65d6\0\u6618\0\u665a\0\u669c\0\u66de\0\u6720\0\u6762\0\u67a4"+ + "\0\u67e6\0\u6828\0\u686a\0\u68ac\0\u68ee\0\u6930\0\u6972\0\u69b4"+ + "\0\u69f6\0\u6a38\0\u6a7a\0\u6abc\0\u6afe\0\u6b40\0\u6b82\0\u6bc4"+ + "\0\u6c06\0\u6c48\0\u6c8a\0\u6ccc\0\u6d0e\0\u6d50\0\u6d92\0\u6dd4"+ + "\0\u6e16\0\u6e58\0\u6e9a\0\u6edc\0\u6f1e\0\u6f60\0\u6fa2\0\u6fe4"+ + "\0\u7026\0\u7068\0\u70aa\0\u70ec\0\u712e\0\u7170\0\u71b2\0\u71f4"+ + "\0\u7236\0\u7278\0\u72ba\0\u72fc\0\u733e\0\u7380\0\u24de\0\u73c2"+ + "\0\u7404\0\u7446\0\u7488\0\u74ca\0\u750c\0\u754e\0\u7590\0\u75d2"+ + "\0\u7614\0\u7656\0\u7698\0\u76da\0\u771c\0\u775e\0\u77a0\0\u77e2"+ + "\0\u7824\0\u7866\0\u78a8\0\u78ea\0\u792c\0\u796e\0\u79b0\0\u79f2"+ + "\0\u7a34\0\u7a76\0\u7ab8\0\u7afa\0\u7b3c\0\u7b7e\0\u7bc0\0\u7c02"+ + "\0\u7c44\0\u7c86\0\u7cc8\0\u7d0a\0\u7d4c\0\u7d8e\0\u7dd0\0\u7e12"+ + "\0\u7e54\0\u7e96\0\u7ed8\0\u7f1a\0\u7f5c\0\u7f9e\0\u7fe0\0\u8022"+ + "\0\u8064\0\u80a6\0\u80e8\0\u812a\0\u816c\0\u81ae\0\u81f0\0\u8232"+ + "\0\u8274\0\u82b6\0\u82f8\0\u833a\0\u837c\0\u018c\0\u83be\0\u8400"+ + "\0\u018c\0\u8442\0\u8484\0\u84c6\0\u8508\0\u854a\0\u858c\0\u85ce"+ + "\0\u8610\0\u8652\0\u8694\0\u86d6\0\u8718\0\u875a\0\u879c\0\u87de"+ + "\0\u8820\0\u8862\0\u88a4\0\u88e6\0\u8928\0\u896a\0\u89ac\0\u89ee"+ + "\0\u8a30\0\u8a72\0\u8ab4\0\u8af6\0\u8b38\0\u8b7a\0\u8bbc\0\u8bfe"+ + "\0\u8c40\0\u8c82\0\u8cc4\0\u8d06\0\u8d48\0\u8d8a\0\u8dcc\0\u8e0e"+ + "\0\u8e50\0\u8e92\0\u8ed4\0\u8f16\0\u8f58\0\u8f9a\0\u8fdc\0\u901e"+ + "\0\u9060\0\u90a2\0\u90e4\0\u9126\0\u9168\0\u91aa\0\u91ec\0\u922e"+ + "\0\u9270\0\u92b2\0\u92f4\0\u9336\0\u9378\0\u93ba\0\u93fc\0\u943e"+ + "\0\u9480\0\u94c2\0\u9504\0\u9546\0\u9588\0\u95ca\0\u960c\0\u964e"+ + "\0\u9690\0\u96d2\0\u9714\0\u9756\0\u9798\0\u97da\0\u981c\0\u985e"+ + "\0\u98a0\0\u98e2\0\u9924\0\u9966\0\u99a8\0\u99ea\0\u9a2c\0\u9a6e"+ + "\0\u9ab0\0\u9af2\0\u9b34\0\u9b76\0\u9bb8\0\u9bfa\0\u9c3c\0\u9c7e"+ + "\0\u9cc0\0\u9d02\0\u9d44\0\u9d86\0\u9dc8\0\u9e0a\0\u9e4c\0\u9e8e"+ + "\0\u9ed0\0\u9f12\0\u9f54\0\u9f96\0\u9fd8\0\ua01a\0\ua05c\0\ua09e"+ + "\0\ua0e0\0\ua122\0\ua164\0\ua1a6\0\ua1e8\0\ua22a\0\ua26c\0\ua2ae"+ + "\0\ua2f0\0\ua332\0\ua374\0\ua3b6\0\ua3f8\0\ua43a\0\ua47c\0\ua4be"+ + "\0\ua500\0\ua542\0\ua584\0\ua5c6\0\ua608\0\ua64a\0\ua68c\0\ua6ce"+ + "\0\ua710\0\ua752\0\ua794\0\ua7d6\0\ua818\0\ua85a\0\ua89c\0\ua8de"+ + "\0\ua920\0\ua962\0\ua9a4\0\ua9e6\0\uaa28\0\uaa6a\0\uaaac\0\uaaee"+ + "\0\uab30\0\uab72\0\uabb4\0\uabf6\0\uac38\0\uac7a\0\uacbc\0\uacfe"+ + "\0\uad40\0\uad82\0\uadc4\0\uae06\0\uae48\0\u8508\0\uae8a\0\uaecc"+ + "\0\u8694\0\uaf0e\0\uaf50\0\uaf92\0\uafd4\0\ub016\0\ub058\0\ub09a"+ + "\0\ub0dc\0\ub11e\0\ub160\0\ub1a2\0\ub1e4\0\ub226\0\ub268\0\ub2aa"+ + "\0\ub2ec\0\ub32e\0\ub370\0\ub3b2\0\ub3f4\0\ub436\0\ub478\0\ub4ba"+ + "\0\ub4fc\0\ub53e\0\ub580\0\ub5c2\0\ub604\0\ub646\0\ub688\0\ub6ca"+ + "\0\ub70c\0\ub74e\0\ub790\0\ub7d2\0\ub814\0\ub856\0\ub898\0\ub8da"+ + "\0\ub91c\0\ub95e\0\ub9a0\0\ub9e2\0\uba24\0\uba66\0\ubaa8\0\ubaea"+ + "\0\ubb2c\0\ubb6e\0\ubbb0\0\ubbf2\0\ubc34\0\ubc76\0\ubcb8\0\ubcfa"+ + "\0\ubd3c\0\ubd7e\0\ubdc0\0\ube02\0\ube44\0\ube86\0\ubec8\0\ubf0a"+ + "\0\ubf4c\0\ubf8e\0\ubfd0\0\uc012\0\uc054\0\uc096\0\uc0d8\0\uc11a"+ + "\0\uc15c\0\uc19e\0\uc1e0\0\uc222\0\uc264\0\uc2a6\0\uc2e8\0\uc32a"+ + "\0\uc36c\0\uc3ae\0\uc3f0\0\uc432\0\uc474\0\uc4b6\0\uc4f8\0\uc53a"+ + "\0\uc57c\0\uc5be\0\uc600\0\uc642\0\uc684\0\uc6c6\0\uc708\0\uc74a"+ + "\0\uc78c\0\uc7ce\0\uc810\0\uc852\0\uc894\0\uc8d6\0\uc918\0\uc95a"+ + "\0\uc99c\0\uc9de\0\uca20\0\uca62\0\ucaa4\0\ucae6\0\ucb28\0\ucb6a"+ + "\0\ucbac\0\ucbee\0\ucc30\0\ucc72\0\uccb4\0\uccf6\0\ucd38\0\ucd7a"+ + "\0\ucdbc\0\ucdfe\0\uce40\0\uce82\0\ucec4\0\ucf06\0\ucf48\0\ucf8a"+ + "\0\ucfcc\0\ud00e\0\ud050\0\ud092\0\ud0d4\0\ud116\0\ud158\0\ud19a"+ + "\0\ud1dc\0\ud21e\0\ud260\0\ud2a2\0\ud2e4\0\u5070\0\ud326\0\ud368"+ + "\0\ud3aa\0\ud3ec\0\ud42e\0\ud470\0\ud4b2\0\ud4f4\0\ud536\0\ud578"+ + "\0\ud5ba\0\ud5fc\0\ud63e\0\ud680\0\ud6c2\0\ud704\0\ud746\0\ud788"+ + "\0\ud7ca\0\ud80c\0\ud84e\0\ud890\0\ud8d2\0\ud914\0\ud956\0\ud998"+ + "\0\ud9da\0\uda1c\0\uda5e\0\udaa0\0\udae2\0\udb24\0\udb66\0\udba8"+ + "\0\udbea\0\udc2c\0\udc6e\0\udcb0\0\udcf2\0\udd34\0\udd76\0\uddb8"+ + "\0\uddfa\0\ude3c\0\ude7e\0\udec0\0\udf02\0\udf44\0\udf86\0\udfc8"+ + "\0\ue00a\0\ue04c\0\ue08e\0\uba66\0\ue0d0\0\ue112\0\ue154\0\ue196"+ + "\0\ue1d8\0\ue21a\0\ue25c\0\ue29e\0\ue2e0\0\ue322\0\ue364\0\ue3a6"+ + "\0\ue3e8\0\ue42a\0\ue46c\0\ue4ae\0\ue4f0\0\ue532\0\ue574\0\ue5b6"+ + "\0\ue5f8\0\ue63a\0\ue67c\0\ue6be\0\ue700\0\ue742\0\ue784\0\ue7c6"+ + "\0\ue808\0\ue84a\0\ue88c\0\ue8ce\0\ue910\0\ue952\0\ue994\0\ue9d6"+ + "\0\uea18\0\uea5a\0\uea9c\0\ueade\0\ueb20\0\ueb62\0\ueba4\0\uebe6"+ + "\0\uec28\0\uec6a\0\uecac\0\uecee\0\ued30\0\ued72\0\uedb4\0\uedf6"+ + "\0\uee38\0\uee7a\0\ueebc\0\ueefe\0\uef40\0\uef82\0\uefc4\0\uf006"+ + "\0\uf048\0\uf08a\0\uf0cc\0\uf10e\0\uf150\0\uf192\0\uf1d4\0\uf216"+ + "\0\uf258\0\uf29a\0\uf2dc\0\uf31e\0\uf360\0\uf3a2\0\uf3e4\0\uf426"+ + "\0\uf468\0\uf4aa\0\uf4ec\0\uf52e\0\uf570\0\uf5b2\0\uf5f4\0\uf636"+ + "\0\uf678\0\uf6ba\0\uf6fc\0\uf73e\0\uf780\0\uf7c2\0\uf804\0\uf846"+ + "\0\uf888\0\uf8ca\0\uf90c\0\uf94e\0\uf990\0\uf9d2\0\ufa14\0\ufa56"+ + "\0\ufa98\0\ufada\0\ufb1c\0\ufb5e\0\ufba0\0\ufbe2\0\ufc24\0\ufc66"+ + "\0\ufca8\0\ufcea\0\ufd2c\0\ufd6e\0\ufdb0\0\ufdf2\0\ufe34\0\ufe76"+ + "\0\ufeb8\0\ufefa\0\uff3c\0\uff7e\0\uffc0\1\2\1\104\1\206"+ + "\1\310\1\u010a\1\u014c\1\u018e\1\u01d0\1\u0212\0\uaaac\1\u0254"+ + "\1\u0296\1\u02d8\1\u031a\1\u035c\1\u039e\1\u03e0\1\u0422\1\u0464"+ + "\1\u04a6\1\u04e8\1\u052a\1\u056c\1\u05ae\1\u05f0\1\u0632\1\u0674"+ + "\1\u06b6\1\u06f8\1\u073a\1\u077c\1\u07be\1\u0800\1\u0842\1\u0884"+ + "\1\u08c6\1\u0908\1\u094a\1\u098c\1\u09ce\1\u0a10\1\u0a52\1\u0a94"+ + "\1\u0ad6\1\u0b18\1\u0b5a\1\u0b9c\1\u0bde\1\u0c20\1\u0c62\1\u0ca4"+ + "\1\u0ce6\1\u0d28\1\u0d6a\1\u0dac\1\u0dee\1\u0e30\1\u0e72\1\u0eb4"+ + "\1\u0ef6\1\u0f38\1\u0f7a\1\u0fbc\1\u0ffe\1\u1040\1\u1082\1\u10c4"+ + "\1\u1106\1\u1148\1\u118a\1\u11cc\1\u120e\1\u1250\1\u1292\1\u12d4"+ + "\1\u1316\1\u1358\1\u139a\1\u13dc\1\u141e\1\u1460\1\u14a2\1\u14e4"+ + "\1\u1526\1\u1568\1\u15aa\1\u15ec\1\u162e\1\u1670\1\u16b2\1\u16f4"+ + "\1\u1736\1\u1778\1\u17ba\1\u17fc\1\u183e\1\u1880\1\u18c2\1\u1904"+ + "\1\u1946\1\u1988\1\u19ca\1\u1a0c\1\u1a4e\1\u1a90\1\u1ad2\1\u1b14"+ + "\1\u1b56\1\u1b98\1\u1bda\1\u1c1c\1\u1c5e\1\u1ca0\1\u1ce2\1\u1d24"+ + "\1\u1d66\1\u1da8\1\u1dea\1\u1e2c\1\u1e6e\1\u1eb0\1\u1ef2\1\u1f34"+ + "\1\u1f76\0\u01ce\1\u1fb8\1\u1ffa\1\u203c\1\u207e\1\u20c0\1\u2102"+ + "\1\u2144\1\u2186\1\u21c8\1\u220a\1\u224c\1\u228e\1\u22d0\1\u2312"+ + "\1\u2354\1\u2396\1\u23d8\1\u241a\1\u245c\1\u249e\1\u24e0\1\u2522"+ + "\1\u2564\1\u25a6\1\u25e8\1\u262a\1\u266c\1\u26ae\1\u26f0\1\u2732"+ + "\1\u2774\1\u27b6\1\u27f8\1\u283a\1\u287c\1\u28be\1\u2900\1\u2942"+ + "\1\u2984\1\u29c6\1\u2a08\1\u2a4a\1\u2a8c\1\u2ace\1\u2b10\1\u2b52"+ + "\1\u2b94\0\uf52e\1\u2bd6\1\u2c18\1\u2c5a\1\u2c9c\1\u2cde\1\u2d20"+ + "\1\u2d62\1\u2da4\1\u2de6\1\u2e28\1\u2e6a\1\u2eac\1\u2eee\1\u2f30"+ + "\1\u2f72\1\u2fb4\1\u2ff6\1\u3038\1\u307a\1\u30bc\1\u30fe\1\u3140"+ + "\1\u3182\1\u31c4\1\u3206\1\u3248\1\u328a\1\u32cc\1\u330e\1\u3350"+ + "\1\u3392\1\u33d4\1\u3416\1\u3458\1\u349a\1\u34dc\1\u351e\1\u3560"+ + "\1\u35a2\1\u35e4\1\u3626\1\u3668\1\u36aa\1\u36ec\1\u372e\1\u3770"+ + "\1\u37b2\1\u37f4\1\u3836\1\u3878\1\u38ba\1\u38fc\1\u393e\1\u3980"+ + "\1\u39c2\1\u3a04\1\u3a46\1\u3a88\1\u3aca\1\u3b0c\1\u3b4e\1\u3b90"+ + "\1\u3bd2\1\u3c14\1\u3c56\1\u3c98\1\u3cda\1\u3d1c\1\u3d5e\1\u3da0"+ + "\1\u3de2\1\u3e24\1\u3e66\1\u3ea8\1\u3eea\1\u3f2c\1\u3f6e\1\u3fb0"+ + "\1\u3ff2\1\u4034\1\u4076\1\u40b8\1\u40fa\1\u413c\1\u417e\1\u41c0"+ + "\1\u4202\1\u4244\1\u4286\1\u42c8\1\u430a\1\u434c\1\u438e\1\u43d0"+ + "\1\u4412\1\u4454\1\u4496\1\u44d8\1\u451a\1\u455c\1\u459e\1\u45e0"+ + "\1\u4622\1\u4664\1\u46a6\1\u46e8\1\u472a\1\u476c\1\u47ae\1\u47f0"+ + "\1\u4832\1\u4874\1\u48b6\1\u48f8\1\u493a\1\u497c\1\u49be\1\u4a00"+ + "\1\u4a42"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[1321]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\7\2\10\1\11\1\12\1\13\1\11\1\14\1\15"+ + "\1\16\1\7\1\17\1\20\1\21\1\22\1\23\1\16"+ + "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\7\1\35\1\36\1\37\2\23\1\40\1\23"+ + "\1\41\1\42\1\43\1\42\2\34\1\7\1\44\1\7"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\57\2\10\1\60\1\61\3\11\1\7"+ + "\1\62\1\30\1\45\1\50\10\63\1\64\1\63\1\65"+ + "\1\66\1\63\1\67\64\63\12\70\1\71\1\66\1\70"+ + "\1\72\33\70\1\73\30\70\12\74\1\75\1\76\1\74"+ + "\1\77\60\74\1\100\3\74\15\101\1\102\1\101\1\103"+ + "\5\101\1\104\25\101\1\105\2\101\1\106\20\101\1\107"+ + "\1\110\1\111\15\112\1\113\7\112\1\114\25\112\1\115"+ + "\2\112\1\116\20\112\1\117\1\120\1\121\103\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\3\123\2\11\1\123\1\11\1\123\1\0\3\123"+ + "\5\0\10\123\17\0\1\123\2\0\17\123\3\11\1\0"+ + "\10\123\1\124\1\123\1\124\1\123\1\0\3\123\5\0"+ + "\1\125\7\123\17\0\1\123\2\0\17\123\3\124\1\0"+ + "\4\123\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\126\5\10\22\0\6\10\1\127\1\10\1\130\1\10"+ + "\1\131\7\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\132\22\0\4\10\1\133\15\10"+ + "\2\0\3\10\1\0\2\10\2\134\1\10\1\134\1\10"+ + "\2\0\1\122\1\134\1\10\1\135\3\0\1\10\1\136"+ + "\1\137\1\140\2\10\1\141\1\142\15\0\1\143\4\0"+ + "\1\144\1\145\1\146\1\147\1\10\1\150\1\151\1\152"+ + "\6\10\1\153\3\134\1\135\1\0\1\10\1\144\1\147"+ + "\1\0\7\10\2\0\1\122\2\10\2\0\1\154\1\0"+ + "\10\10\5\0\1\42\14\0\22\10\2\0\3\10\16\0"+ + "\1\22\121\0\1\42\44\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\155\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\156"+ + "\1\157\4\10\22\0\6\10\1\160\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\161"+ + "\1\10\1\162\2\10\22\0\2\10\1\163\3\10\1\134"+ + "\2\10\1\164\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\165\7\10\22\0\4\10\1\166"+ + "\15\10\2\0\3\10\1\0\2\10\1\134\2\10\1\134"+ + "\1\167\2\0\1\122\2\10\4\0\5\10\1\170\1\171"+ + "\1\10\22\0\2\10\1\172\3\10\1\173\10\10\1\174"+ + "\1\175\1\134\2\0\3\10\1\0\4\10\1\176\1\10"+ + "\1\177\2\0\1\122\2\10\4\0\2\10\1\200\3\10"+ + "\1\201\1\10\22\0\7\10\1\202\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\203"+ + "\1\10\1\204\2\10\22\0\2\10\1\205\3\10\1\206"+ + "\13\10\2\0\3\10\1\0\6\10\1\207\2\0\1\122"+ + "\2\10\4\0\1\10\1\210\1\10\1\211\2\10\1\212"+ + "\1\10\22\0\1\213\1\214\1\215\1\216\5\10\1\217"+ + "\2\10\1\220\5\10\2\0\1\10\1\213\1\216\33\0"+ + "\1\42\2\0\1\42\77\0\1\42\1\0\1\42\100\0"+ + "\1\221\1\42\101\0\1\42\1\0\1\23\50\0\1\222"+ + "\14\0\1\223\1\0\1\224\1\0\1\225\5\0\1\42"+ + "\15\0\1\226\1\227\1\230\1\0\1\231\1\0\1\232"+ + "\1\0\1\233\3\0\1\234\10\0\1\230\36\0\1\42"+ + "\5\0\1\42\36\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\235\10\10\1\236\6\10\2\0"+ + "\3\10\1\0\6\10\1\237\2\0\1\122\2\10\4\0"+ + "\5\10\1\240\1\241\1\10\22\0\6\10\1\242\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\243\2\10\1\244\22\0\4\10\1\245\1\246"+ + "\1\10\1\247\12\10\2\0\1\243\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\250\5\10\22\0"+ + "\2\10\1\251\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\252\1\10\1\253\2\10"+ + "\22\0\6\10\1\254\13\10\2\0\3\10\1\0\6\10"+ + "\1\255\2\0\1\122\2\10\4\0\2\10\1\256\1\257"+ + "\1\10\1\260\1\261\1\10\22\0\1\262\5\10\1\263"+ + "\13\10\2\0\1\10\1\262\1\10\1\0\6\10\1\264"+ + "\2\0\1\122\2\10\4\0\4\10\1\265\3\10\22\0"+ + "\4\10\1\134\15\10\2\0\1\265\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\266\4\10\22\0"+ + "\2\10\1\267\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\270\4\10\22\0\6\10"+ + "\1\271\13\10\2\0\3\10\1\0\4\10\1\272\2\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\273\1\10\1\274"+ + "\2\10\22\0\2\10\1\275\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\276\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\277\2\10\22\0\2\10\1\300"+ + "\17\10\2\0\3\10\1\0\6\10\1\301\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\10\63"+ + "\1\0\1\63\2\0\1\63\1\0\64\63\15\302\1\0"+ + "\64\302\1\0\2\303\2\0\1\303\1\0\1\303\3\0"+ + "\2\303\4\0\10\303\15\0\1\304\4\0\17\303\5\0"+ + "\3\303\12\70\2\0\1\70\1\0\33\70\1\0\30\70"+ + "\12\74\2\0\1\74\1\0\60\74\1\0\3\74\1\0"+ + "\2\305\2\0\1\305\1\0\1\305\3\0\2\305\4\0"+ + "\10\305\15\0\1\306\4\0\17\305\5\0\3\305\15\101"+ + "\1\0\1\101\1\0\57\101\17\0\1\307\65\0\15\101"+ + "\1\0\1\101\1\0\2\101\1\310\32\101\1\311\21\101"+ + "\3\0\15\101\1\0\1\101\1\0\2\101\1\312\54\101"+ + "\3\0\15\101\1\0\1\101\1\0\36\101\1\313\20\101"+ + "\2\0\1\314\22\0\1\315\32\0\1\316\46\0\1\317"+ + "\135\0\1\314\22\0\1\314\15\112\1\0\61\112\3\0"+ + "\15\112\1\0\4\112\1\320\32\112\1\321\21\112\3\0"+ + "\15\112\1\0\4\112\1\322\54\112\3\0\15\112\1\0"+ + "\40\112\1\323\20\112\2\0\1\324\22\0\1\325\32\0"+ + "\1\326\46\0\1\327\135\0\1\324\22\0\1\324\7\0"+ + "\1\330\72\0\10\123\1\0\3\123\5\0\10\123\17\0"+ + "\1\123\2\0\22\123\1\0\10\123\1\124\1\123\1\124"+ + "\1\123\1\0\3\123\5\0\10\123\17\0\1\123\2\0"+ + "\17\123\3\124\1\0\7\123\4\331\1\123\1\0\3\123"+ + "\5\0\3\123\3\331\2\123\17\0\1\123\2\0\5\123"+ + "\1\331\1\123\1\331\7\123\3\331\1\0\1\123\1\331"+ + "\2\123\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\332\2\10\22\0\2\10\1\333\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\334"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\335\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\336\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\337\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\340\5\10\22\0\2\10\1\341"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\342\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\3\10\1\343\3\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\344\7\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\345\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\346\6\10\22\0"+ + "\11\10\1\347\2\10\1\350\5\10\2\0\3\10\1\0"+ + "\2\351\2\0\1\351\1\0\1\351\3\0\2\351\4\0"+ + "\10\351\22\0\17\351\5\0\3\351\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\352\16\10"+ + "\2\0\2\10\1\352\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\353\3\10\1\354\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\355\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\356\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\357\10\10\2\0"+ + "\3\10\1\0\6\10\1\360\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\361\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\362\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\17\0\1\363"+ + "\63\0\7\10\2\0\1\122\2\10\4\0\7\10\1\364"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\365\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\134\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\366\7\10\22\0\11\10\1\367\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\134\20\10\2\0\3\10\1\0\4\10\1\370"+ + "\2\10\2\0\1\122\2\10\4\0\1\10\1\371\3\10"+ + "\1\372\1\10\1\373\22\0\4\10\1\374\3\10\1\375"+ + "\5\10\1\376\3\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\377\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u0100\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u0101\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\134\1\10\1\u0102\4\10\22\0"+ + "\1\10\1\u0103\3\10\1\u0104\14\10\2\0\3\10\1\0"+ + "\6\10\1\u0105\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\134\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u0106\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0107\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u0108\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0109\1\10\22\0\4\10\1\u010a\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u010b\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\2\10\2\134\1\10\1\134\1\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\17\10\3\134\2\0\3\10\1\0"+ + "\3\10\1\134\3\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\17\10\3\134\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u010c\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u010d\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u010e\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\134\4\10\1\u010f\1\10\22\0"+ + "\3\10\1\u0110\16\10\2\0\2\10\1\u0110\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0111"+ + "\1\10\1\u0112\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0113\3\10\22\0\22\10"+ + "\2\0\1\u0113\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0114\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\366"+ + "\22\0\5\10\1\u0115\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0116\2\10\22\0"+ + "\10\10\1\u0117\11\10\2\0\3\10\1\0\4\10\1\u0118"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0119\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u011a\3\10"+ + "\1\u011b\2\10\22\0\4\10\1\u011c\1\u011d\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u011e\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\203"+ + "\2\10\1\u011f\1\u0120\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0121\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0122\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\1\10\1\u0123\5\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0124\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0125\22\0\22\10\2\0\3\10\57\0\1\u0126"+ + "\45\0\1\u0127\3\0\1\u0128\27\0\1\u0129\1\u012a\103\0"+ + "\1\u012b\106\0\1\u012c\40\0\1\u012d\100\0\1\u012e\31\0"+ + "\1\u012f\17\0\1\u012e\30\0\1\u0130\135\0\1\u0131\43\0"+ + "\1\u0132\103\0\1\u0133\77\0\1\u0134\56\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u0135\1\u0136"+ + "\11\10\2\0\3\10\1\0\6\10\1\134\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0137\1\10\22\0\1\10\1\u0138"+ + "\3\10\1\u0139\1\10\1\u0138\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0104\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u013a\11\10\2\0\3\10"+ + "\1\0\6\10\1\u013b\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\1\10\1\u013c\20\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u013d\1\u013e\1\u013f\1\u0140\2\10\22\0\4\10\1\u0141"+ + "\15\10\2\0\1\u013f\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\3\10\1\u0142\16\10\2\0"+ + "\2\10\1\u0142\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0143\5\10\1\u0144\22\0\2\10\1\u0145\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0146\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0147\2\10"+ + "\1\u0148\2\10\22\0\2\10\1\u0149\1\10\1\u014a\1\u014b"+ + "\1\u014c\5\10\1\u014d\5\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u014e"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u014f\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u0150\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u013a\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0151\5\10\22\0\1\10\1\u013c\2\10\1\u0152"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0153\4\10\1\u0154\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0155\4\10\22\0\5\10\1\u0156\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0157\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0158\1\10\22\0\1\10"+ + "\1\u0159\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u015a\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u015b\1\10\1\u015c\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u015d"+ + "\1\10\22\0\1\10\1\u015e\2\10\1\u015f\4\10\1\u0160"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0161\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\4\10\1\u0162"+ + "\3\10\22\0\22\10\2\0\1\u0162\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0163\4\10\1\u0164"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u0165\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0166\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0167\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\1\10\1\u0168\5\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0169\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u016a\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u016b\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u016c"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u013c\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u016d"+ + "\1\u016e\1\10\22\0\1\10\1\u016f\3\10\1\u0170\1\10"+ + "\1\u0171\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0172\17\10\2\0"+ + "\3\10\1\0\7\303\2\0\1\u0173\2\303\4\0\10\303"+ + "\22\0\22\303\2\0\3\303\1\0\2\u0174\2\0\1\u0174"+ + "\1\0\1\u0174\3\0\2\u0174\4\0\10\u0174\22\0\17\u0174"+ + "\5\0\3\u0174\1\0\7\305\2\0\1\u0175\2\305\4\0"+ + "\10\305\22\0\22\305\2\0\3\305\1\0\2\u0176\2\0"+ + "\1\u0176\1\0\1\u0176\3\0\2\u0176\4\0\10\u0176\22\0"+ + "\17\u0176\5\0\3\u0176\15\101\1\0\1\101\1\0\34\101"+ + "\1\u0177\22\101\3\0\15\101\1\0\1\101\1\0\7\101"+ + "\1\u0178\47\101\3\0\15\101\1\0\1\101\1\0\2\101"+ + "\1\u0179\54\101\3\0\15\101\1\0\1\101\1\0\36\101"+ + "\1\u017a\20\101\2\0\1\u017b\56\0\1\u017b\22\0\1\u017b"+ + "\54\0\1\u017c\54\0\1\u017d\74\0\1\u017e\57\0\15\112"+ + "\1\0\36\112\1\u017f\22\112\3\0\15\112\1\0\11\112"+ + "\1\u0180\47\112\3\0\15\112\1\0\4\112\1\u0181\54\112"+ + "\3\0\15\112\1\0\40\112\1\u0182\20\112\2\0\1\u0183"+ + "\56\0\1\u0183\22\0\1\u0183\54\0\1\u0184\54\0\1\u0185"+ + "\74\0\1\u0186\62\0\4\u0187\15\0\3\u0187\31\0\1\u0187"+ + "\1\0\1\u0187\7\0\3\u0187\2\0\1\u0187\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0188"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0189\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u018a"+ + "\6\10\22\0\1\134\21\10\2\0\1\10\1\134\1\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u018b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u018c\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\134\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u018d\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u018e\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\11\10\1\160\10\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u018f\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0190\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0191"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0192\22\0\1\10\1\u0193"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u018f\22\0\22\10\2\0\3\10\1\0"+ + "\7\351\2\0\1\u0194\2\351\4\0\10\351\16\0\1\135"+ + "\3\0\22\351\2\0\3\351\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0195\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0196\13\10\2\0\3\10\1\0\6\10"+ + "\1\u0197\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\360\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u018f"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u0198\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u018f"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0199\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u019a\17\10\2\0\3\10\14\0\1\u019b"+ + "\66\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u019c"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u019d\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u019e\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ + "\1\u019f\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u01a0\13\10\2\0"+ + "\3\10\1\0\6\10\1\u01a1\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u01a2\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u01a3\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\253\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01a4\12\10\2\0"+ + "\3\10\1\0\6\10\1\u01a5\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u01a6\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\u0113\21\10\2\0\1\10\1\u0113\1\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\277\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u01a7\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u01a8\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u013c"+ + "\21\10\2\0\1\10\1\u013c\1\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u01a9\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u01aa\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\365\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u01ab\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01ac\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01ad\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u0152\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0172\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u01ae\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u01af\21\10\2\0\1\10\1\u01af\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u01b0"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u01b1\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\4\10\1\u01b2\2\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u01b3\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u01b4"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\134\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u01b5\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u01b6\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\7\10\1\u01b7\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b8\5\10"+ + "\1\u01b9\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u01ba\22\0\5\10\1\u01bb"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u01bc\1\10\22\0\5\10\1\u01bd\14\10"+ + "\2\0\3\10\1\0\4\10\1\u01be\2\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u013d\1\u013e\1\u01bf\1\u01c0\1\10"+ + "\1\u01c1\22\0\1\10\1\u01c2\1\10\1\u01c3\1\10\1\u01c4"+ + "\1\u01c5\1\u01c6\12\10\2\0\1\u01bf\1\10\1\u01c3\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u01c7\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u01c8\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01c9\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\242\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u01ca\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\3\10\1\u01cb\16\10\2\0\2\10\1\u01cb\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u01cc"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u01cd\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u01ce"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u01cf\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01d0\6\10\22\0\22\10\2\0\3\10\62\0\1\u01d1"+ + "\42\0\1\u01d2\106\0\1\u01d3\133\0\1\u01d4\72\0\1\u01d5"+ + "\24\0\1\u01d5\63\0\1\u01d6\47\0\1\u01d7\131\0\1\u01d8"+ + "\100\0\1\u0126\2\0\1\u01d1\47\0\1\u01d9\27\0\1\u01da"+ + "\44\0\1\u01db\103\0\1\u01dc\51\0\1\u01dc\62\0\1\u01dd"+ + "\44\0\1\u01de\57\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u01df\4\10\22\0\7\10\1\u01e0\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\u01e1\21\10\2\0\1\10\1\u01e1\1\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ + "\1\134\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\134\12\10\2\0"+ + "\3\10\1\0\6\10\1\134\2\0\1\122\2\10\4\0"+ + "\2\10\1\134\5\10\22\0\5\10\1\134\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u013c\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u01e2"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u01e3\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u01e4"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u01e5\17\10"+ + "\2\0\3\10\1\0\4\10\1\176\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01e6\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u01e7\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ + "\1\u01e8\3\10\22\0\5\10\1\u01e9\1\242\13\10\2\0"+ + "\1\u01e8\2\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01ea\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u01eb\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u013c\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u01ec\4\10\22\0\22\10\2\0\3\10\1\0\4\10"+ + "\1\u01ed\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u01ee\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\134\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u01ef\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\134\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u01f0\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01f1\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u01f2\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u01f3\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u01f4\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\134"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u01f5\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u018a\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u01f6\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u01f7\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\132\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u01f8\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u01f9\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u01fa"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u01fb\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u01fc\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u01fd\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u01fe\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01ff\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\10\1\u0200"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\4\10\1\u0201\3\10\22\0\22\10\2\0\1\u0201"+ + "\2\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u0202\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0203\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0204\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u01b8"+ + "\1\10\1\u0205\3\10\1\u0206\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0207"+ + "\2\10\1\u0208\1\10\1\u0209\1\10\22\0\3\10\1\u020a"+ + "\1\10\1\u020b\1\10\1\u020c\12\10\2\0\1\u0208\1\10"+ + "\1\u020a\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u013c\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u020d\1\u020e\2\10"+ + "\1\u020f\1\10\1\u0210\22\0\2\10\1\u0211\3\10\1\u0212"+ + "\1\u0213\4\10\1\u0214\5\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0215\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u01f4\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0216"+ + "\14\10\2\0\3\10\1\0\4\10\1\134\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u0217\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0218\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0219\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u021a\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u021b\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u013c\6\10\22\0\22\10\2\0\3\10\7\0\1\u021c"+ + "\73\0\7\u0174\2\0\1\u021d\2\u0174\4\0\10\u0174\16\0"+ + "\1\u021e\3\0\22\u0174\2\0\3\u0174\7\0\1\u021f\73\0"+ + "\7\u0176\2\0\1\u0220\2\u0176\4\0\10\u0176\16\0\1\u0221"+ + "\3\0\22\u0176\2\0\3\u0176\15\101\1\0\1\101\1\0"+ + "\25\101\1\u0222\31\101\3\0\15\101\1\0\1\101\1\0"+ + "\4\101\1\u0177\52\101\3\0\15\101\1\0\1\101\1\0"+ + "\34\101\1\u0223\22\101\3\0\15\101\1\0\1\101\1\0"+ + "\12\101\1\u0224\44\101\35\0\1\u0225\114\0\1\u0226\60\0"+ + "\1\u017c\131\0\1\u0227\25\0\15\112\1\0\27\112\1\u0228"+ + "\31\112\3\0\15\112\1\0\6\112\1\u017f\52\112\3\0"+ + "\15\112\1\0\36\112\1\u0229\22\112\3\0\15\112\1\0"+ + "\14\112\1\u022a\44\112\35\0\1\u022b\114\0\1\u022c\60\0"+ + "\1\u0184\131\0\1\u022d\30\0\4\u022e\15\0\3\u022e\31\0"+ + "\1\u022e\1\0\1\u022e\7\0\3\u022e\2\0\1\u022e\3\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u022f\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0230\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0137\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0231\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\20\10\1\134\1\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\375\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0232\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u0233\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u0234"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0235\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0236"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u0237\5\10\22\0\22\10"+ + "\2\0\3\10\7\0\1\u0238\73\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u0239\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u023a\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u023b"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\13\10\1\u023c\6\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u023d\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u023e\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u023f\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0240\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0172\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0146\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0241\1\u0242\4\10"+ + "\22\0\2\10\1\u0243\3\10\1\u023f\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0244"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0245\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0246\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0247\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u0248\22\0\3\10\1\u0249\16\10"+ + "\2\0\2\10\1\u0249\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u024a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u024b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u024c\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\u024d\21\10\2\0\1\10\1\u024d\1\10"+ + "\1\0\1\10\1\u024e\5\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u024f\1\u0250\3\10\1\u0251\22\0\3\10\1\u0252"+ + "\1\10\1\u0253\1\u0254\13\10\2\0\2\10\1\u0252\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0255\3\10"+ + "\22\0\3\10\1\u0142\1\u01b8\1\u0253\14\10\2\0\1\u0255"+ + "\1\10\1\u0142\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u0256\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0257\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\3\10\1\u0258\16\10\2\0"+ + "\2\10\1\u0258\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\14\10\1\u0259\5\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u025a\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u025b\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\134\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u025c\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u025d\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u025e\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u025f\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0172\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0106\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u0260\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0146"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u0261\7\10"+ + "\1\u0262\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u025a\5\10\22\0\13\10\1\u0263"+ + "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0264\3\10\1\u0265\13\10"+ + "\2\0\3\10\1\0\6\10\1\u0266\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0267\6\10\22\0"+ + "\1\u0268\21\10\2\0\1\10\1\u0268\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u0269\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u026a\17\10\2\0\3\10"+ + "\1\0\6\10\1\u026b\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u026c\13\10\2\0\3\10\1\0\6\10"+ + "\1\u026d\2\0\1\122\2\10\4\0\10\10\22\0\15\10"+ + "\1\u026e\4\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u026f\1\10\1\u0270\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\5\10\1\u0271\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\11\10\1\u0272\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0273\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\134\7\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u0274\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0275\1\u0142\16\10\2\0\2\10\1\u0142\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0276\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0277\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u0278\21\10\2\0\1\10\1\u0278\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0279\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0137\4\10\22\0\22\10\2\0\3\10"+ + "\24\0\1\u027a\136\0\1\u027b\44\0\1\u0131\132\0\1\u027a"+ + "\105\0\1\u0131\74\0\1\u027c\1\u027d\46\0\1\u027e\145\0"+ + "\1\u027f\37\0\1\u0280\104\0\1\u0281\131\0\1\u0282\77\0"+ + "\1\u0283\47\0\1\u0284\63\0\1\u0285\75\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u01b4\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0286\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0287\17\10\2\0\3\10\1\0\4\10\1\u0288\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0289\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u028a\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\132\16\10\2\0\2\10"+ + "\1\132\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u028b\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u0172"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u028c\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u028d"+ + "\2\10\1\u028e\1\u028f\2\10\22\0\1\10\1\u0290\20\10"+ + "\2\0\1\u028e\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0291\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0292"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0293\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u0294\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0295\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\134\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0296"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0297\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0298\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u0299\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u029a\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u029b\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\u029c\21\10"+ + "\2\0\1\10\1\u029c\1\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u029d\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\246\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u029e\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\13\10\1\u029f\6\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u02a0\11\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u02a1\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u02a2\3\10\22\0\22\10\2\0\1\u02a2\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u02a3"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u02a4\1\10\22\0\6\10"+ + "\1\u02a5\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u023e\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u02a6\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02a7"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02a8\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u02a9\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\u02aa\21\10\2\0"+ + "\1\10\1\u02aa\1\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u02ab\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\6\10\1\u02ac\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u02ad\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u02ae\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u02af\17\10\2\0\3\10"+ + "\1\0\6\10\1\u02b0\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u02b1\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u02b2\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02b3\4\10\22\0"+ + "\2\10\1\163\17\10\2\0\3\10\1\0\4\10\1\u02b4"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u02b5\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u02b6\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\13\10\1\u02b7\6\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u02b8\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02b9\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u02ba\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\4\10\1\u02bb\2\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u02bc\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u02bd\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u02be\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\u02bf\10\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u02c0\22\0\22\10\2\0\3\10\3\0\4\u02c1\15\0"+ + "\3\u02c1\31\0\1\u02c1\1\0\1\u02c1\7\0\3\u02c1\2\0"+ + "\1\u02c1\11\0\1\u02c2\75\0\4\u02c3\15\0\3\u02c3\31\0"+ + "\1\u02c3\1\0\1\u02c3\7\0\3\u02c3\2\0\1\u02c3\11\0"+ + "\1\u02c4\72\0\14\101\1\u02c5\1\0\1\101\1\0\57\101"+ + "\3\0\15\101\1\0\1\101\1\0\10\101\1\u0177\14\101"+ + "\1\u0222\31\101\3\0\1\101\7\u0224\1\101\1\u0224\1\101"+ + "\2\u0224\1\0\1\101\1\u02c6\15\u0224\1\101\1\u0224\2\101"+ + "\5\u0224\2\101\25\u0224\2\101\3\u0225\1\0\1\u0225\1\u02c6"+ + "\5\u0225\1\0\1\u02c6\1\0\2\u0225\2\0\2\u02c6\10\u0225"+ + "\4\u02c6\1\0\1\u02c6\2\0\5\u02c6\2\0\3\u02c6\22\u0225"+ + "\2\0\3\u0225\14\0\1\u02c7\115\0\1\u017c\14\0\1\u0226"+ + "\34\0\14\112\1\u02c8\1\0\61\112\3\0\15\112\1\0"+ + "\12\112\1\u017f\14\112\1\u0228\31\112\3\0\1\112\7\u022a"+ + "\1\112\1\u022a\1\112\2\u022a\1\0\1\112\16\u022a\1\112"+ + "\1\u022a\2\112\5\u022a\2\112\25\u022a\2\112\3\u022b\1\0"+ + "\1\u022b\1\u02c9\5\u022b\1\0\1\u02c9\1\0\2\u022b\2\0"+ + "\2\u02c9\10\u022b\4\u02c9\1\0\1\u02c9\2\0\5\u02c9\2\0"+ + "\3\u02c9\22\u022b\2\0\3\u022b\14\0\1\u02ca\115\0\1\u0184"+ + "\14\0\1\u022c\37\0\4\u02cb\15\0\3\u02cb\31\0\1\u02cb"+ + "\1\0\1\u02cb\7\0\3\u02cb\2\0\1\u02cb\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u02cc"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02cd\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u02ce\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02cf\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\337\17\10\2\0\3\10\1\0"+ + "\6\10\1\u02d0\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u02d1\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u02d2"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u02d3\13\10"+ + "\2\0\3\10\3\0\4\u02d4\15\0\3\u02d4\31\0\1\u02d4"+ + "\1\0\1\u02d4\7\0\3\u02d4\2\0\1\u02d4\3\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\1\10\1\u02d5"+ + "\20\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u02d6\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u02d7\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02d8\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\u02d9\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u013a\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u02da\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02db\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02dc\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u02dd\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u02de\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\15\10\1\u02df\4\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u013c\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u02e0\22\0"+ + "\22\10\2\0\3\10\1\0\4\10\1\u02e1\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u02e2\21\10\2\0\1\10\1\u02e2\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\301\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u02e3\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u02e4"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u02e5\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u02e6\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u02e7\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u02e8\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02e9\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u02ea\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u02eb\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u02ec"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u01bc\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u02ed\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u02ee\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\15\10\1\u0152\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u02ef\4\10\1\u02f0\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u02f1\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u02f2\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\12\10\1\u013a\7\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02f3\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u02f4\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u02f5\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\u0172\7\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\10"+ + "\1\u0159\20\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u013c\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\10\1\u02f6\20\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u02f7"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u02f8\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0172\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u02f9\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u02fa\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u02fb\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\u02fc\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u02fd\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u02fe\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u02ff\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0300\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u0301\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0302\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0303\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\u0300\21\10\2\0\1\10\1\u0300"+ + "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0304\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0305"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0306\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0307\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0308\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0309\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u030a\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\1\134\21\10\2\0\1\10"+ + "\1\134\1\10\25\0\1\u0131\51\0\1\u0131\25\0\1\u0131"+ + "\105\0\1\u030b\131\0\1\u030c\46\0\1\u030d\130\0\1\u030e"+ + "\24\0\1\u030e\24\0\1\u030f\65\0\1\u0310\147\0\1\u0311"+ + "\103\0\1\u01d3\103\0\1\u0312\101\0\1\u0128\21\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0113\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\164\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0313\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0314\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0315\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u02aa"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0316\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u0317\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0318\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0319\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u031a\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u031b\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u031c\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0113\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u031d\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u031e\14\10\2\0\3\10\1\0\6\10\1\u031f"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0320\5\10\22\0"+ + "\2\10\1\u0243\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u0321\16\10"+ + "\2\0\2\10\1\u0321\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u0322\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\134\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0113\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0323\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0324\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0325\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u013e"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\4\10\1\u0326"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0327\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0138\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0328\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0299\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0329\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u032a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0152\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u032b\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u032c\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u032d\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u032e\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\11\10\1\u032f\10\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u0330\1\10\22\0"+ + "\4\10\1\u0331\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u0332\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\4\10\1\u0333\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0334\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0335\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u0336\1\10\22\0\10\10\1\u0337\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0338\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0339\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u033a\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u033b\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u033c\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u014b\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\4\10\1\u033d\3\10\22\0"+ + "\22\10\2\0\1\u033d\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u033e\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\10\10\1\u033f\11\10\2\0\3\10\1\0\6\10\1\u0340"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\15\10\1\u0341\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0342\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u0343\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0344\7\10\1\u0345\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u0346\14\10\2\0\3\10\3\0\4\u0347\15\0\3\u0347"+ + "\31\0\1\u0347\1\0\1\u0347\7\0\3\u0347\2\0\1\u0347"+ + "\5\0\4\u0348\15\0\3\u0348\31\0\1\u0348\1\0\1\u0348"+ + "\7\0\3\u0348\2\0\1\u0348\5\0\4\u0349\15\0\3\u0349"+ + "\31\0\1\u0349\1\0\1\u0349\7\0\3\u0349\2\0\1\u0349"+ + "\5\0\4\u034a\15\0\3\u034a\31\0\1\u034a\1\0\1\u034a"+ + "\7\0\3\u034a\2\0\1\u034a\2\0\14\101\1\u0224\1\0"+ + "\1\101\1\0\57\101\17\0\1\u0225\65\0\14\112\1\u022a"+ + "\1\0\61\112\17\0\1\u022b\70\0\4\10\15\0\3\10"+ + "\31\0\1\10\1\0\1\10\7\0\3\10\2\0\1\10"+ + "\3\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u034b\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u034c\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u034d\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u034e\2\10"+ + "\22\0\1\10\1\u034f\3\10\1\u0350\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0351"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u0352\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u0353\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\10\10"+ + "\1\u0354\11\10\2\0\3\10\3\0\4\u0355\15\0\3\u0355"+ + "\31\0\1\u0355\1\0\1\u0355\7\0\3\u0355\2\0\1\u0355"+ + "\3\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0356"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u0357\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\350\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\160\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0358\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u031c\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0292\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u0359\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u035a\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u035a\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0161\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u035b\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\6\10\1\u035c\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u01a4"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u035d\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u035e\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u035f\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u0360\15\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0361\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u0362\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0363\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0364"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0365\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0366\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0367\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u0368\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0369\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\13\10\1\u036a"+ + "\6\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u036b\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u036c\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u036d\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u036e\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u036f\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u013c\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0370\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0371\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0372\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0373\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0374\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u0375\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u0376"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0377\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u0378\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u0379\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u037a\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\5\10\1\u037b\2\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u037c\1\10\1\u037d\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u037e\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u037f\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0275\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0380\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0381\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u0382\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0383\1\10\22\0\2\10\1\u0384\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\3\10\1\u0385\16\10\2\0\2\10\1\u0385"+ + "\7\0\1\u0386\152\0\1\u0387\105\0\1\u0131\77\0\1\u027b"+ + "\41\0\1\u0388\141\0\1\u01d3\76\0\1\u0389\46\0\1\u038a"+ + "\56\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u038b\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u038c\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u038d\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u013c\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u038e\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u014d"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u038f\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0390\13\10\2\0\3\10\1\0"+ + "\6\10\1\u0391\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\134\5\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0152"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0299\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u0392\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0393\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0394\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\u0395\21\10\2\0\1\10\1\u0395\1\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0396\2\10"+ + "\1\u0397\22\0\7\10\1\u0398\12\10\2\0\1\u0396\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u0364\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0399\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u039a\3\10\1\u01ca\13\10\2\0\3\10"+ + "\1\0\6\10\1\u0360\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u039b\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u039c\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u039d\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u0216\22\0\1\10\1\u039e\20\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u024b\5\10\22\0\2\10\1\u039f\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0292\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u013c\16\10"+ + "\2\0\2\10\1\u013c\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u03a0\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u03a1"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u03a2\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u03a3\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03a4\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u03a5\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u03a6\5\10\22\0\2\10\1\u0377\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u03a7\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u03a8\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u03a9\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u03aa\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u03ab\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\4\10"+ + "\1\u03ac\3\10\22\0\22\10\2\0\1\u03ac\2\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u03ad\15\10\2\0\3\10\1\0\4\10\1\u03ae\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u03af\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u03b0\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u03b1\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u03b2"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u03b3\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\6\10\1\u03b4\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u03b5\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u03b6\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u03b7"+ + "\5\10\22\0\22\10\2\0\3\10\3\0\4\u03b8\15\0"+ + "\3\u03b8\31\0\1\u03b8\1\0\1\u03b8\7\0\3\u03b8\2\0"+ + "\1\u03b8\5\0\4\u03b9\15\0\3\u03b9\31\0\1\u03b9\1\0"+ + "\1\u03b9\7\0\3\u03b9\2\0\1\u03b9\5\0\4\u03ba\15\0"+ + "\3\u03ba\31\0\1\u03ba\1\0\1\u03ba\7\0\3\u03ba\2\0"+ + "\1\u03ba\5\0\4\u03bb\15\0\3\u03bb\31\0\1\u03bb\1\0"+ + "\1\u03bb\7\0\3\u03bb\2\0\1\u03bb\3\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\u03bc\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u03bd\3\10\22\0\22\10\2\0\1\u03bd\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0265"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\6\10\1\u03be\1\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\240\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u03bf\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0152\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u03c0\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u03c1\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u03c2\5\10\22\0\22\10\2\0\3\10"+ + "\3\0\4\u03c3\15\0\3\u03c3\31\0\1\u03c3\1\0\1\u03c3"+ + "\7\0\3\u03c3\2\0\1\u03c3\3\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\11\10\1\u03c4\10\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u03c5\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u03c6\22\0\7\10"+ + "\1\u03c7\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u03c6\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u03c8"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u03c9\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u03ca\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u03cb\1\10\1\u03cc\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03cd"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u013c\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u03ce"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u03cf\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u03d0\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u013c\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u03d1\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u013a\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u0172\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u03d2\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u03d3\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u03d4\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u03d5\3\10"+ + "\22\0\22\10\2\0\1\u03d5\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u03d6\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u03d7\17\10\2\0\3\10\1\0"+ + "\4\10\1\u03d8\2\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u01b8\2\10\1\u03d9\3\10\22\0\7\10\1\u03da\12\10"+ + "\2\0\1\u03d9\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u03db\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u03dc"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u03dd\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u0253\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u03de\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u03df\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u03e0\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u03e1"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u03e2\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u03e3"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u03e4\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\3\10\1\u03e5\16\10\2\0\2\10\1\u03e5"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u03e6\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u03e7\22\0\22\10\2\0"+ + "\3\10\1\0\4\10\1\u03e8\2\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u034f\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u03e9\3\10\1\u03ea\22\0\2\10\1\u0146\5\10"+ + "\1\u03ea\11\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u03eb\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\u03ec"+ + "\7\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u03ed\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u03ee\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u03ef\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u03f0\4\10\1\u03f1"+ + "\10\10\2\0\3\10\63\0\1\u03f2\45\0\1\u03f3\136\0"+ + "\1\u03f4\100\0\1\u0131\75\0\1\231\23\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u03f5\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\u03f6\7\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u03f7\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\4\10\1\u02bb\2\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u03f8\1\10"+ + "\1\u03f9\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u03fa\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u03fb\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u03fc"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u03fd\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\246\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u03fe\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0265\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\1\u03ff"+ + "\21\10\2\0\1\10\1\u03ff\1\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0400\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\375\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0401\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u038c\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0402\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0403"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0404\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0405\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0406\3\10\22\0\22\10"+ + "\2\0\1\u0406\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\10\1\u0407\20\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u0408"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0409\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u040a\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u040b\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u040c\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u040d\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u040e\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u0286\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u040f\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0410\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u0411\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u0412\3\10"+ + "\1\u023c\22\0\2\10\1\u0413\13\10\1\u0414\3\10\2\0"+ + "\3\10\1\0\6\10\1\u0415\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u02b7\13\10"+ + "\2\0\3\10\1\0\4\10\1\u0416\2\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0417\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0418\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0419\6\10\22\0\5\10\1\u041a\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u041b\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u041c\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u03ec\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0260\17\10\2\0\3\10\3\0\4\303\15\0\3\303"+ + "\31\0\1\303\1\0\1\303\7\0\3\303\2\0\1\303"+ + "\5\0\4\u041d\15\0\3\u041d\31\0\1\u041d\1\0\1\u041d"+ + "\7\0\3\u041d\2\0\1\u041d\5\0\4\305\15\0\3\305"+ + "\31\0\1\305\1\0\1\305\7\0\3\305\2\0\1\305"+ + "\5\0\4\u041e\15\0\3\u041e\31\0\1\u041e\1\0\1\u041e"+ + "\7\0\3\u041e\2\0\1\u041e\3\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01b8\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0396\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u041f\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u0420\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0421\15\10\2\0\3\10\1\0\6\10\1\160"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0422\2\10\22\0\22\10\2\0\3\10\3\0\4\351"+ + "\15\0\3\351\31\0\1\351\1\0\1\351\7\0\3\351"+ + "\2\0\1\351\3\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u028e\3\10\22\0\22\10\2\0\1\u028e\2\10"+ + "\1\0\6\10\1\u0423\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\277\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\3\10\1\u0424\16\10\2\0\2\10\1\u0424\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\u0425\7\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0426\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\15\10\1\u0427\4\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0261\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u0428\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u03e9\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0429\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\4\10\1\u042a\2\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u03bc\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u03cf\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\244"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u042b\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\1\10\1\u01fe\20\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\134\3\10"+ + "\22\0\22\10\2\0\1\134\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u042c\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\u042d\15\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u0263\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u042e\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u042f\2\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u0430\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\277\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0431\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u0432\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\15\10\1\u0433\4\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0434"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\u0435\16\10\2\0\2\10"+ + "\1\u0435\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u0436\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0437\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0104\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u0438\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0439\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u043a\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u043b\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u043c\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u043d"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\7\10\1\u043e\12\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u038c\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0384\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\134\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u043f\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0440\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u0441\2\10\22\0\2\10\1\u0442\17\10\2\0"+ + "\3\10\55\0\1\u0443\33\0\1\u0444\120\0\1\u0445\54\0"+ + "\7\10\2\0\1\122\2\10\4\0\4\10\1\u0446\3\10"+ + "\22\0\22\10\2\0\1\u0446\2\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u0447\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0448\22\0\10\10\1\u0448\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u0449\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\2\10\1\u044a\17\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u044b\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u044c\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\4\10\1\u044d\15\10\2\0"+ + "\3\10\1\0\4\10\1\u044e\2\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u044f\3\10\1\u03c6\22\0\7\10\1\u03c7"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\3\10\1\134\16\10\2\0\2\10"+ + "\1\134\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0450\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u0451\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u0452\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u03bc\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u0453\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0265\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0454\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u0455\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0456\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u0457"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0458\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u0459"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\3\10\1\u03bc\16\10"+ + "\2\0\2\10\1\u03bc\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u045a\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u045b"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u045c\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u045d\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u045e\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\u045f\7\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u0460\15\10\2\0\3\10\1\0\6\10\1\u0461"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0462\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0463"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u0464\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u0465"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u0466\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u0467\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0468\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\u0469\5\10\2\0\3\10"+ + "\3\0\4\u0174\15\0\3\u0174\31\0\1\u0174\1\0\1\u0174"+ + "\7\0\3\u0174\2\0\1\u0174\5\0\4\u0176\15\0\3\u0176"+ + "\31\0\1\u0176\1\0\1\u0176\7\0\3\u0176\2\0\1\u0176"+ + "\3\0\4\10\1\u02bb\2\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01b8\5\10\1\u046a\22\0\2\10\1\u0394\2\10"+ + "\1\u01bb\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\4\10\1\u046b\3\10\22\0\22\10\2\0"+ + "\1\u046b\2\10\1\0\6\10\1\134\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u01f0"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u046c\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\6\10\1\u046d\13\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u046e\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u046f\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u0470\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u0471\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u0472\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u0473\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\7\10\1\u0474\12\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\4\10"+ + "\1\u0475\15\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\10\10\1\u0476\11\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u0477\5\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\1\10\1\u0478\6\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u0479\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u047a"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\4\10\1\u03d8"+ + "\2\10\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u047b\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u047c\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u047d\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\1\10\1\u047e"+ + "\6\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u047f\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u0473\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u0480\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\15\10\1\u013a\4\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u0481\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\7\10\1\u0482\12\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0483\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0484\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0485\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u0151"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\u0486\7\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u0486\15\10\2\0\3\10\57\0\1\u0487"+ + "\104\0\1\u0488\77\0\1\u0489\22\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u048a\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u03ec\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u048b\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\6\10\1\u0289\1\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u048c\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u048d\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u048e\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\7\10\1\u048f\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0146\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\u0490\7\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0491\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u0492"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\242\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u01b8\5\10\1\134\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\7\10\1\u0493"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u0494\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u0495\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0496"+ + "\13\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u0497\10\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u0498\12\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u040a\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\7\10\1\u0499\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u013c"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u049a\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u049b"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\5\10\1\u049c\14\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\4\10\1\u049d\3\10\22\0\22\10\2\0\1\u049d\2\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\3\10\1\u049e"+ + "\4\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u049f\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\u013c\7\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u03bc"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u04a0\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04a1"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u04a2\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\4\10\1\374\10\10\1\u04a3\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\374\15\10\2\0\3\10\1\0\6\10"+ + "\1\u04a4\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u04a5\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u0279\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\2\10\1\u04a6\5\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\5\10\1\u04a7\14\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u01f0"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u04a8\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\6\10\1\u013a\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\4\10\1\u04a9\2\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u013a\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04aa"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u04ab\11\10\2\0\3\10"+ + "\1\0\6\10\1\242\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u04ac\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u013c\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\10\10\1\u02df"+ + "\11\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u04ad\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04ae"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\4\10\1\u04af\15\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u04b0\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04b1\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u04b2\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u039e\13\10\1\u04b3\4\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\5\10"+ + "\1\u04b4\14\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u01b8\2\10\1\u04b5\2\10\1\u01b3"+ + "\22\0\2\10\1\u04b6\17\10\2\0\1\u04b5\2\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04b7\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u01a4\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04b8\17\10\2\0\3\10\62\0\1\u04b9"+ + "\43\0\1\u0487\100\0\1\u01d5\57\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u04ba\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u03bc\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u04bb\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u04bc\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\164\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u04bd\6\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u04be\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u04bf\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u04c0\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\277\1\10"+ + "\1\u04c1\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u0469\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\1\u0469\21\10\2\0\1\10\1\u0469"+ + "\1\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u040a\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u04c2\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\7\10\1\u04c3\12\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u04c4\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u04c5\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u04c6\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u04c7\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04c8\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\7\10"+ + "\1\u04c9\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u04ca\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\6\10\1\u04cb\13\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\7\10"+ + "\1\u04cc\12\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\14\10\1\u04cd\5\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u04ce\4\10\22\0\22\10\2\0\3\10\1\0\4\10"+ + "\1\u04cf\2\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0137\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\7\10\1\u013c\12\10\2\0\3\10\1\0\6\10\1\u04d0"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\2\10"+ + "\1\u04d1\5\10\22\0\22\10\2\0\3\10\1\0\6\10"+ + "\1\u04d2\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\2\10\1\u03ed\5\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u04d3\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u04d4\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04d5\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\5\10\1\u0417"+ + "\14\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\6\10\1\u04d6\1\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u04ba\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u04d7\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u04d8\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\13\10"+ + "\1\u04d9\6\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\6\10\1\u04da\1\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u04db\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\5\10\1\u04dc\2\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\11\10\1\u04dd\10\10\2\0\3\10"+ + "\55\0\1\u027b\25\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\10\10\1\u013c\11\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\3\10\1\u04de\4\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\7\10\1\u04df\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04e0"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\5\10\1\u04e1\2\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u04e2\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04e3\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\5\10\1\u013c\14\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u04e4\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\u04e5\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u04e6\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04e7"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u04e8\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u04e9\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\2\10\1\u04e9\5\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\1\10\1\u04ea\6\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\4\10\1\u04eb\15\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u04ec"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u04ed\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\2\10\1\u04ee"+ + "\5\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\2\10\1\u04ef\5\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\5\10\1\u01bb\14\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u04f0\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\2\10\1\u04f1\17\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\1\10"+ + "\1\u04f2\6\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\11\10\1\u034f"+ + "\10\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\7\10\1\u04f3\22\0\22\10\2\0\3\10\1\0"+ + "\4\10\1\u04f4\2\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04f5\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\1\10\1\u013a\20\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u032e\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\6\10\1\u04f6\13\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\5\10\1\u04f7"+ + "\2\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u04f8\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u04f9\17\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\2\10\1\u04fa"+ + "\17\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\10\10\1\u04ec\11\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\4\10\1\u04b5"+ + "\3\10\22\0\22\10\2\0\1\u04b5\2\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\6\10\1\u04fb\1\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u04fc\15\10\2\0\3\10"+ + "\1\0\6\10\1\u0172\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\6\10\1\u04fd\13\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\6\10\1\u04fe\13\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\3\10\1\u04ff\4\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\4\10\1\u04c2\15\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\14\10\1\u0500\5\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\6\10\1\u0501\13\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\11\10\1\u0502\10\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\2\10"+ + "\1\u0503\17\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\17\10\3\134\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\13\10\1\u03cb\6\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\11\10\1\u0504\10\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\2\10\1\u0505\17\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\7\10\1\u01f9\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\2\10\1\u0506\17\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\4\10\1\u04f7\15\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\3\10\1\u0507\4\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0508\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\6\10\1\u0509\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\5\10\1\u04a6\2\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\10\1\u050a\20\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\10\10\1\u038c\11\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u050b\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u038c\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\12\10\1\u02a1\7\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\6\10"+ + "\1\u050c\1\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u035a"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0261\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\5\10\1\u050d\14\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\7\10\1\u038c\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\2\10\1\u0149\17\10\2\0\3\10\1\0\6\10"+ + "\1\u050e\2\0\1\122\2\10\4\0\10\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\5\10\1\u04c9\2\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\6\10"+ + "\1\u01b4\13\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u050f\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\10\10\1\u0510\11\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\6\10\1\u0511"+ + "\13\10\2\0\3\10\1\0\1\10\1\u0512\5\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\6\10\1\u0513"+ + "\1\10\22\0\22\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\1\10\1\u039b\6\10\22\0\22\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\1\10\1\u0514\6\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\1\10\1\u0515\6\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\277\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\5\10"+ + "\1\u0245\2\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0138"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\2\10\1\u0516\5\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\1\u03ec\21\10\2\0\1\10\1\u03ec\1\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\4\10\1\u0517"+ + "\15\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\1\10\1\u0518\1\u0519\2\10\1\u051a\1\10\1\u051b"+ + "\22\0\1\u051c\3\10\1\u03f0\1\10\1\u051d\13\10\2\0"+ + "\1\10\1\u051c\1\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u051e\4\10\22\0\22\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u051f\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\14\10\1\u0520\5\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\10\10\22\0\13\10\1\u038c\6\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\6\10\1\u0521\1\10"+ + "\22\0\22\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\3\10\1\u0522\4\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\3\10"+ + "\1\u0523\4\10\22\0\22\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\2\10\1\200\5\10\22\0"+ + "\22\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\14\10\1\220\5\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\2\10\1\u0524\17\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\4\10\1\u0525\3\10\22\0\22\10"+ + "\2\0\1\u0525\2\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\10\10\22\0\5\10\1\u0159\14\10\2\0\3\10"+ + "\1\0\7\10\2\0\1\122\2\10\4\0\10\10\22\0"+ + "\11\10\1\u01b3\10\10\2\0\3\10\1\0\7\10\2\0"+ + "\1\122\2\10\4\0\10\10\22\0\1\10\1\u039b\20\10"+ + "\2\0\3\10\1\0\7\10\2\0\1\122\2\10\4\0"+ + "\3\10\1\u0526\4\10\22\0\22\10\2\0\3\10\1\0"+ + "\7\10\2\0\1\122\2\10\4\0\10\10\22\0\11\10"+ + "\1\367\10\10\2\0\3\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\5\10\1\u0527\2\10\22\0\22\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u0528\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\4\10\1\u0198\3\10\22\0"+ + "\22\10\2\0\1\u0198\2\10\1\0\7\10\2\0\1\122"+ + "\2\10\4\0\10\10\22\0\15\10\1\u0529\4\10\2\0"+ + "\3\10\1\0\7\10\2\0\1\122\2\10\4\0\10\10"+ + "\22\0\7\10\1\u019e\12\10\2\0\3\10\1\0\7\10"+ + "\2\0\1\122\2\10\4\0\10\10\22\0\7\10\1\u01e0"+ + "\12\10\2\0\3\10\1\0\7\10\2\0\1\122\2\10"+ + "\4\0\3\10\1\u0245\4\10\22\0\22\10\2\0\3\10"; + + private static int [] zzUnpackTrans() { + int [] result = new int[84612]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\6\0\1\11\5\1\2\11\2\1\1\11\12\1\1\11"+ + "\5\1\1\11\1\1\1\11\15\1\1\11\1\1\1\11"+ + "\2\1\1\11\2\1\2\11\3\1\2\11\1\1\1\11"+ + "\10\1\1\11\6\1\1\0\12\1\1\11\5\1\1\0"+ + "\55\1\14\0\45\1\1\11\1\1\1\0\1\1\1\0"+ + "\1\11\4\1\4\0\4\1\5\0\20\1\1\0\11\1"+ + "\1\0\62\1\10\0\1\1\2\0\1\11\3\0\76\1"+ + "\4\0\4\1\4\0\4\1\5\0\14\1\1\0\6\1"+ + "\1\11\65\1\16\0\75\1\2\0\1\11\2\0\1\11"+ + "\4\1\2\0\4\1\3\0\11\1\1\0\101\1\14\0"+ + "\73\1\4\0\1\1\2\0\1\1\3\0\10\1\1\0"+ + "\66\1\7\0\65\1\4\0\12\1\1\0\60\1\5\0"+ + "\55\1\4\0\7\1\1\0\56\1\3\0\50\1\2\0"+ + "\44\1\3\0\101\1\3\0\57\1\1\0\160\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[1321]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public NSISTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + } + + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public NSISTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public NSISTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 204) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + } + + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = zzLexicalState; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { addToken(Token.IDENTIFIER); + } + case 37: break; + case 34: + { addToken(Token.LITERAL_BOOLEAN); + } + case 38: break; + case 29: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 39: break; + case 19: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + return firstToken; + } + case 40: break; + case 27: + { /* Skip all escaped chars. */ + } + case 41: break; + case 24: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 42: break; + case 3: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 43: break; + case 32: + { addToken(Token.FUNCTION); + } + case 44: break; + case 8: + { addToken(Token.VARIABLE); + } + case 45: break; + case 16: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_CHAR); + return firstToken; + } + case 46: break; + case 14: + { /* Line ending in '\' => continue to next line. */ + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + return firstToken; + } + case 47: break; + case 17: + { addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; + } + case 48: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 49: break; + case 25: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 50: break; + case 26: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 51: break; + case 7: + { addToken(Token.WHITESPACE); + } + case 52: break; + case 30: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 53: break; + case 10: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 54: break; + case 2: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 55: break; + case 28: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 56: break; + case 4: + { start = zzMarkedPos-1; yybegin(EOL_COMMENT); + } + case 57: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 58: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 59: break; + case 15: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; + } + case 60: break; + case 31: + { addToken(Token.RESERVED_WORD); + } + case 61: break; + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 62: break; + case 20: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 63: break; + case 23: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 64: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 65: break; + case 6: + { addNullToken(); return firstToken; + } + case 66: break; + case 22: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 67: break; + case 5: + { addToken(Token.OPERATOR); + } + case 68: break; + case 36: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 69: break; + case 33: + { addToken(Token.COMMENT_MULTILINE); + } + case 70: break; + case 11: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 71: break; + case 12: + { + } + case 72: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 1322: break; + case STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); return firstToken; + } + case 1323: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); return firstToken; + } + case 1324: break; + case YYINITIAL: { + addNullToken(); return firstToken; + } + case 1325: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 1326: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 1327: break; + default: + return null; + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } + } + } + + +} diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex old mode 100644 new mode 100755 index 3c118e340..98eb146c3 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.flex @@ -2,28 +2,15 @@ * 01/28/2009 * * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; import java.io.*; import javax.swing.text.Segment; +import java.util.Stack; import org.fife.ui.rsyntaxtextarea.*; @@ -49,7 +36,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                          - *
                        • The generated PHPTokenMaker.java file will contain two + *
                        • The generated PHPTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -63,8 +50,7 @@ import org.fife.ui.rsyntaxtextarea.*; *
                        * * @author Robert Futrell - * @version 0.4 - * + * @version 0.9 */ %% @@ -78,65 +64,210 @@ import org.fife.ui.rsyntaxtextarea.*; %{ /** - * Token type specific to HTMLTokenMaker; this signals that the user has + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; + + + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; + + + /** + * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed HTML tag; thus a new line is beginning * still inside of the tag. */ - public static final int INTERNAL_INTAG = -1; + private static final int INTERNAL_INTAG = -3; /** - * Token type specific to HTMLTokenMaker; this signals that the user has + * Token type specific to PHPTokenMaker; this signals that the user has * ended a line with an unclosed <script> tag. */ - public static final int INTERNAL_INTAG_SCRIPT = -2; + private static final int INTERNAL_INTAG_SCRIPT = -4; /** * Token type specifying we're in a double-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; /** * Token type specifying we're in a single-qouted attribute in a * script tag. */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; + + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; + + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; + + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; /** * Token type specifying we're in JavaScript. */ - public static final int INTERNAL_IN_JS = -5; + private static final int INTERNAL_IN_JS = -10; /** * Token type specifying we're in a JavaScript multiline comment. */ - public static final int INTERNAL_IN_JS_MLC = -6; + private static final int INTERNAL_IN_JS_MLC = -11; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -12; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -13; /** - * Token type specifying we're in PHP. + * Token type specifying we're in a valid multi-line JS string. */ - public static final int INTERNAL_IN_PHP = -7; + private static final int INTERNAL_IN_JS_STRING_VALID = -14; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -15; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -16; + + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -17; + + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -18; + + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -19; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); + + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); + + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); + + /** + * Token type specifying we're in PHP. This particular field is public so + * that we can hack and key off of it for code completion. + */ + public static final int INTERNAL_IN_PHP = -(4<<11); /** * Token type specifying we're in a PHP multiline comment. */ - public static final int INTERNAL_IN_PHP_MLC = -8; + private static final int INTERNAL_IN_PHP_MLC = -(5<<11); /** * Token type specifying we're in a PHP multiline string. */ - public static final int INTERNAL_PHP_STRING = -9; + private static final int INTERNAL_IN_PHP_STRING = -(6<<11); /** * Token type specifying we're in a PHP multiline char. */ - public static final int INTERNAL_PHP_CHAR = -10; + private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); + + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; /** * Whether closing markup tags are automatically completed for PHP. */ private static boolean completeCloseTags; + /** + * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int phpInState; + + /** + * The language index we were in when PHP was started. + */ + private int phpInLangIndex; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + + /** + * Language state set on PHP. + */ + private static final int LANG_INDEX_PHP = 3; + + private Stack varDepths; + /** * Constructor. This must be here because JFlex does not generate a @@ -158,6 +289,29 @@ import org.fife.ui.rsyntaxtextarea.*; } + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds an end token that encodes the information necessary to return + * to the pre-PHP state and language index. + * + * @param endTokenState The PHP-related end-token state. + */ + private void addPhpEndToken(int endTokenState) { + addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); + } + + /** * Adds the token specified to the current linked list of tokens. * @@ -189,12 +343,22 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; } + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + /** * Sets whether markup close tags should be completed. You might not want * this to be the case, since some tags in standard HTML aren't usually @@ -203,15 +367,59 @@ import org.fife.ui.rsyntaxtextarea.*; * @return Whether closing markup tags are completed. * @see #setCompleteCloseTags(boolean) */ + @Override public boolean getCompleteCloseTags() { return completeCloseTags; } + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || + languageIndex==LANG_INDEX_PHP; + } + + /** * {@inheritDoc} */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + case LANG_INDEX_PHP: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } return false; } @@ -228,74 +436,160 @@ import org.fife.ui.rsyntaxtextarea.*; * @return The first Token in a linked list representing * the syntax highlighted text. */ + @Override public Token getTokenList(Segment text, int initialTokenType, int startOffset) { resetTokenList(); this.offsetShift = -text.offset + startOffset; + phpInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = LANG_INDEX_DEFAULT; // Start off in the proper state. int state = Token.NULL; switch (initialTokenType) { - case Token.COMMENT_MULTILINE: + case Token.MARKUP_COMMENT: state = COMMENT; - start = text.offset; break; case Token.VARIABLE: state = DTD; - start = text.offset; break; case INTERNAL_INTAG: state = INTAG; - start = text.offset; break; case INTERNAL_INTAG_SCRIPT: state = INTAG_SCRIPT; - start = text.offset; break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: state = INATTR_DOUBLE; - start = text.offset; break; - case Token.LITERAL_CHAR: + case INTERNAL_ATTR_SINGLE: state = INATTR_SINGLE; - start = text.offset; break; case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: state = INATTR_DOUBLE_SCRIPT; - start = text.offset; break; case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: state = INATTR_SINGLE_SCRIPT; - start = text.offset; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; break; case INTERNAL_IN_JS: state = JAVASCRIPT; - start = text.offset; + languageIndex = LANG_INDEX_JS; break; case INTERNAL_IN_JS_MLC: state = JS_MLC; - start = text.offset; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + languageIndex = LANG_INDEX_JS; + validJSString = false; break; - case INTERNAL_IN_PHP: - state = PHP; - start = text.offset; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; break; - case INTERNAL_IN_PHP_MLC: - state = PHP_MLC; - start = text.offset; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; break; - case INTERNAL_PHP_STRING: - state = PHP_STRING; - start = text.offset; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; break; - case INTERNAL_PHP_CHAR: - state = PHP_CHAR; - start = text.offset; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; break; default: - state = Token.NULL; + if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState + int main = -(-initialTokenType & 0x0000ff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_PHP: + state = PHP; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_MLC: + state = PHP_MLC; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_STRING: + state = PHP_STRING; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_CHAR: + state = PHP_CHAR; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = YYINITIAL; + } + break; } + setLanguageIndex(languageIndex); + start = text.offset; s = text; try { yyreset(zzReader); @@ -303,7 +597,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -322,6 +616,17 @@ import org.fife.ui.rsyntaxtextarea.*; } + /** + * Overridden to remember the language index we're leaving. + */ + @Override + protected void yybegin(int state, int languageIndex) { + phpInLangIndex = getLanguageIndex(); + yybegin(state); + setLanguageIndex(languageIndex); + } + + /** * Refills the input buffer. * @@ -343,7 +648,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -366,36 +671,32 @@ import org.fife.ui.rsyntaxtextarea.*; %} // HTML-specific stuff. -Whitespace = ([ \t\f]+) -LineTerminator = ([\n]) -Identifier = ([^ \t\n<&]+) -AmperItem = ([&][^; \t]*[;]?) -InTagIdentifier = ([^ \t\n\"\'/=>]+) -EndScriptTag = ("") +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) +Identifier = ([^ \t\n<&]+) +EntityReference = ([&][^; \t]*[;]?) +InTagIdentifier = ([^ \t\n\"\'/=>]+) +EndScriptTag = ("") +EndStyleTag = ("") -// JavaScript stuff. +// General stuff. Letter = [A-Za-z] -NonzeroDigit = [1-9] +NonzeroDigit = [1-9] Digit = ("0"|{NonzeroDigit}) -HexDigit = ({Digit}|[A-Fa-f]) +HexDigit = ({Digit}|[A-Fa-f]) OctalDigit = ([0-7]) -AnyCharacterButApostropheOrBackSlash = ([^\\']) -AnyCharacterButDoubleQuoteOrBackSlash = ([^\\\"\n]) +LetterOrUnderscore = ({Letter}|"_") +LetterOrUnderscoreOrDash = ({LetterOrUnderscore}|[\-]) + + +// JavaScript stuff. EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) -Escape = ("\\"(([btnfr\"'\\])|([0123]{OctalDigit}?{OctalDigit}?)|({OctalDigit}{OctalDigit}?)|{EscapedSourceCharacter})) -NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\']|"#"|"\\") +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") IdentifierStart = ({Letter}|"_"|"$") IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) -JS_UnclosedCharLiteral = ("'"({AnyCharacterButApostropheOrBackSlash}|{Escape})) -JS_CharLiteral = ({JS_UnclosedCharLiteral}"'") -JS_UnclosedErrorCharLiteral = ([\'][^\'\n]*) -JS_ErrorCharLiteral = (([\'][\'])|{JS_UnclosedErrorCharLiteral}[\']) -JS_UnclosedStringLiteral = ([\"]({AnyCharacterButDoubleQuoteOrBackSlash}|{Escape})*) -JS_StringLiteral = ({JS_UnclosedStringLiteral}[\"]) -JS_UnclosedErrorStringLiteral = ([\"]([^\"\n]|"\\\"")*) -JS_ErrorStringLiteral = ({JS_UnclosedErrorStringLiteral}[\"]) JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" JS_MLCEnd = "*/" JS_LineCommentBegin = "//" JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") @@ -411,19 +712,59 @@ JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({ JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) JS_Separator = ([\(\)\{\}\[\]\]]) JS_Separator2 = ([\;,.]) -JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>") +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"||"|"&&"|">>>") JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) JS_Identifier = ({IdentifierStart}{IdentifierPart}*) JS_ErrorIdentifier = ({NonSeparator}+) -BooleanLiteral = ("true"|"false") - +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_BooleanLiteral = ("true"|"false") + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") // PHP stuff (most PHP stuff is shared with JS for simplicity) -LetterOrUnderscore = ({Letter}|[_]) +PHP_Start = (" { - "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "-->" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } } { [^\n>]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } - ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.VARIABLE); } - <> { addToken(start,zzStartRead-1, Token.VARIABLE); return firstToken; } + ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } } { @@ -623,6 +984,7 @@ PHP_LineCommentBegin = ("//"|[#]) } { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } {Whitespace} { addToken(Token.WHITESPACE); } @@ -635,51 +997,89 @@ PHP_LineCommentBegin = ("//"|[#]) } { - [^\"]* {} - [\"] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } } { - [^\']* {} - [\'] { yybegin(INTAG); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } } { - {InTagIdentifier} { addToken(Token.IDENTIFIER); } + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. {Whitespace} { addToken(Token.WHITESPACE); } "=" { addToken(Token.OPERATOR); } - ">" { yybegin(JAVASCRIPT); addToken(Token.MARKUP_TAG_DELIMITER); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(JAVASCRIPT, LANG_INDEX_JS); } [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); } [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); } <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } } { - [^\"]* {} - [\"] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } } { - [^\']* {} - [\'] { yybegin(INTAG_SCRIPT); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {InTagIdentifier} { addToken(Token.MARKUP_TAG_ATTRIBUTE); } + "/>" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); } + "/" { addToken(Token.MARKUP_TAG_DELIMITER); } // Won't appear in valid HTML. + {Whitespace} { addToken(Token.WHITESPACE); } + "=" { addToken(Token.OPERATOR); } + ">" { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); } + [\"] { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); } + [\'] { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); } + <> { addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\"<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\'<]* {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } } { {EndScriptTag} { - yybegin(YYINITIAL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); } - // ECMA keywords. + // ECMA 3+ keywords. "break" | "continue" | "delete" | @@ -689,13 +1089,18 @@ PHP_LineCommentBegin = ("//"|[#]) "if" | "in" | "new" | - "return" | "this" | "typeof" | "var" | "void" | "while" | "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //JavaScript 1.6 + "each" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" {if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } // Reserved (but not yet used) ECMA keywords. "abstract" { addToken(Token.RESERVED_WORD); } @@ -741,17 +1146,17 @@ PHP_LineCommentBegin = ("//"|[#]) "null" { addToken(Token.RESERVED_WORD); } // Literals. - {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {JS_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } "NaN" { addToken(Token.RESERVED_WORD); } "Infinity" { addToken(Token.RESERVED_WORD); } // Functions. - "eval" { addToken(Token.FUNCTION); } - "parseInt" { addToken(Token.FUNCTION); } - "parseFloat" { addToken(Token.FUNCTION); } - "escape" { addToken(Token.FUNCTION); } - "unescape" { addToken(Token.FUNCTION); } - "isNaN" { addToken(Token.FUNCTION); } + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | "isFinite" { addToken(Token.FUNCTION); } {LineTerminator} { addEndToken(INTERNAL_IN_JS); return firstToken; } @@ -759,24 +1164,47 @@ PHP_LineCommentBegin = ("//"|[#]) {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ - {JS_CharLiteral} { addToken(Token.LITERAL_CHAR); } - {JS_UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_UnclosedErrorCharLiteral} { addToken(Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorCharLiteral} { addToken(Token.ERROR_CHAR); } - {JS_StringLiteral} { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); } - {JS_UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_UnclosedErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - {JS_ErrorStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); } + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } - {JS_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } {JS_Separator2} { addToken(Token.IDENTIFIER); } + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + /* Operators. */ {JS_Operator} { addToken(Token.OPERATOR); } @@ -796,9 +1224,142 @@ PHP_LineCommentBegin = ("//"|[#]) } + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\"<]+ {} + "<" { /* Allowing " continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\'<]+ {} + "<" { /* Allowing " continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + { // JavaScript MLC's. This state is essentially Java's MLC state. - [^\n\*]+ {} + [^hwf<\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } {JS_MLCEnd} { yybegin(JAVASCRIPT); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} @@ -806,9 +1367,160 @@ PHP_LineCommentBegin = ("//"|[#]) } + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + + { + [^hwf<\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + {EndScriptTag} { + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + "<" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } + +} + + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_SelectorPiece} { addToken(Token.DATA_TYPE); } + {CSS_PseudoClass} { addToken(Token.RESERVED_WORD); } + ":" { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); } + {CSS_AtKeyword} { addToken(Token.REGEX); } + {CSS_Id} { addToken(Token.VARIABLE); } + "{" { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); } + [,] { addToken(Token.IDENTIFIER); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + [+>~\^$\|=] { addToken(Token.OPERATOR); } + {CSS_Separator} { addToken(Token.SEPARATOR); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("CSS: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Property} { addToken(Token.RESERVED_WORD); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + ":" { addToken(Token.OPERATOR); yybegin(CSS_VALUE); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_property: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } +} + + { + {PHP_Start} { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + {EndStyleTag} { + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + {CSS_Value} { addToken(Token.IDENTIFIER); } + "!important" { addToken(Token.ANNOTATION); } + {CSS_Function} { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + {CSS_Number} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + \" { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); } + \' { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); } + ")" { /* End of a function */ addToken(Token.SEPARATOR); } + [;] { addToken(Token.OPERATOR); yybegin(CSS_PROPERTY); } + [,\.] { addToken(Token.IDENTIFIER); } + "}" { addToken(Token.SEPARATOR); yybegin(CSS); } + {Whitespace} { addToken(Token.WHITESPACE); } + {CSS_MlcStart} { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); } + . { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); } + "\n" | + <> { addEndToken(INTERNAL_CSS_VALUE); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\"<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^\n\\\'<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } +} + + { + {PHP_Start} { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); } + [^hwf\n\*<]+ {} + "<" { /* Allowing "> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } +} + + { - "?>" { addToken(Token.SEPARATOR); yybegin(YYINITIAL); } + "?>" { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; } + + /* Error control operator */ + ("@"{JS_Identifier}) { + int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.FUNCTION); + zzMarkedPos -= (count-1); //yypushback(count-1); + } /* Keywords */ "__CLASS__" | @@ -844,7 +1556,6 @@ PHP_LineCommentBegin = ("//"|[#]) "endswitch" | "endwhile" | "eval" | - "exit" | "extends" | "final" | "for" | @@ -870,7 +1581,6 @@ PHP_LineCommentBegin = ("//"|[#]) "public" | "require" | "require_once" | - "return" | "static" | "switch" | "throw" | @@ -885,6 +1595,9 @@ PHP_LineCommentBegin = ("//"|[#]) "self" | "stdClass" { addToken(Token.RESERVED_WORD); } + "exit" | + "return" { addToken(Token.RESERVED_WORD_2); } + /* Functions */ "__call" | "__construct" | @@ -1197,7 +1910,7 @@ PHP_LineCommentBegin = ("//"|[#]) "html_entity_decode" | "htmlentities" | "htmlspecialchars" | - "http_build_query" | + ("http_"("build_query"|"response_code")) | ("hw_"("array2objrec"|"changeobject"|"children"|"childrenobj"|"close"|"connect"|"connection_info"|"cp"|"deleteobject"|"docbyanchor"|"docbyanchorobj"|"document_attributes"|"document_bodytag"|"document_content"|"document_setcontent"|"document_size"|"dummy"|"edittext"|"error"|"errormsg"|"free_document"|"getanchors"|"getanchorsobj"|"getandlock"|"getchildcoll"|"getchildcollobj"|"getchilddoccoll"|"getchilddoccollobj"|"getobject"|"getobjectbyquery"|"getobjectbyquerycoll"|"getobjectbyquerycollobj"|"getobjectbyqueryobj"|"getparents"|"getparentsobj"|"getrellink"|"getremote"|"getremotechildren"|"getsrcbydestobj"|"gettext"|"getusername"|"identify"|"incollections"|"info"|"inscoll"|"insdoc"|"insertanchors"|"insertdocument"|"insertobject"|"mapid"|"modifyobject"|"mv"|"new_document"|"objrec2array"|"output_document"|"pconnect"|"pipedocument"|"root"|"setlinkroot"|"stat"|"unlock"|"who")) | "hwapi_hgcsp" | "hwstat" | @@ -1218,11 +1931,7 @@ PHP_LineCommentBegin = ("//"|[#]) "inet_ntop" | "inet_pton" | "info" | - "ini_alter" | - "ini_get" | - "ini_get_all" | - "ini_restore" | - "ini_set" | + ("ini_"("alter"|"get"|"get_all"|"restore"|"set")) | "insert" | "insert_before" | "insertanchor" | @@ -1253,6 +1962,7 @@ PHP_LineCommentBegin = ("//"|[#]) "jewishtojd" | "join" | "jpeg2wbmp" | + ("json_"("decode"|"encode"|"last_error"("_msg")?)) | "juliantojd" | "key" | "krsort" | @@ -1336,15 +2046,11 @@ PHP_LineCommentBegin = ("//"|[#]) "ngettext" | "nl2br" | "nl_langinfo" | - "node_name" | - "node_type" | - "node_value" | + ("node_"("name"|"type"|"value")) | "normalize" | "notations" | ("notes_"("body"|"copy_db"|"create_db"|"create_note"|"drop_db"|"find_note"|"header_info"|"list_msgs"|"mark_read"|"mark_unread"|"nav_create"|"search"|"unread"|"version")) | - "nsapi_request_headers" | - "nsapi_response_headers" | - "nsapi_virtual" | + ("nsapi_"("request_headers"|"response_headers"|"virtual")) | "number_format" | ("ob_"("clean"|"end_clean"|"end_flush"|"flush"|"get_clean"|"get_contents"|"get_flush"|"get_length"|"get_level"|"get_status"|"gzhandler"|"iconv_handler"|"implicit_flush"|"list_handlers"|"start"|"tidyhandler")) | "object" | @@ -1612,14 +2318,12 @@ PHP_LineCommentBegin = ("//"|[#]) "userlist" | "usleep" | "usort" | - "utf8_decode" | - "utf8_encode" | + "utf8_"("decode"|"encode") | "valid" | "validate" | "value" | "values" | - "var_dump" | - "var_export" | + "var_"("dump"|"export") | ("variant_"("abs"|"add"|"and"|"cast"|"cat"|"cmp"|"date_from_timestamp"|"date_to_timestamp"|"div"|"eqv"|"fix"|"get_type"|"idiv"|"imp"|"int"|"mod"|"mul"|"neg"|"not"|"or"|"pow"|"round"|"set"|"set_type"|"sub"|"xor")) | "version_compare" | "vfprintf" | @@ -1627,11 +2331,7 @@ PHP_LineCommentBegin = ("//"|[#]) ("vpopmail_"("add_alias_domain"|"add_alias_domain_ex"|"add_domain"|"add_domain_ex"|"add_user"|"alias_add"|"alias_del"|"alias_del_domain"|"alias_get"|"alias_get_all"|"auth_user"|"del_domain"|"del_domain_ex"|"del_user"|"error"|"passwd"|"set_user_quota")) | "vprintf" | "vsprintf" | - "w32api_deftype" | - "w32api_init_dtype" | - "w32api_invoke_function" | - "w32api_register_function" | - "w32api_set_call_method" | + ("w32api_"("deftype"|"init_dtype"|"invoke_function"|"register_function"|"set_call_method")) | "wddx_add_vars" | "wddx_deserialize" | "wddx_packet_end" | @@ -1662,6 +2362,9 @@ PHP_LineCommentBegin = ("//"|[#]) ("zip_"("close"|"entry_close"|"entry_compressedsize"|"entry_compressionmethod"|"entry_filesize"|"entry_name"|"entry_open"|"entry_read"|"open"|"read")) | "zlib_get_coding_type" | + /* mysql functions */ + ("mysql_"("affected_rows"|"client_encoding"|"close"|"connect"|"create_db"|"data_seek"|"db_"("name"|"query")|"drop_db"|"errno"|"error"|"escape_string"|"fetch_"("array"|"assoc"|"field"|"lengths"|"object"|"row")|"field_"("flags"|"len"|"name"|"seek"|"table"|"type")|"free_result"|"get_"("client_info"|"host_info"|"proto_info"|"server_info")|"info"|"insert_id"|"list_"("dbs"|"fields"|"processes"|"tables")|"num_"("fields"|"rows")|"pconnect"|"ping"|"query"|"real_escape_string"|"result"|"select_db"|"set_charset"|"stat"|"tablename"|"thread_id"|"unbuffered_query")) | + /* Function aliases */ "apache_request_headers" | "apache_response_headers" | @@ -1798,10 +2501,11 @@ PHP_LineCommentBegin = ("//"|[#]) ("velocis_"("autocommit"|"close"|"commit"|"connect"|"exec"|"fetch"|"fieldname"|"fieldnum"|"freeresult"|"off_autocommit"|"result"|"rollback")) | "virtual" { addToken(Token.FUNCTION); } - {BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {PHP_BooleanLiteral} { addToken(Token.LITERAL_BOOLEAN); } + {PHP_Null} { addToken(Token.RESERVED_WORD); } {PHP_Variable} { addToken(Token.VARIABLE); } - {LineTerminator} { addEndToken(INTERNAL_IN_PHP); return firstToken; } + {LineTerminator} { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } {JS_Identifier} { addToken(Token.IDENTIFIER); } {Whitespace} { addToken(Token.WHITESPACE); } @@ -1812,7 +2516,7 @@ PHP_LineCommentBegin = ("//"|[#]) /* Comment literals. */ "/**/" { addToken(Token.COMMENT_MULTILINE); } {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(PHP_MLC); } - {PHP_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addEndToken(INTERNAL_IN_PHP); return firstToken; } + {PHP_LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } /* Separators. */ {JS_Separator} { addToken(Token.SEPARATOR); } @@ -1830,7 +2534,7 @@ PHP_LineCommentBegin = ("//"|[#]) {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } /* Ended with a line not in a string or comment. */ - <> { addEndToken(INTERNAL_IN_PHP); return firstToken; } + <> { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } /* Catch any other (unhandled) characters and assume they are okay. */ . { addToken(Token.IDENTIFIER); } @@ -1840,30 +2544,31 @@ PHP_LineCommentBegin = ("//"|[#]) { // PHP MLC's. This state is essentially Java's MLC state. - [^\n\*]+ {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } {JS_MLCEnd} { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } } { [^\n\\\$\"]+ {} - \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_PHP_STRING); return firstToken; } + \n { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } \\.? { /* Skip escaped chars. */ } {PHP_Variable} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; } "$" {} \" { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_PHP_STRING); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } } { [^\n\\\']+ {} \\.? { /* Skip escaped single quotes only, but this should still work. */ } - \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_PHP_CHAR); return firstToken; } + \n { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } \' { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); } - <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_PHP_CHAR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } } - diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java old mode 100644 new mode 100755 index c708070ef..2d938ba1b --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PHPTokenMaker.java @@ -1,18289 +1,25956 @@ -/* The following code was generated by JFlex 1.4.1 on 10/6/09 5:56 PM */ +/* The following code was generated by JFlex 1.4.1 on 12/29/16 11:15 PM */ /* * 01/28/2009 * * PHPTokenMaker.java - Generates tokens for PHP syntax highlighting. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.io.Reader; +import java.util.Stack; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.HtmlOccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.OccurrenceMarker; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** * Scanner for PHP files. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                        - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                        - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                        + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                        + * * If you wish to regenerate this file yourself, keep in mind the following: *

                          - *
                        • The generated PHPTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                        • - *
                        • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                        • - *
                        • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                        • + *
                        • The generated PHPTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                        • + *
                        • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                        • + *
                        • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                        • *
                        - * + * * @author Robert Futrell - * @version 0.4 - * + * @version 0.9 */ public class PHPTokenMaker extends AbstractMarkupTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** lexical states */ - public static final int INTAG_CHECK_TAG_NAME = 4; - public static final int JS_MLC = 11; - public static final int INTAG_SCRIPT = 7; - public static final int PHP_MLC = 13; - public static final int INATTR_DOUBLE_SCRIPT = 8; - public static final int INATTR_SINGLE_SCRIPT = 9; - public static final int PHP_STRING = 14; - public static final int DTD = 2; - public static final int INATTR_SINGLE = 6; - public static final int INATTR_DOUBLE = 5; - public static final int YYINITIAL = 0; - public static final int PHP_CHAR = 15; - public static final int PHP = 12; - public static final int INTAG = 3; - public static final int COMMENT = 1; - public static final int JAVASCRIPT = 10; + /** lexical states */ + public static final int PHP = 19; + public static final int INATTR_SINGLE_SCRIPT = 9; + public static final int JS_CHAR = 14; + public static final int CSS_STRING = 26; + public static final int JS_DOCCOMMENT = 17; + public static final int JS_MLC = 16; + public static final int CSS_CHAR_LITERAL = 27; + public static final int INTAG_SCRIPT = 7; + public static final int JS_TEMPLATE_LITERAL_EXPR = 30; + public static final int CSS_PROPERTY = 24; + public static final int CSS_C_STYLE_COMMENT = 28; + public static final int PHP_MLC = 20; + public static final int CSS = 23; + public static final int CSS_VALUE = 25; + public static final int COMMENT = 1; + public static final int INATTR_DOUBLE_SCRIPT = 8; + public static final int PHP_STRING = 21; + public static final int JAVASCRIPT = 13; + public static final int INTAG = 3; + public static final int INTAG_CHECK_TAG_NAME = 4; + public static final int INATTR_SINGLE_STYLE = 12; + public static final int DTD = 2; + public static final int PHP_CHAR = 22; + public static final int JS_EOL_COMMENT = 18; + public static final int INATTR_DOUBLE_STYLE = 11; + public static final int INATTR_SINGLE = 6; + public static final int JS_TEMPLATE_LITERAL = 29; + public static final int YYINITIAL = 0; + public static final int INATTR_DOUBLE = 5; + public static final int JS_STRING = 15; + public static final int INTAG_STYLE = 10; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\4\1\2\1\0\1\1\1\36\22\0\1\4\1\56\1\27" + - "\1\37\1\41\1\55\1\5\1\26\2\52\1\42\1\54\1\53\1\50" + - "\1\51\1\10\1\22\1\35\1\122\1\126\1\124\1\105\1\123\1\24" + - "\1\127\1\21\1\60\1\6\1\3\1\7\1\17\1\57\1\0\1\71" + - "\1\23\1\12\1\76\1\47\1\45\1\100\1\104\1\14\1\106\1\101" + - "\1\44\1\75\1\73\1\72\1\15\1\102\1\13\1\11\1\16\1\77" + - "\1\103\1\20\1\43\1\74\1\20\1\52\1\25\1\52\1\55\1\40" + - "\1\0\1\62\1\34\1\65\1\111\1\61\1\46\1\115\1\70\1\66" + - "\1\125\1\107\1\63\1\116\1\33\1\110\1\67\1\121\1\31\1\64" + - "\1\32\1\30\1\114\1\112\1\117\1\113\1\120\1\52\1\55\1\52" + - "\1\60\uff81\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\2\1\0\1\1\1\33\22\0\1\4\1\51\1\7"+ + "\1\34\1\36\1\50\1\5\1\116\1\114\1\113\1\37\1\42\1\45"+ + "\1\31\1\43\1\10\1\25\1\137\1\132\1\136\1\134\1\126\1\133"+ + "\1\27\1\140\1\24\1\53\1\6\1\3\1\46\1\17\1\52\1\112"+ + "\1\110\1\26\1\12\1\41\1\22\1\107\1\121\1\125\1\14\1\127"+ + "\1\122\1\21\1\120\1\111\1\117\1\15\1\123\1\13\1\11\1\16"+ + "\1\106\1\124\1\23\1\40\1\20\1\23\1\115\1\35\1\115\1\47"+ + "\1\30\1\131\1\64\1\67\1\70\1\77\1\62\1\63\1\71\1\73"+ + "\1\56\1\135\1\76\1\65\1\57\1\72\1\74\1\100\1\104\1\61"+ + "\1\66\1\60\1\32\1\102\1\75\1\103\1\101\1\130\1\105\1\55"+ + "\1\44\1\54\uff81\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\2\1\1\0\2\1\6\0\2\2\1\3\1\4" + - "\1\5\1\6\1\1\1\7\2\1\1\10\1\11\2\12" + - "\1\13\1\14\1\15\1\16\1\17\1\20\1\21\1\22" + - "\2\20\2\22\1\20\2\22\4\20\1\22\5\20\1\22" + - "\1\20\1\1\1\23\1\1\1\24\2\2\1\14\1\25" + - "\1\26\1\27\1\30\1\31\1\32\1\33\2\13\1\2" + - "\2\13\2\2\1\13\2\34\1\35\1\36\5\2\1\32" + - "\1\2\1\13\1\2\1\37\1\13\14\2\1\1\1\40" + - "\1\1\1\41\2\13\1\42\1\43\5\2\1\44\3\2" + - "\1\13\24\2\1\45\2\1\1\46\1\47\1\50\2\1" + - "\1\51\1\52\1\53\1\4\1\54\1\55\1\56\1\54" + - "\1\6\1\0\32\20\1\22\11\20\1\22\5\20\1\22" + - "\30\20\1\57\2\0\1\60\1\61\1\32\1\2\1\13" + - "\1\62\1\34\1\63\1\62\1\63\1\62\1\64\1\62" + - "\2\65\1\35\1\65\1\36\1\66\40\2\2\67\7\2" + - "\1\67\4\2\1\70\1\71\44\2\1\72\20\2\1\73" + - "\22\2\1\67\66\2\1\74\15\2\1\67\16\2\1\74" + - "\3\2\1\67\53\2\1\75\1\47\1\76\1\52\1\77" + - "\2\0\1\54\1\100\14\20\1\22\63\20\2\0\1\32" + - "\1\2\1\63\1\0\2\64\1\35\1\101\2\65\1\35" + - "\3\36\41\2\1\6\30\2\1\67\37\2\1\74\103\2" + - "\1\67\11\2\1\74\11\2\1\74\5\2\1\74\11\2" + - "\1\74\13\2\1\74\13\2\1\74\47\2\1\74\10\2" + - "\1\74\60\2\1\74\15\2\1\74\33\2\1\74\16\2" + - "\1\67\4\2\1\74\32\2\1\74\10\2\1\74\23\2" + - "\1\102\1\0\1\54\17\20\1\22\14\20\1\22\6\20" + - "\1\0\1\103\1\32\1\2\1\35\1\36\1\104\1\66" + - "\1\36\1\2\1\105\6\2\1\6\40\2\1\74\7\2" + - "\1\74\31\2\1\74\4\2\1\74\1\2\1\74\37\2" + - "\1\74\13\2\1\74\6\2\1\74\11\2\1\67\4\2" + - "\1\74\7\2\1\74\21\2\1\74\1\2\1\74\22\2" + - "\1\74\2\2\1\74\34\2\1\74\73\2\1\74\33\2" + - "\1\74\156\2\2\74\55\2\1\74\47\2\1\74\24\2" + - "\1\56\1\54\11\20\1\22\12\20\1\0\1\32\1\2" + - "\1\35\1\36\2\2\1\67\2\2\1\67\75\2\1\74" + - "\41\2\2\74\13\2\2\74\2\2\1\74\14\2\1\67" + - "\136\2\1\74\5\2\1\74\44\2\1\67\1\2\1\67" + - "\1\74\6\2\1\74\1\2\1\67\44\2\1\74\14\2" + - "\1\67\237\2\1\74\22\2\1\74\14\2\1\74\136\2" + - "\1\74\12\2\1\74\22\2\1\54\12\20\1\0\1\32" + - "\1\35\1\36\14\2\1\74\2\2\1\74\7\2\1\74" + - "\1\2\1\74\1\2\1\74\123\2\2\74\2\2\1\74" + - "\43\2\1\74\131\2\1\74\51\2\1\74\15\2\1\74" + - "\52\2\1\74\1\67\13\2\1\67\110\2\2\74\32\2" + - "\1\74\17\2\1\74\100\2\1\74\1\2\1\74\10\2" + - "\1\74\227\2\1\106\3\20\1\0\15\2\1\74\3\2" + - "\1\67\63\2\1\74\5\2\1\74\6\2\1\74\135\2" + - "\1\74\135\2\1\74\16\2\1\74\125\2\1\74\46\2" + - "\1\74\271\2\1\74\25\2\2\74\22\2\1\74\1\2" + - "\2\74\3\2\1\74\105\2\1\20\1\0\6\2\1\74" + - "\60\2\1\67\61\2\1\74\41\2\1\74\351\2\1\74" + - "\16\2\1\74\4\2\1\74\45\2\1\74\60\2\1\74" + - "\110\2\1\74\32\2\1\74\117\2\1\20\1\107\125\2" + - "\1\74\226\2\1\74\2\2\1\74\13\2\1\74\5\2" + - "\1\74\14\2\1\74\1\2\1\74\113\2\1\74\13\2" + - "\1\74\13\2\1\74\43\2\2\74\13\2\1\74\131\2" + - "\1\74\16\2\1\74\5\2\1\74\74\2\1\74\76\2" + - "\2\74\74\2\1\74\213\2\1\74\107\2\1\74\11\2" + - "\1\74\14\2\1\74\231\2\1\74\61\2\1\74\10\2" + - "\1\74\72\2\1\74\105\2\1\74\10\2\1\74\17\2" + - "\1\74\70\2\1\74\40\2\1\74\72\2\1\74\252\2" + - "\1\74\105\2\1\74\50\2\1\74\33\2\1\74\10\2" + - "\1\74\1\2\1\74\6\2\1\74\4\2\1\74\4\2" + - "\1\74\57\2\1\74\36\2\1\74\76\2\1\74\100\2" + - "\1\74\107\2\1\74\21\2\1\74\21\2\1\74\47\2" + - "\1\74\11\2\1\74\34\2\1\74\103\2\1\74\16\2" + - "\1\74\3\2\1\74\1\2\1\74\11\2\1\74\16\2" + - "\1\74\102\2\1\74\13\2\1\74\42\2\1\74\5\2" + - "\1\74\12\2\1\74\57\2\1\74\177\2\1\74\4\2" + - "\1\74\147\2\1\74\27\2\1\74\3\2\1\74\1\2" + - "\1\74\124\2\1\74\5\2\1\74\5\2\1\74\65\2" + - "\1\74\11\2\1\74\171\2\1\74\171\2\1\74\32\2"; + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\2\1\1\0\2\1\1\0\2\1\14\0\1\2"+ + "\5\0\2\2\1\3\1\4\1\5\1\6\1\1\1\7"+ + "\5\1\1\10\1\11\3\12\1\13\1\14\1\15\1\16"+ + "\1\17\1\20\1\21\1\22\2\20\2\22\3\20\2\22"+ + "\3\20\1\22\5\20\1\22\1\1\1\23\1\24\1\1"+ + "\1\25\1\14\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\35\1\36\2\16\1\2\1\37\1\16\2\2"+ + "\1\16\2\40\1\16\1\2\1\35\2\16\1\2\1\41"+ + "\1\35\21\2\1\42\1\43\1\1\1\44\1\23\1\45"+ + "\1\46\1\1\1\47\1\23\1\50\1\51\1\1\1\52"+ + "\6\1\1\53\10\1\1\54\4\1\1\55\1\16\1\56"+ + "\1\16\3\2\1\57\1\2\1\16\32\2\1\35\1\60"+ + "\2\2\1\1\1\61\2\1\1\62\1\63\1\64\2\1"+ + "\1\65\1\66\1\67\1\70\1\71\1\70\1\72\1\70"+ + "\1\73\1\70\1\74\1\75\1\70\1\76\1\77\1\100"+ + "\2\77\1\101\1\77\1\102\1\103\1\104\1\105\1\104"+ + "\1\106\2\2\1\40\1\2\2\104\1\107\1\110\1\111"+ + "\1\112\1\113\1\114\1\115\2\1\1\116\1\117\1\120"+ + "\1\121\1\1\1\122\1\1\1\123\1\4\2\124\1\125"+ + "\1\126\1\6\5\0\1\127\32\20\2\22\2\20\1\22"+ + "\44\20\1\130\1\131\2\0\1\127\1\0\1\132\1\0"+ + "\1\133\1\16\1\35\1\2\1\16\1\134\1\40\1\134"+ + "\2\135\1\134\1\136\1\134\2\2\1\101\1\2\1\101"+ + "\45\2\1\101\5\2\1\137\1\140\1\141\1\142\1\143"+ + "\1\0\1\144\6\0\1\145\1\146\33\0\1\147\11\2"+ + "\1\150\1\151\105\2\1\101\102\2\1\101\23\2\1\152"+ + "\4\2\1\101\1\2\1\152\30\2\1\153\12\2\1\154"+ + "\1\64\1\155\1\66\1\0\1\156\1\150\15\0\1\157"+ + "\1\40\5\0\1\40\1\0\1\160\1\161\1\162\1\163"+ + "\2\124\2\0\1\164\4\0\1\12\14\20\1\22\63\20"+ + "\3\0\1\165\1\166\1\35\1\2\1\135\1\0\2\136"+ + "\4\2\1\73\23\2\1\167\34\2\71\0\14\2\1\101"+ + "\53\2\1\152\22\2\1\152\13\2\1\152\44\2\1\152"+ + "\3\2\1\152\27\2\1\101\16\2\1\152\2\2\1\152"+ + "\13\2\1\152\16\2\1\152\65\2\1\152\5\2\1\152"+ + "\11\2\1\152\61\2\1\152\1\2\1\152\44\2\1\152"+ + "\6\2\1\101\15\2\1\35\13\2\25\0\2\124\1\170"+ + "\3\0\1\171\1\12\21\20\1\22\17\20\1\22\1\20"+ + "\3\0\1\172\1\35\7\2\1\173\4\2\1\174\5\2"+ + "\1\73\17\2\2\0\1\1\4\0\1\175\2\0\1\176"+ + "\41\0\1\177\24\0\1\200\15\2\1\152\21\2\1\152"+ + "\77\2\1\152\3\2\1\152\16\2\1\152\22\2\1\152"+ + "\1\2\1\101\11\2\1\201\3\2\1\152\6\2\1\152"+ + "\3\2\1\152\15\2\1\152\16\2\1\152\4\2\1\152"+ + "\11\2\2\152\12\2\1\152\156\2\1\152\11\2\2\152"+ + "\122\2\2\152\24\2\1\152\63\2\1\35\12\2\17\0"+ + "\1\101\4\0\2\124\1\126\2\0\1\127\17\20\1\22"+ + "\4\20\1\130\1\0\1\127\1\35\5\2\1\101\3\2"+ + "\1\101\12\2\1\137\1\143\17\0\1\177\23\0\1\177"+ + "\12\0\56\2\1\152\53\2\1\152\44\2\1\152\41\2"+ + "\1\152\2\2\3\152\6\2\1\101\135\2\1\152\35\2"+ + "\1\152\13\2\1\152\13\2\1\101\1\152\1\101\6\2"+ + "\1\152\1\101\251\2\1\152\17\2\1\152\23\2\1\101"+ + "\102\2\1\152\13\2\1\152\2\2\1\35\14\2\16\0"+ + "\1\124\1\202\12\20\1\0\1\35\13\2\34\0\14\2"+ + "\1\152\41\2\1\152\2\2\1\152\31\2\1\152\106\2"+ + "\1\152\7\2\1\152\1\2\2\152\54\2\2\152\16\2"+ + "\1\152\26\2\1\152\130\2\1\152\163\2\2\152\31\2"+ + "\1\152\20\2\1\152\103\2\1\152\1\2\1\152\17\2"+ + "\1\152\1\2\1\101\13\2\1\101\131\2\1\35\12\2"+ + "\12\0\1\203\3\20\1\0\6\2\2\0\1\177\1\0"+ + "\1\177\14\0\35\2\1\152\105\2\1\152\10\2\1\101"+ + "\17\2\1\152\113\2\1\152\23\2\2\152\4\2\1\152"+ + "\134\2\1\152\133\2\1\152\10\2\1\152\1\2\1\152"+ + "\2\2\1\152\34\2\1\152\1\2\1\152\6\2\1\152"+ + "\331\2\1\152\42\2\1\35\11\2\6\0\1\20\1\0"+ + "\2\2\7\0\303\2\1\152\24\2\1\101\46\2\1\152"+ + "\50\2\1\152\141\2\1\152\14\2\1\152\60\2\1\152"+ + "\54\2\1\152\170\2\1\152\15\2\1\152\4\2\1\152"+ + "\37\2\1\204\4\0\1\20\1\205\1\2\1\206\2\0"+ + "\1\207\12\2\1\152\14\2\1\152\1\2\1\152\12\2"+ + "\1\152\5\2\1\152\7\2\1\152\70\2\1\152\150\2"+ + "\1\152\174\2\1\152\15\2\1\152\57\2\2\152\12\2"+ + "\1\152\135\2\1\152\13\2\1\152\62\2\1\152\36\2"+ + "\1\152\17\2\4\0\263\2\2\152\72\2\1\152\134\2"+ + "\1\152\13\2\1\152\124\2\1\152\15\2\1\152\132\2"+ + "\1\152\5\2\3\0\1\210\13\2\1\152\21\2\1\152"+ + "\14\2\1\152\144\2\1\152\1\2\1\152\72\2\1\152"+ + "\122\2\1\152\153\2\1\152\24\2\1\152\120\2\1\152"+ + "\13\2\1\152\157\2\1\152\113\2\1\152\10\2\1\152"+ + "\2\2\1\152\4\2\1\152\55\2\1\152\25\2\1\152"+ + "\12\2\1\152\4\2\1\152\116\2\1\152\47\2\1\152"+ + "\104\2\1\152\51\2\1\152\21\2\1\152\32\2\1\152"+ + "\23\2\1\152\24\2\1\152\27\2\1\152\5\2\1\152"+ + "\7\2\1\152\13\2\1\152\75\2\1\152\16\2\1\152"+ + "\2\2\1\152\3\2\1\152\137\2\1\152\33\2\1\152"+ + "\13\2\1\152\10\2\1\152\151\2\1\152\107\2\1\152"+ + "\4\2\1\152\74\2\1\152\1\2\1\152\3\2\1\152"+ + "\25\2\1\152\110\2\1\152\54\2\1\152\7\2\1\152"+ + "\61\2\1\152\12\2\1\152\165\2\1\152\157\2\1\152"+ + "\33\2"; - private static int[] zzUnpackAction() { - int[] result = new int[7572]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } + private static int [] zzUnpackAction() { + int [] result = new int[8198]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\130\0\260\0\u0108\0\u0160\0\u01b8\0\u0210\0\u0268" + - "\0\u02c0\0\u0318\0\u0370\0\u03c8\0\u0420\0\u0478\0\u04d0\0\u0528" + - "\0\u0580\0\u05d8\0\u0630\0\u0688\0\u06e0\0\u0738\0\u0790\0\u0630" + - "\0\u07e8\0\u0840\0\u0630\0\u0630\0\u0898\0\u08f0\0\u0630\0\u0948" + - "\0\u0630\0\u0630\0\u0630\0\u09a0\0\u0630\0\u09f8\0\u0a50\0\u0aa8" + - "\0\u0b00\0\u0b58\0\u0bb0\0\u0c08\0\u0c60\0\u0cb8\0\u0d10\0\u0d68" + - "\0\u0dc0\0\u0e18\0\u0e70\0\u0ec8\0\u0f20\0\u0f78\0\u0fd0\0\u09a0" + - "\0\u1028\0\u1080\0\u0630\0\u10d8\0\u0630\0\u1130\0\u1188\0\u11e0" + - "\0\u0630\0\u0630\0\u0630\0\u0630\0\u0630\0\u1238\0\u0630\0\u1290" + - "\0\u12e8\0\u0630\0\u1340\0\u1398\0\u13f0\0\u1448\0\u14a0\0\u14f8" + - "\0\u1550\0\u15a8\0\u1600\0\u1658\0\u16b0\0\u1708\0\u1760\0\u17b8" + - "\0\u0630\0\u1810\0\u1868\0\u18c0\0\u0630\0\u1918\0\u1970\0\u19c8" + - "\0\u1a20\0\u1a78\0\u1ad0\0\u1b28\0\u1b80\0\u1bd8\0\u1c30\0\u1c88" + - "\0\u1ce0\0\u1d38\0\u1d90\0\u0630\0\u1de8\0\u0630\0\u1e40\0\u1e98" + - "\0\u0630\0\u0630\0\u1ef0\0\u1f48\0\u1fa0\0\u1ff8\0\u2050\0\u20a8" + - "\0\u2100\0\u2158\0\u21b0\0\u2208\0\u2260\0\u22b8\0\u2310\0\u2368" + - "\0\u23c0\0\u2418\0\u2470\0\u24c8\0\u2520\0\u2578\0\u25d0\0\u2628" + - "\0\u2680\0\u26d8\0\u2730\0\u2788\0\u27e0\0\u2838\0\u2890\0\u28e8" + - "\0\u0630\0\u2940\0\u2998\0\u0630\0\u29f0\0\u0630\0\u2a48\0\u2aa0" + - "\0\u0630\0\u2af8\0\u0630\0\u2b50\0\u2ba8\0\u2c00\0\u2c58\0\u2cb0" + - "\0\u0630\0\u2d08\0\u2d60\0\u2db8\0\u2e10\0\u2e68\0\u2ec0\0\u2f18" + - "\0\u2f70\0\u2fc8\0\u3020\0\u3078\0\u30d0\0\u3128\0\u3180\0\u31d8" + - "\0\u3230\0\u3288\0\u32e0\0\u3338\0\u3390\0\u33e8\0\u3440\0\u3498" + - "\0\u34f0\0\u3548\0\u35a0\0\u35f8\0\u3650\0\u36a8\0\u3700\0\u3758" + - "\0\u37b0\0\u3808\0\u3860\0\u38b8\0\u3910\0\u3968\0\u39c0\0\u3a18" + - "\0\u3a70\0\u3ac8\0\u3b20\0\u3b78\0\u3bd0\0\u3c28\0\u3c80\0\u3cd8" + - "\0\u3d30\0\u3d88\0\u3de0\0\u3e38\0\u3e90\0\u3ee8\0\u3f40\0\u3f98" + - "\0\u3ff0\0\u4048\0\u40a0\0\u40f8\0\u4150\0\u41a8\0\u4200\0\u4258" + - "\0\u42b0\0\u4308\0\u4360\0\u43b8\0\u4410\0\u0630\0\u1340\0\u4468" + - "\0\u44c0\0\u4518\0\u4570\0\u45c8\0\u4620\0\u4678\0\u4678\0\u4678" + - "\0\u46d0\0\u4728\0\u4780\0\u47d8\0\u4830\0\u4888\0\u48e0\0\u4938" + - "\0\u0630\0\u4990\0\u0630\0\u49e8\0\u4a40\0\u4a98\0\u4af0\0\u4b48" + - "\0\u4ba0\0\u4bf8\0\u4c50\0\u4ca8\0\u4d00\0\u4d58\0\u4db0\0\u4e08" + - "\0\u4e60\0\u4eb8\0\u4f10\0\u4f68\0\u4fc0\0\u5018\0\u5070\0\u50c8" + - "\0\u5120\0\u5178\0\u51d0\0\u5228\0\u5280\0\u52d8\0\u5330\0\u5388" + - "\0\u53e0\0\u5438\0\u5490\0\u54e8\0\u13f0\0\u5540\0\u5598\0\u55f0" + - "\0\u5648\0\u56a0\0\u56f8\0\u5750\0\u57a8\0\u5800\0\u5858\0\u58b0" + - "\0\u5908\0\u0630\0\u4518\0\u5960\0\u59b8\0\u5a10\0\u5a68\0\u5ac0" + - "\0\u5b18\0\u5b70\0\u5bc8\0\u5c20\0\u5c78\0\u5cd0\0\u5d28\0\u5d80" + - "\0\u5dd8\0\u5e30\0\u5e88\0\u5ee0\0\u5f38\0\u5f90\0\u5fe8\0\u6040" + - "\0\u6098\0\u60f0\0\u6148\0\u61a0\0\u61f8\0\u6250\0\u62a8\0\u6300" + - "\0\u6358\0\u63b0\0\u6408\0\u6460\0\u64b8\0\u6510\0\u6568\0\u65c0" + - "\0\u6618\0\u6670\0\u66c8\0\u6720\0\u6778\0\u67d0\0\u6828\0\u6880" + - "\0\u68d8\0\u6930\0\u6988\0\u69e0\0\u6a38\0\u6a90\0\u6ae8\0\u6b40" + - "\0\u0630\0\u6b98\0\u6bf0\0\u6c48\0\u6ca0\0\u6cf8\0\u6d50\0\u6da8" + - "\0\u6e00\0\u6e58\0\u6eb0\0\u6f08\0\u6f60\0\u6fb8\0\u7010\0\u7068" + - "\0\u70c0\0\u7118\0\u7170\0\u71c8\0\u7220\0\u7278\0\u72d0\0\u7328" + - "\0\u7380\0\u73d8\0\u7430\0\u7488\0\u74e0\0\u7538\0\u7590\0\u75e8" + - "\0\u7640\0\u7698\0\u76f0\0\u7748\0\u77a0\0\u77f8\0\u7850\0\u78a8" + - "\0\u7900\0\u7958\0\u79b0\0\u7a08\0\u7a60\0\u7ab8\0\u7b10\0\u7b68" + - "\0\u7bc0\0\u7c18\0\u7c70\0\u7cc8\0\u7d20\0\u7d78\0\u7dd0\0\u7e28" + - "\0\u7e80\0\u7ed8\0\u7f30\0\u7f88\0\u7fe0\0\u8038\0\u8090\0\u80e8" + - "\0\u8140\0\u8198\0\u81f0\0\u8248\0\u82a0\0\u82f8\0\u8350\0\u83a8" + - "\0\u8400\0\u8458\0\u84b0\0\u8508\0\u8560\0\u85b8\0\u8610\0\u8668" + - "\0\u86c0\0\u8718\0\u8770\0\u87c8\0\u8820\0\u8878\0\u88d0\0\u8928" + - "\0\u8980\0\u89d8\0\u8a30\0\u8a88\0\u8ae0\0\u8b38\0\u8b90\0\u8be8" + - "\0\u8c40\0\u8c98\0\u8cf0\0\u8d48\0\u8da0\0\u8df8\0\u8e50\0\u13f0" + - "\0\u8ea8\0\u8f00\0\u8f58\0\u8fb0\0\u9008\0\u9060\0\u90b8\0\u9110" + - "\0\u9168\0\u91c0\0\u9218\0\u9270\0\u92c8\0\u9320\0\u9378\0\u93d0" + - "\0\u9428\0\u9480\0\u94d8\0\u9530\0\u9588\0\u95e0\0\u9638\0\u9690" + - "\0\u96e8\0\u9740\0\u9798\0\u97f0\0\u9848\0\u98a0\0\u98f8\0\u9950" + - "\0\u99a8\0\u9a00\0\u9a58\0\u9ab0\0\u9b08\0\u9b60\0\u9bb8\0\u9c10" + - "\0\u9c68\0\u9cc0\0\u9d18\0\u9d70\0\u9dc8\0\u9e20\0\u9e78\0\u0630" + - "\0\u0630\0\u9ed0\0\u0630\0\u2b50\0\u9f28\0\u9f80\0\u9fd8\0\u0630" + - "\0\ua030\0\ua088\0\ua0e0\0\ua138\0\ua190\0\ua1e8\0\ua240\0\ua298" + - "\0\ua2f0\0\ua348\0\ua3a0\0\ua3f8\0\ua450\0\ua4a8\0\ua500\0\ua558" + - "\0\ua5b0\0\ua608\0\ua660\0\ua6b8\0\ua710\0\ua768\0\ua7c0\0\ua818" + - "\0\ua870\0\u39c0\0\ua8c8\0\ua920\0\ua978\0\ua9d0\0\uaa28\0\uaa80" + - "\0\uaad8\0\uab30\0\uab88\0\uabe0\0\uac38\0\uac90\0\uace8\0\uad40" + - "\0\uad98\0\uadf0\0\uae48\0\uaea0\0\uaef8\0\uaf50\0\uafa8\0\ub000" + - "\0\ub058\0\ub0b0\0\ub108\0\u0c60\0\ub160\0\ub1b8\0\ub210\0\ub268" + - "\0\ub2c0\0\ub318\0\ub370\0\ub3c8\0\ub420\0\ub478\0\ub4d0\0\ub528" + - "\0\ub580\0\ub5d8\0\ub630\0\ub688\0\ub6e0\0\ub738\0\u4678\0\ub790" + - "\0\ub7e8\0\u0630\0\ub840\0\ub898\0\ub8f0\0\ub948\0\ub9a0\0\ub9f8" + - "\0\uba50\0\ubaa8\0\ubb00\0\ubb58\0\ubbb0\0\ubc08\0\ubc60\0\ubcb8" + - "\0\ubd10\0\ubd68\0\ubdc0\0\ube18\0\ube70\0\ubec8\0\ubf20\0\ubf78" + - "\0\ubfd0\0\uc028\0\uc080\0\uc0d8\0\uc130\0\uc188\0\uc1e0\0\uc238" + - "\0\uc290\0\uc2e8\0\uc340\0\uc398\0\uc3f0\0\uc448\0\uc4a0\0\uc4f8" + - "\0\uc550\0\uc5a8\0\uc600\0\uc658\0\uc6b0\0\uc708\0\uc760\0\uc7b8" + - "\0\uc810\0\uc868\0\uc8c0\0\uc918\0\uc970\0\uc9c8\0\uca20\0\uca78" + - "\0\ucad0\0\ucb28\0\ucb80\0\ucbd8\0\ucc30\0\ucc88\0\ucce0\0\ucd38" + - "\0\ucd90\0\ucde8\0\uce40\0\uce98\0\ucef0\0\ucf48\0\ucfa0\0\ucff8" + - "\0\ud050\0\ud0a8\0\ud100\0\ud158\0\ud1b0\0\ud208\0\ud260\0\ud2b8" + - "\0\ud310\0\ud368\0\ud3c0\0\ud418\0\ud470\0\ud4c8\0\ud520\0\ud578" + - "\0\ud5d0\0\ud628\0\ud680\0\ud6d8\0\ud730\0\ud788\0\ud7e0\0\ud838" + - "\0\ud890\0\ud8e8\0\ud940\0\ud998\0\ud9f0\0\uda48\0\udaa0\0\udaf8" + - "\0\udb50\0\udba8\0\udc00\0\udc58\0\udcb0\0\udd08\0\udd60\0\uddb8" + - "\0\ude10\0\ude68\0\udec0\0\udf18\0\udf70\0\udfc8\0\ue020\0\ue078" + - "\0\ue0d0\0\ue128\0\ue180\0\ue1d8\0\ue230\0\ue288\0\ue2e0\0\ue338" + - "\0\ue390\0\ue3e8\0\ue440\0\ue498\0\ue4f0\0\ue548\0\ue5a0\0\ue5f8" + - "\0\ue650\0\ue6a8\0\ue700\0\ue758\0\ue7b0\0\ue808\0\ue860\0\ue8b8" + - "\0\ue910\0\ue968\0\ue9c0\0\uea18\0\uea70\0\ueac8\0\ueb20\0\ueb78" + - "\0\uebd0\0\uec28\0\uec80\0\uecd8\0\ued30\0\ued88\0\uede0\0\uee38" + - "\0\uee90\0\ueee8\0\uef40\0\uef98\0\ueff0\0\uf048\0\uf0a0\0\uf0f8" + - "\0\uf150\0\uf1a8\0\uf200\0\uf258\0\uf2b0\0\uf308\0\uf360\0\uf3b8" + - "\0\uf410\0\uf468\0\uf4c0\0\ud940\0\uf518\0\uf570\0\uf5c8\0\uf620" + - "\0\uf678\0\uf6d0\0\uf728\0\uf780\0\uf7d8\0\uf830\0\uf888\0\uf8e0" + - "\0\uc1e0\0\uf938\0\uf990\0\uf9e8\0\ufa40\0\ufa98\0\ufaf0\0\ufb48" + - "\0\ufba0\0\ufbf8\0\ufc50\0\ufca8\0\ufd00\0\ufd58\0\ufdb0\0\ufe08" + - "\0\ufe60\0\ufeb8\0\uff10\0\uff68\0\uffc0\1\30\1\160\1\310" + - "\1\u0120\1\u0178\1\u01d0\1\u0228\1\u0280\1\u02d8\1\u0330\1\u0388" + - "\1\u03e0\1\u0438\1\u0490\1\u04e8\1\u0540\1\u0598\1\u05f0\1\u0648" + - "\1\u06a0\1\u06f8\1\u0750\1\u07a8\1\u0800\1\u0858\1\u08b0\1\u0908" + - "\1\u0960\1\u09b8\1\u0a10\1\u0a68\1\u0ac0\1\u0b18\1\u0b70\1\u0bc8" + - "\1\u0c20\1\u0c78\1\u0cd0\1\u0d28\1\u0d80\1\u0dd8\1\u0e30\1\u0e88" + - "\1\u0ee0\1\u0f38\1\u0f90\1\u0fe8\1\u1040\1\u1098\1\u10f0\1\u1148" + - "\1\u11a0\1\u11f8\1\u1250\1\u12a8\1\u1300\1\u1358\1\u13b0\1\u1408" + - "\1\u1460\1\u14b8\1\u1510\1\u1568\1\u15c0\1\u1618\1\u1670\1\u16c8" + - "\1\u1720\1\u1778\1\u17d0\1\u1828\1\u1880\1\u18d8\1\u1930\1\u1988" + - "\1\u19e0\1\u1a38\1\u1a90\1\u1ae8\1\u1b40\1\u1b98\1\u1bf0\1\u1c48" + - "\1\u1ca0\1\u1cf8\1\u1d50\1\u1da8\1\u1e00\1\u1e58\1\u1eb0\1\u1f08" + - "\1\u1f60\1\u1fb8\1\u2010\1\u2068\1\u20c0\1\u2118\1\u2170\1\u21c8" + - "\1\u2220\1\u2278\1\u22d0\1\u2328\1\u2380\1\u23d8\1\u2430\1\u2488" + - "\1\u24e0\1\u2538\1\u2590\1\u25e8\1\u2640\1\u2698\1\u26f0\1\u2748" + - "\1\u27a0\1\u27f8\1\u2850\1\u28a8\1\u2900\1\u2958\1\u29b0\1\u2a08" + - "\1\u2a60\1\u2ab8\1\u2b10\1\u2b68\1\u2bc0\1\u2c18\1\u2c70\1\u2cc8" + - "\1\u2d20\1\u2d78\1\u2dd0\1\u2e28\1\u2e80\1\u2ed8\1\u2f30\1\u2f88" + - "\1\u2fe0\1\u3038\1\u3090\1\u30e8\1\u3140\1\u3198\1\u31f0\1\u3248" + - "\1\u32a0\1\u32f8\1\u3350\1\u33a8\1\u3400\1\u3458\0\ud998\1\u34b0" + - "\1\u3508\1\u3560\1\u35b8\1\u3610\1\u3668\1\u36c0\1\u3718\1\u3770" + - "\1\u37c8\1\u3820\1\u3878\1\u38d0\1\u3928\1\u3980\1\u39d8\1\u3a30" + - "\1\u3a88\1\u3ae0\1\u3b38\1\u3b90\1\u3be8\1\u3c40\1\u3c98\1\u3cf0" + - "\1\u3d48\1\u3da0\1\u3df8\1\u3e50\1\u3ea8\1\u3f00\1\u3f58\1\u3fb0" + - "\1\u4008\1\u4060\1\u40b8\1\u4110\1\u4168\1\u41c0\1\u4218\1\u4270" + - "\1\u42c8\1\u4320\1\u4378\1\u43d0\1\u4428\1\u4480\1\u44d8\1\u4530" + - "\1\u4588\1\u45e0\1\u4638\1\u4690\1\u46e8\1\u4740\1\u4798\1\u47f0" + - "\1\u4848\1\u48a0\1\u48f8\1\u4950\1\u49a8\1\u4a00\1\u4a58\1\u4ab0" + - "\1\u4b08\1\u4b60\1\u4bb8\1\u4c10\1\u4c68\1\u4cc0\1\u4d18\1\u4d70" + - "\1\u4dc8\1\u4e20\0\u0630\1\u4e78\1\u4ed0\1\u4f28\1\u4f80\1\u4fd8" + - "\1\u5030\1\u5088\1\u50e0\1\u5138\1\u5190\1\u51e8\1\u5240\1\u5298" + - "\1\u52f0\1\u5348\1\u53a0\1\u53f8\1\u5450\1\u54a8\1\u5500\0\u3bd0" + - "\1\u5558\1\u55b0\1\u5608\1\u5660\1\u56b8\1\u5710\1\u5768\1\u57c0" + - "\1\u5818\0\uac90\1\u5870\1\u58c8\1\u5920\1\u5978\1\u59d0\1\u5a28" + - "\1\u5a80\0\u0630\1\u5ad8\1\u5b30\1\u5b88\1\u5be0\0\u0630\0\ub948" + - "\1\u5c38\1\u5c90\0\u13f0\1\u5ce8\1\u5d40\1\u5d98\1\u5df0\1\u5e48" + - "\1\u5ea0\0\u13f0\1\u5ef8\1\u5f50\1\u5fa8\1\u6000\1\u6058\1\u60b0" + - "\1\u6108\1\u6160\1\u61b8\1\u6210\1\u6268\1\u62c0\1\u6318\1\u6370" + - "\1\u63c8\1\u6420\1\u6478\1\u64d0\1\u6528\1\u6580\1\u65d8\1\u6630" + - "\1\u6688\1\u66e0\1\u6738\1\u6790\1\u67e8\1\u6840\1\u6898\1\u68f0" + - "\1\u6948\1\u69a0\1\u69f8\1\u6a50\1\u6aa8\1\u6b00\1\u6b58\1\u6bb0" + - "\1\u6c08\1\u6c60\1\u6cb8\1\u6d10\1\u6d68\1\u6dc0\1\u6e18\1\u6e70" + - "\1\u6ec8\1\u6f20\1\u6f78\1\u6fd0\1\u7028\1\u7080\1\u70d8\1\u7130" + - "\1\u7188\1\u71e0\1\u7238\1\u7290\1\u72e8\1\u7340\1\u7398\1\u73f0" + - "\1\u7448\1\u74a0\1\u74f8\1\u7550\1\u75a8\1\u7600\1\u7658\1\u76b0" + - "\1\u7708\1\u7760\1\u77b8\1\u7810\1\u7868\1\u78c0\1\u7918\1\u7970" + - "\1\u79c8\1\u7a20\1\u7a78\1\u7ad0\1\u7b28\1\u7b80\1\u7bd8\1\u7c30" + - "\1\u7c88\1\u7ce0\1\u7d38\1\u7d90\1\u7de8\1\u7e40\1\u7e98\1\u7ef0" + - "\1\u7f48\1\u7fa0\1\u7ff8\1\u8050\1\u80a8\1\u8100\1\u8158\1\u81b0" + - "\1\u8208\1\u8260\1\u82b8\1\u8310\1\u8368\1\u83c0\1\u8418\1\u8470" + - "\1\u84c8\1\u8520\1\u8578\1\u85d0\1\u8628\1\u8680\1\u86d8\1\u8730" + - "\1\u8788\1\u87e0\1\u8838\1\u8890\1\u88e8\1\u8940\1\u8998\1\u89f0" + - "\1\u8a48\1\u8aa0\1\u8af8\1\u8b50\1\u8ba8\1\u8c00\1\u8c58\1\u8cb0" + - "\1\u8d08\1\u8d60\1\u8db8\1\u8e10\1\u8e68\1\u8ec0\1\u8f18\1\u8f70" + - "\1\u8fc8\1\u9020\1\u9078\1\u90d0\1\u9128\1\u9180\1\u91d8\1\u9230" + - "\1\u9288\1\u92e0\1\u9338\1\u9390\1\u93e8\1\u9440\1\u9498\1\u94f0" + - "\1\u9548\1\u95a0\1\u95f8\1\u9650\1\u96a8\1\u9700\1\u9758\1\u3be8" + - "\1\u97b0\1\u9808\1\u9860\1\u98b8\1\u9910\1\u9968\1\u99c0\1\u9a18" + - "\1\u9a70\1\u9ac8\1\u9b20\1\u9b78\1\u9bd0\1\u9c28\1\u9c80\1\u9cd8" + - "\1\u9d30\1\u9d88\1\u9de0\1\u9e38\1\u6108\1\u9e90\1\u9ee8\1\u9f40" + - "\1\u9f98\1\u9ff0\1\ua048\1\ua0a0\1\ua0f8\1\ua150\1\ua1a8\1\ua200" + - "\1\ua258\1\ua2b0\1\ua308\1\ua360\1\ua3b8\1\ua410\1\ua468\1\ua4c0" + - "\1\ua518\1\ua570\1\ua5c8\1\ua620\1\ua678\1\ua6d0\1\ua728\1\ua780" + - "\1\ua7d8\1\ua830\1\ua888\1\ua8e0\1\ua938\1\ua990\1\ua9e8\1\uaa40" + - "\1\uaa98\1\uaaf0\1\uab48\1\uaba0\1\uabf8\1\uac50\1\uaca8\1\uad00" + - "\1\uad58\1\uadb0\1\uae08\1\uae60\1\uaeb8\1\uaf10\1\uaf68\1\uafc0" + - "\1\ub018\1\ub070\1\ub0c8\1\ub120\1\ub178\1\ub1d0\1\ub228\1\ub280" + - "\1\ub2d8\1\ub330\1\ub388\1\ub3e0\1\ub438\1\ub490\1\ub4e8\1\ub540" + - "\1\ub598\1\ub5f0\1\ub648\1\ub6a0\1\ub6f8\1\ub750\1\ub7a8\1\ub800" + - "\1\ub858\1\ub8b0\1\ub908\1\ub960\1\ub9b8\1\uba10\1\uba68\1\ubac0" + - "\1\ubb18\1\ubb70\1\ubbc8\1\ubc20\1\ubc78\1\ubcd0\1\ubd28\1\ubd80" + - "\1\ub908\1\ubdd8\1\ube30\1\ube88\1\ubee0\1\ubf38\1\ubf90\1\ubfe8" + - "\1\uc040\1\uc098\1\uc0f0\1\uc148\1\uc1a0\1\uc1f8\1\uc250\1\uc2a8" + - "\1\uc300\1\uc358\1\uc3b0\1\uc408\1\uc460\1\uc4b8\1\uc510\1\uc568" + - "\1\uc5c0\1\uc618\1\uc670\1\uc6c8\1\uc720\1\uc778\1\uc7d0\1\uc828" + - "\1\uc880\1\uc8d8\1\uc930\1\uc988\1\uc9e0\1\uca38\1\uca90\1\ucae8" + - "\1\ucb40\1\ucb98\1\ucbf0\1\ucc48\1\ucca0\1\uccf8\1\ucd50\1\ucda8" + - "\1\uce00\1\uce58\1\uceb0\1\ucf08\1\ucf60\1\ucfb8\1\ud010\1\ud068" + - "\1\ud0c0\1\ud118\1\ud170\1\ud1c8\1\ud220\1\ud278\1\ud2d0\1\ud328" + - "\1\ud380\1\ud3d8\1\ud430\1\ud488\1\ud4e0\1\ud538\1\ud590\1\ud5e8" + - "\1\ud640\1\ud698\1\ud6f0\1\u1250\1\ud748\1\ud7a0\1\ud7f8\1\ud850" + - "\1\ud8a8\1\ud900\1\ud958\1\ud9b0\1\uda08\1\uda60\1\udab8\1\udb10" + - "\1\udb68\1\udbc0\1\udc18\1\udc70\1\udcc8\1\udd20\1\udd78\1\uddd0" + - "\1\ude28\1\ude80\1\uded8\1\udf30\1\udf88\1\udfe0\1\ue038\1\ue090" + - "\1\ue0e8\1\ue140\1\ue198\1\ue1f0\1\ue248\1\ue2a0\1\ue2f8\1\ue350" + - "\1\ue3a8\1\ue400\1\ue458\1\ue4b0\1\ue508\1\ue560\1\ue5b8\1\ue610" + - "\1\ue668\1\ue6c0\1\ue718\1\ue770\1\ue7c8\1\ue820\1\ue878\1\ue8d0" + - "\1\ue928\1\ue980\1\ue9d8\1\uea30\1\uea88\1\ueae0\1\ueb38\1\ueb90" + - "\1\uebe8\1\uec40\1\uec98\1\uecf0\1\ued48\1\ueda0\1\uedf8\1\uee50" + - "\1\ueea8\1\uef00\1\uef58\1\uefb0\1\uf008\1\uf060\1\uf0b8\1\uf110" + - "\1\uf168\1\uf1c0\1\uf218\1\uf270\1\uf2c8\1\uf320\1\uf378\1\uf3d0" + - "\1\uf428\1\uf480\1\uf4d8\1\uf530\1\uf588\1\uf5e0\1\uf638\1\uf690" + - "\1\uf6e8\1\uf740\1\uf798\1\uf7f0\1\uf848\1\uf8a0\1\uf8f8\1\uf950" + - "\1\uf9a8\1\ufa00\1\ufa58\1\ufab0\1\ufb08\1\ufb60\1\ufbb8\1\ufc10" + - "\1\ufc68\1\ufcc0\0\u6e58\1\ufd18\1\ufd70\1\ufdc8\1\ufe20\1\ufe78" + - "\1\ufed0\1\uff28\1\uff80\1\uffd8\2\60\2\210\2\340\2\u0138" + - "\2\u0190\2\u01e8\2\u0240\2\u0298\2\u02f0\2\u0348\2\u03a0\2\u03f8" + - "\2\u0450\2\u04a8\2\u0500\2\u0558\2\u05b0\2\u0608\2\u0660\2\u06b8" + - "\2\u0710\2\u0768\2\u07c0\2\u0818\2\u0870\2\u08c8\2\u0920\2\u0978" + - "\2\u09d0\2\u0a28\2\u0a80\2\u0ad8\2\u0b30\2\u0b88\2\u0be0\2\u0c38" + - "\2\u0c90\2\u0ce8\2\u0d40\2\u0d98\2\u0df0\2\u0e48\2\u0ea0\2\u0ef8" + - "\2\u0f50\2\u0fa8\2\u1000\2\u1058\2\u10b0\2\u1108\2\u1160\0\u0630" + - "\2\u11b8\2\u1210\2\u1268\2\u12c0\2\u1318\2\u1370\2\u13c8\2\u1420" + - "\2\u1478\2\u14d0\2\u1528\2\u1528\2\u1580\2\u15d8\2\u1630\2\u1688" + - "\2\u16e0\2\u1738\2\u1790\2\u17e8\2\u1840\2\u1898\2\u18f0\2\u1948" + - "\2\u19a0\2\u19f8\2\u1a50\2\u1aa8\0\ubc08\2\u1b00\2\u1b58\2\u1bb0" + - "\2\u1c08\2\u1c60\2\u1cb8\2\u1d10\2\u1d68\2\u1dc0\2\u1e18\2\u1e70" + - "\2\u1ec8\2\u1f20\2\u1f78\2\u1fd0\2\u2028\2\u2080\2\u20d8\2\u2130" + - "\2\u2188\2\u21e0\2\u2238\2\u2290\2\u22e8\2\u2340\2\u2398\2\u23f0" + - "\2\u2448\2\u24a0\2\u24f8\2\u2550\2\u25a8\2\u2600\2\u2658\2\u26b0" + - "\2\u2708\2\u2760\2\u27b8\2\u2810\2\u2868\2\u28c0\2\u2918\2\u2970" + - "\2\u29c8\2\u2a20\2\u2a78\2\u2ad0\2\u2b28\2\u2b80\2\u2bd8\2\u2c30" + - "\2\u2c88\2\u2ce0\2\u2d38\2\u2d90\2\u2de8\2\u2e40\2\u2e98\2\u2ef0" + - "\2\u2f48\2\u2fa0\2\u2ff8\2\u3050\2\u30a8\2\u3100\2\u3158\2\u31b0" + - "\2\u3208\2\u3260\2\u32b8\2\u3310\2\u3368\2\u33c0\2\u3418\2\u3470" + - "\2\u34c8\2\u3520\2\u3578\2\u35d0\2\u3628\2\u3680\2\u36d8\2\u3730" + - "\2\u3788\2\u37e0\2\u3838\2\u3890\2\u38e8\2\u3940\2\u3998\2\u39f0" + - "\2\u3a48\2\u3aa0\2\u3af8\2\u3b50\2\u3ba8\2\u3c00\2\u3c58\2\u3cb0" + - "\2\u3d08\2\u3d60\2\u3db8\2\u3e10\2\u3e68\2\u3ec0\2\u3f18\2\u3f70" + - "\2\u3fc8\2\u4020\2\u4078\2\u40d0\2\u4128\2\u4078\2\u4180\2\u41d8" + - "\2\u4230\2\u4288\2\u42e0\2\u4338\2\u4390\2\u43e8\2\u4440\2\u4498" + - "\2\u44f0\2\u4548\2\u45a0\2\u45f8\2\u4650\2\u46a8\2\u4700\2\u4758" + - "\2\u47b0\2\u4808\2\u4860\2\u48b8\2\u4910\2\u4968\2\u49c0\2\u4a18" + - "\2\u4a70\2\u4ac8\2\u4b20\2\u4b78\2\u4bd0\2\u4c28\2\u4c80\2\u4cd8" + - "\2\u4d30\2\u4d88\2\u4de0\2\u4e38\2\u4e90\2\u4ee8\2\u4f40\2\u4f98" + - "\2\u4ff0\2\u5048\2\u50a0\2\u50f8\2\u5150\2\u51a8\2\u5200\2\u5258" + - "\2\u52b0\2\u5308\2\u5360\2\u53b8\2\u5410\2\u5468\2\u54c0\2\u5518" + - "\2\u5570\2\u55c8\2\u5620\2\u5678\2\u56d0\2\u5728\2\u5780\2\u57d8" + - "\2\u5830\2\u5888\2\u4128\1\u8310\2\u58e0\2\u5938\2\u5990\2\u59e8" + - "\2\u5a40\2\u5a98\2\u5af0\2\u5b48\2\u5ba0\2\u5bf8\2\u5c50\2\u5ca8" + - "\2\u5d00\2\u5d58\2\u5db0\2\u5e08\2\u5e60\2\u5eb8\2\u5f10\2\u5f68" + - "\2\u5fc0\2\u6018\2\u6070\2\u60c8\2\u6120\2\u6178\2\u61d0\2\u6228" + - "\2\u6280\2\u62d8\2\u6330\2\u6388\2\u63e0\2\u6438\2\u6490\2\u64e8" + - "\2\u6540\2\u6598\2\u65f0\2\u6648\2\u66a0\2\u66f8\2\u6750\2\u67a8" + - "\2\u6800\2\u6858\2\u68b0\2\u6908\2\u6960\2\u69b8\2\u6a10\2\u6a68" + - "\2\u6ac0\2\u6b18\2\u6b70\2\u6bc8\2\u6c20\2\u6c78\2\u6cd0\2\u6d28" + - "\2\u6d80\2\u6dd8\2\u6e30\2\u6e88\2\u6ee0\2\u6f38\2\u6f90\2\u6fe8" + - "\2\u7040\2\u7098\2\u70f0\2\u7148\2\u71a0\2\u71f8\2\u7250\2\u72a8" + - "\2\u7300\2\u7358\2\u73b0\2\u7408\2\u7460\2\u74b8\2\u7510\2\u7568" + - "\2\u75c0\2\u7618\2\u7670\2\u76c8\2\u7720\2\u7778\2\u77d0\2\u7828" + - "\2\u7880\2\u78d8\2\u7930\2\u7988\2\u79e0\2\u7a38\2\u7a90\2\u7ae8" + - "\2\u7b40\2\u7b98\2\u7bf0\2\u7c48\2\u7ca0\2\u7cf8\2\u7d50\2\u7da8" + - "\2\u7e00\2\u7e58\2\u7eb0\2\u7f08\2\u7f60\2\u7fb8\2\u8010\2\u8068" + - "\2\u80c0\2\u8118\0\u84b0\2\u8170\2\u81c8\2\u8220\2\u8278\2\u82d0" + - "\2\u8328\2\u8380\2\u83d8\2\u8430\2\u8488\2\u84e0\2\u8538\2\u8590" + - "\2\u85e8\2\u8640\2\u8698\2\u86f0\2\u8748\2\u87a0\2\u87f8\2\u8850" + - "\2\u88a8\2\u8900\2\u8958\2\u89b0\2\u8a08\2\u8a60\2\u8ab8\2\u8b10" + - "\2\u8b68\2\u8bc0\2\u8c18\2\u8c70\2\u8cc8\2\u8d20\2\u8d78\2\u8dd0" + - "\2\u8e28\2\u8e80\2\u8ed8\2\u8f30\2\u8f88\2\u8fe0\2\u9038\2\u9090" + - "\2\u90e8\2\u9140\2\u9198\2\u91f0\2\u9248\2\u92a0\2\u92f8\2\u9350" + - "\2\u93a8\2\u9400\2\u9458\2\u94b0\2\u9508\2\u9560\2\u95b8\2\u9610" + - "\2\u9668\2\u96c0\2\u9718\2\u9770\2\u97c8\2\u9820\2\u9878\2\u98d0" + - "\2\u9928\2\u9980\2\u99d8\2\u9a30\2\u9a88\2\u9ae0\2\u9b38\2\u9b90" + - "\2\u9be8\2\u9c40\2\u9c98\2\u9cf0\2\u9d48\2\u9da0\2\u9df8\2\u9e50" + - "\2\u9ea8\2\u9f00\2\u9f58\2\u9fb0\2\ua008\2\ua060\2\ua0b8\2\ua110" + - "\2\ua168\2\ua1c0\2\ua218\2\ua270\2\ua2c8\2\ua320\2\ua378\2\ua3d0" + - "\2\ua428\2\ua480\2\ua4d8\2\ua530\2\ua588\2\ua5e0\2\ua638\2\ua690" + - "\2\ua6e8\2\ua740\2\ua798\2\ua7f0\2\ua848\2\ua8a0\2\ua8f8\2\ua950" + - "\2\ua9a8\2\uaa00\2\uaa58\2\uaab0\2\uab08\2\uab60\2\uabb8\2\uac10" + - "\2\uac68\2\uacc0\2\uad18\2\uad70\2\uadc8\2\uae20\2\uae78\2\uaed0" + - "\2\uaf28\2\uaf80\2\uafd8\2\ub030\2\ub088\2\ub0e0\2\ub138\2\ub190" + - "\2\ub1e8\2\ub240\2\ub298\2\ub2f0\2\ub348\2\ub3a0\2\ub3f8\2\ub450" + - "\2\ub4a8\2\ub500\2\ub558\2\ub5b0\2\ub608\2\ub660\2\ub6b8\2\ub710" + - "\2\ub768\2\ub7c0\2\ub818\2\ub870\2\ub8c8\2\ub920\2\ub978\2\ub9d0" + - "\2\uba28\2\uba80\2\ubad8\2\ubb30\2\ubb88\2\ubbe0\2\ubc38\2\ubc90" + - "\2\ubce8\2\ubd40\2\ubd98\2\ubdf0\2\ube48\2\ubea0\2\ubef8\2\ubf50" + - "\2\ubfa8\2\uc000\2\uc058\2\uc0b0\2\uc108\2\uc160\2\uc1b8\2\uc210" + - "\2\uc268\2\uc2c0\2\uc318\2\uc370\2\uc3c8\2\uc420\2\uc478\2\uc4d0" + - "\2\uc528\2\uc580\2\uc5d8\2\uc630\2\uc688\2\uc6e0\2\uc738\2\uc790" + - "\2\uc7e8\2\uc840\2\uc898\2\uc8f0\2\uc948\2\uc9a0\2\uc9f8\2\uca50" + - "\2\ucaa8\2\ucb00\2\ucb58\2\ucbb0\2\ucc08\1\u3cf0\2\ucc60\2\uccb8" + - "\2\ucd10\2\ucd68\2\ucdc0\2\uce18\2\uce70\2\ucec8\2\ucf20\2\ucf78" + - "\2\ucfd0\2\ud028\2\ud080\2\ud0d8\2\ud130\2\ud188\2\ud1e0\2\ud238" + - "\2\ud290\2\ud2e8\2\ud340\2\ud398\2\ud3f0\2\ud448\2\ud4a0\2\ud4f8" + - "\2\ud550\2\ud5a8\2\ud600\2\ud658\2\ud6b0\2\ud708\2\ud760\2\ud7b8" + - "\2\ud810\2\ud868\2\ud8c0\2\ud918\2\ud970\2\ud9c8\2\uda20\2\uda78" + - "\2\udad0\2\udb28\2\udb80\2\udbd8\2\udc30\2\udc88\2\udce0\2\udd38" + - "\2\udd90\2\udde8\2\ude40\2\ude98\2\udef0\2\udf48\2\udfa0\2\udff8" + - "\2\ue050\2\ue0a8\2\ue100\2\ue158\2\ue1b0\2\ue208\2\ue260\2\ue2b8" + - "\2\ue310\2\ue368\2\ue3c0\2\ue418\2\ue470\2\ue4c8\2\ue520\2\ue578" + - "\2\ue5d0\2\ue628\2\ue680\2\ue6d8\2\ue730\2\ue788\2\ue7e0\2\ue838" + - "\2\ue890\2\ue8e8\2\ue940\2\ue998\2\ue9f0\2\uea48\2\ueaa0\2\ueaf8" + - "\2\ueb50\2\ueba8\2\uec00\2\uec58\2\uecb0\2\ued08\2\ued60\2\uedb8" + - "\2\uee10\2\uee68\2\ueec0\2\uef18\2\uef70\2\uefc8\2\uf020\2\uf078" + - "\2\uf0d0\2\uf128\2\uf180\2\uf1d8\2\uf230\2\uf288\2\uf2e0\2\uf338" + - "\2\uf390\2\uf3e8\2\uf440\2\uf498\2\uf4f0\2\uf548\2\uf5a0\2\uf5f8" + - "\2\uf650\2\uf6a8\2\uf700\2\uf758\2\uf7b0\2\uf808\2\uf860\2\uf8b8" + - "\2\uf910\2\uf968\2\uf9c0\2\ufa18\2\ufa70\2\ufac8\2\ufb20\2\ufb78" + - "\2\ufbd0\2\ufc28\2\ufc80\2\ufcd8\2\ufd30\2\ufd88\2\ufde0\2\ufe38" + - "\2\ufe90\2\ufee8\2\uff40\2\uff98\2\ufff0\3\110\3\240\3\370" + - "\3\u0150\3\u01a8\3\u0200\3\u0258\3\u02b0\3\u0308\3\u0360\3\u03b8" + - "\3\u0410\3\u0468\0\u5dd8\3\u04c0\3\u0518\3\u0570\3\u05c8\3\u0620" + - "\3\u0678\3\u06d0\3\u0728\3\u0780\3\u07d8\3\u0830\3\u0888\3\u08e0" + - "\3\u0938\3\u0990\3\u09e8\3\u0a40\3\u0a98\3\u0af0\3\u0b48\3\u0ba0" + - "\3\u0bf8\3\u0c50\3\u0ca8\3\u0d00\3\u0d58\3\u0db0\3\u0e08\3\u0e60" + - "\3\u0eb8\3\u0f10\3\u0f68\3\u0fc0\3\u1018\3\u1070\3\u10c8\3\u1120" + - "\3\u1178\3\u11d0\3\u1228\3\u1280\3\u12d8\3\u1330\3\u1388\3\u13e0" + - "\3\u1438\3\u1490\3\u14e8\3\u1540\3\u1598\3\u15f0\3\u1648\3\u16a0" + - "\3\u16f8\3\u1750\3\u17a8\3\u1800\3\u1858\3\u18b0\3\u1908\3\u1960" + - "\3\u19b8\3\u1a10\3\u1a68\3\u1ac0\3\u1b18\3\u1b70\3\u1bc8\3\u1c20" + - "\3\u1c78\3\u1cd0\3\u1d28\3\u1d80\3\u1dd8\3\u1e30\3\u1e88\3\u1ee0" + - "\3\u1f38\3\u1f90\3\u1fe8\3\u2040\3\u2098\3\u20f0\3\u2148\3\u21a0" + - "\3\u21f8\3\u2250\3\u22a8\3\u2300\3\u2358\3\u23b0\3\u2408\3\u2460" + - "\3\u24b8\3\u2510\3\u2568\3\u25c0\3\u2618\3\u2670\3\u26c8\3\u2720" + - "\3\u2778\3\u27d0\3\u2828\3\u2880\3\u28d8\3\u2930\3\u2988\3\u29e0" + - "\3\u2a38\3\u2a90\3\u2ae8\3\u2b40\3\u2b98\3\u2bf0\3\u2c48\3\u2ca0" + - "\3\u2cf8\3\u2d50\3\u2da8\3\u2e00\3\u2e58\3\u2eb0\3\u2f08\3\u2f60" + - "\3\u2fb8\3\u3010\3\u3068\3\u30c0\3\u3118\3\u3170\3\u31c8\3\u3220" + - "\3\u3278\3\u32d0\3\u3328\3\u3380\3\u33d8\3\u3430\3\u3488\3\u34e0" + - "\3\u3538\3\u3590\3\u35e8\3\u3640\3\u3698\3\u36f0\3\u3748\3\u37a0" + - "\3\u37f8\3\u3850\3\u38a8\3\u3900\3\u3958\3\u39b0\3\u3a08\3\u3a60" + - "\3\u3ab8\3\u3b10\3\u3b68\3\u3bc0\3\u3c18\3\u3c70\3\u3cc8\3\u3d20" + - "\3\u3d78\3\u3dd0\3\u3e28\3\u3e80\3\u3ed8\3\u3f30\3\u3f88\3\u3fe0" + - "\3\u4038\3\u4090\3\u40e8\3\u4140\3\u4198\3\u41f0\3\u4248\3\u42a0" + - "\3\u42f8\3\u4350\3\u43a8\3\u4400\3\u4458\3\u44b0\3\u4508\3\u4560" + - "\3\u45b8\3\u4610\3\u4668\3\u46c0\3\u4718\3\u4770\3\u47c8\3\u4820" + - "\3\u4878\3\u48d0\3\u4928\3\u4980\3\u49d8\3\u4a30\3\u4a88\3\u4ae0" + - "\3\u4b38\3\u4b90\3\u4be8\3\u4c40\3\u4c98\3\u4cf0\3\u4d48\3\u4da0" + - "\3\u4df8\3\u4e50\3\u4ea8\3\u4f00\3\u4f58\3\u4fb0\3\u5008\3\u5060" + - "\3\u50b8\3\u5110\3\u5168\3\u51c0\3\u5218\3\u5270\3\u52c8\3\u5320" + - "\3\u5378\3\u53d0\3\u5428\3\u5480\3\u54d8\3\u5530\3\u5588\3\u55e0" + - "\3\u5638\3\u5690\3\u56e8\3\u5740\3\u5798\3\u57f0\3\u5848\3\u58a0" + - "\3\u58f8\3\u5950\3\u59a8\3\u5a00\3\u5a58\3\u5ab0\3\u5b08\3\u5b60" + - "\3\u5bb8\3\u5c10\3\u5c68\3\u5cc0\3\u5d18\3\u5d70\3\u5dc8\3\u5e20" + - "\3\u5e78\3\u5ed0\3\u5f28\3\u5f80\3\u5fd8\3\u6030\3\u6088\3\u60e0" + - "\3\u6138\3\u6190\3\u61e8\3\u6240\3\u6298\3\u62f0\3\u6348\3\u63a0" + - "\3\u63f8\3\u6450\3\u64a8\3\u6500\3\u6558\3\u65b0\3\u6608\3\u6660" + - "\3\u66b8\3\u6710\3\u6768\3\u67c0\3\u6818\3\u6870\3\u68c8\3\u6920" + - "\3\u6978\3\u69d0\3\u6a28\3\u6a80\3\u6ad8\3\u6b30\3\u6b88\3\u6be0" + - "\3\u6c38\3\u6c90\3\u6ce8\3\u6d40\3\u6d98\3\u6df0\3\u6e48\3\u6ea0" + - "\3\u6ef8\3\u6f50\3\u6fa8\3\u7000\3\u7058\3\u70b0\3\u4ea8\3\u7108" + - "\3\u7160\3\u71b8\3\u7210\3\u7268\3\u72c0\3\u7318\3\u7370\3\u73c8" + - "\3\u7420\3\u7478\3\u74d0\3\u7528\3\u7580\3\u75d8\3\u7630\3\u7688" + - "\3\u76e0\3\u7738\3\u7790\3\u77e8\3\u7840\3\u7898\3\u78f0\3\u7948" + - "\3\u79a0\3\u79f8\3\u7a50\3\u7aa8\3\u7b00\3\u7b58\3\u7bb0\3\u7c08" + - "\3\u7c60\3\u7cb8\3\u7d10\3\u7d68\3\u7dc0\3\u7e18\3\u7e70\3\u7ec8" + - "\3\u7f20\3\u7f78\3\u7fd0\3\u8028\3\u8080\3\u80d8\3\u8130\3\u8188" + - "\3\u81e0\3\u8238\3\u8290\3\u82e8\3\u8340\3\u8398\3\u83f0\3\u8448" + - "\3\u84a0\3\u84f8\3\u8550\3\u85a8\3\u8600\3\u8658\3\u86b0\3\u8708" + - "\3\u8760\3\u87b8\3\u8810\3\u8868\3\u88c0\3\u8918\3\u8970\3\u89c8" + - "\3\u8a20\3\u8a78\3\u8ad0\3\u8b28\3\u8b80\3\u8bd8\3\u8c30\3\u8c88" + - "\3\u8ce0\3\u8d38\3\u8d90\2\u3208\3\u8de8\3\u8e40\3\u8e98\3\u8ef0" + - "\3\u8f48\3\u8fa0\3\u8ff8\3\u9050\3\u90a8\3\u9100\3\u9158\3\u91b0" + - "\3\u9208\3\u9260\3\u92b8\3\u9310\3\u9368\3\u93c0\3\u9418\3\u9470" + - "\3\u94c8\3\u9520\3\u9578\3\u95d0\3\u9628\3\u9680\3\u96d8\3\u9730" + - "\3\u9788\3\u97e0\3\u9838\3\u9890\3\u98e8\3\u9940\3\u9998\3\u99f0" + - "\3\u9a48\3\u9aa0\3\u9af8\3\u9b50\3\u9ba8\3\u9c00\3\u9c58\3\u9cb0" + - "\3\u9d08\3\u9d60\3\u9db8\3\u9e10\3\u9e68\3\u9ec0\3\u9f18\3\u9f70" + - "\3\u9fc8\3\ua020\3\ua078\3\ua0d0\3\ua128\3\ua180\3\ua1d8\3\ua230" + - "\3\ua288\3\ua2e0\3\ua338\3\ua390\3\ua3e8\3\ua440\3\ua498\3\ua4f0" + - "\3\ua548\3\ua5a0\3\ua5f8\3\ua650\3\ua6a8\3\ua700\3\ua758\3\ua7b0" + - "\3\ua808\3\ua860\3\ua8b8\3\ua910\3\ua968\3\ua9c0\3\uaa18\3\uaa70" + - "\3\uaac8\3\uab20\3\uab78\3\uabd0\3\uac28\3\uac80\3\uacd8\3\uad30" + - "\3\uad88\3\uade0\3\uae38\3\uae90\3\uaee8\3\uaf40\3\uaf98\3\uaff0" + - "\3\ub048\3\ub0a0\3\ub0f8\3\ub150\3\ub1a8\3\ub200\3\ub258\3\ub2b0" + - "\3\ub308\3\ub360\3\ub3b8\3\ub410\3\ub468\3\ub4c0\3\ub518\3\ub570" + - "\3\ub5c8\3\ub620\3\ub678\3\ub6d0\3\ub728\3\ub780\3\ub7d8\3\ub830" + - "\3\ub888\3\ub8e0\3\ub938\3\ub990\3\ub9e8\3\uba40\3\uba98\3\ubaf0" + - "\3\ubb48\3\ubba0\3\ubbf8\3\ubc50\3\ubca8\3\ubd00\3\ubd58\3\ubdb0" + - "\3\ube08\3\ube60\3\ubeb8\3\ubf10\3\ubf68\3\ubfc0\3\uc018\3\uc070" + - "\3\uc0c8\3\uc120\3\uc178\3\uc1d0\3\uc228\3\uc280\3\uc2d8\3\uc330" + - "\3\uc388\3\uc3e0\3\uc438\3\uc490\3\uc4e8\3\uc540\3\uc598\3\uc5f0" + - "\3\uc648\3\uc6a0\3\uc6f8\3\uc750\3\uc7a8\3\uc800\3\uc858\3\uc8b0" + - "\3\uc908\3\uc960\3\uc9b8\3\uca10\3\uca68\3\ucac0\3\ucb18\3\ucb70" + - "\3\ucbc8\3\ucc20\3\ucc78\3\uccd0\3\ucd28\3\ucd80\3\ucdd8\3\uce30" + - "\3\uce88\3\ucee0\3\ucf38\3\ucf90\3\ucfe8\3\ud040\3\ud098\3\ud0f0" + - "\3\ud148\3\ud1a0\3\ud1f8\3\ud250\3\ud2a8\3\ud300\3\ud358\3\ud3b0" + - "\3\ud408\3\ud460\3\ud4b8\3\ud510\3\ud568\3\ud5c0\3\ud618\3\ud670" + - "\3\ud6c8\3\ud720\1\u2b10\3\ud778\3\ud7d0\3\ud828\3\ud880\3\ud8d8" + - "\3\ud930\3\ud988\3\ud9e0\3\uda38\3\uda90\3\udae8\3\udb40\3\udb98" + - "\3\udbf0\3\udc48\3\udca0\3\udcf8\3\udd50\3\udda8\3\ude00\3\ude58" + - "\3\udeb0\3\udf08\3\udf60\3\udfb8\3\ue010\3\ue068\3\ue0c0\3\ue118" + - "\3\ue170\3\ue1c8\3\ue220\3\ue278\3\ue2d0\3\ue328\3\ue380\3\ue3d8" + - "\3\ue430\3\ue488\3\ue4e0\3\ue538\3\ue590\3\ue5e8\3\ue640\3\ue698" + - "\3\ue6f0\3\ue748\3\ue7a0\3\ue7f8\3\ue850\3\ue8a8\3\ue900\3\ue958" + - "\3\ue9b0\3\uea08\3\uea60\0\u2ba8\3\ueab8\3\ueb10\3\ueb68\3\uebc0" + - "\3\uec18\3\uec70\3\uecc8\3\ued20\3\ued78\3\uedd0\3\uee28\3\uee80" + - "\3\ueed8\3\uef30\3\uef88\3\uefe0\3\uf038\3\uf090\3\uf0e8\3\uf140" + - "\3\uf198\3\uf1f0\3\uf248\3\uf2a0\3\uf2f8\3\uf350\3\uf3a8\3\uf400" + - "\3\uf458\3\uf4b0\3\uf508\3\uf560\3\uf5b8\3\uf610\3\uf668\3\uf6c0" + - "\3\uf718\3\uf770\3\uf7c8\3\uf820\3\uf878\3\uf8d0\3\uf928\3\uf980" + - "\3\uf9d8\3\ufa30\3\ufa88\3\ufae0\3\ufb38\3\ufb90\3\ufbe8\3\ufc40" + - "\3\ufc98\3\ufcf0\3\ufd48\3\ufda0\3\ufdf8\3\ufe50\3\ufea8\3\uff00" + - "\3\uff58\3\uffb0\4\10\4\140\4\270\4\u0110\4\u0168\4\u01c0" + - "\4\u0218\4\u0270\4\u02c8\4\u0320\4\u0378\4\u03d0\4\u0428\4\u0480" + - "\4\u04d8\4\u0530\4\u0588\4\u04d8\4\u05e0\4\u0638\4\u0690\4\u06e8" + - "\4\u0740\4\u0798\4\u07f0\4\u0848\4\u08a0\4\u08f8\4\u0950\4\u09a8" + - "\4\u0a00\4\u0a58\4\u0ab0\4\u0b08\4\u0b60\4\u0bb8\4\u0c10\4\u0c68" + - "\4\u0cc0\4\u0d18\4\u0d70\4\u0dc8\4\u0e20\4\u0e78\4\u0ed0\4\u0f28" + - "\4\u0f80\4\u0fd8\4\u1030\4\u1088\4\u10e0\4\u1138\4\u1190\4\u11e8" + - "\4\u1240\4\u1298\4\u12f0\4\u1348\4\u13a0\4\u13f8\4\u1450\4\u14a8" + - "\4\u1500\4\u1558\4\u15b0\4\u1608\4\u1660\4\u16b8\4\u1710\4\u1768" + - "\4\u17c0\4\u1818\4\u1870\4\u18c8\4\u1920\4\u1978\4\u19d0\4\u1a28" + - "\4\u1a80\4\u1ad8\4\u1b30\4\u1b88\4\u1be0\4\u1c38\4\u1c90\4\u1ce8" + - "\4\u1d40\4\u1d98\4\u1df0\4\u1e48\4\u1ea0\4\u1ef8\4\u1f50\4\u1fa8" + - "\4\u2000\4\u2058\4\u20b0\4\u2108\4\u2160\4\u21b8\4\u2210\4\u2268" + - "\4\u22c0\4\u2318\4\u2370\4\u23c8\4\u2420\4\u2478\4\u24d0\4\u2528" + - "\4\u2580\4\u25d8\4\u2630\4\u2688\4\u26e0\4\u2738\4\u2790\4\u27e8" + - "\4\u2840\4\u2898\4\u28f0\4\u2948\4\u29a0\4\u29f8\4\u2a50\4\u2aa8" + - "\4\u2b00\4\u2b58\4\u2bb0\4\u2c08\4\u2c60\4\u2cb8\4\u2d10\4\u2d68" + - "\4\u2dc0\4\u2e18\4\u2e70\4\u2ec8\4\u2f20\4\u2f78\4\u2fd0\4\u3028" + - "\4\u3080\4\u30d8\4\u3130\4\u3188\4\u31e0\4\u3238\4\u3290\4\u32e8" + - "\4\u3340\4\u3398\4\u33f0\4\u3448\4\u34a0\4\u34f8\4\u3550\4\u35a8" + - "\4\u3600\4\u3658\4\u36b0\4\u3708\4\u3760\4\u37b8\4\u3810\4\u3868" + - "\4\u38c0\4\u3918\4\u3970\4\u39c8\4\u3a20\4\u3a78\4\u3ad0\4\u3b28" + - "\4\u3b80\4\u3bd8\4\u3c30\4\u3c88\4\u3ce0\4\u3d38\4\u3d90\4\u3de8" + - "\4\u3e40\4\u3e98\4\u3ef0\4\u3f48\4\u3fa0\4\u3ff8\4\u4050\4\u40a8" + - "\4\u4100\4\u4158\4\u41b0\4\u4208\4\u4260\4\u42b8\4\u4310\4\u4368" + - "\4\u43c0\4\u4418\4\u4470\4\u44c8\4\u4520\4\u4578\4\u45d0\4\u4628" + - "\4\u4680\4\u46d8\4\u4730\4\u4788\4\u47e0\4\u4838\4\u4890\4\u48e8" + - "\4\u4940\4\u4998\4\u49f0\4\u4a48\4\u4aa0\4\u4af8\4\u4b50\4\u4ba8" + - "\4\u4c00\4\u4c58\4\u4cb0\4\u4d08\4\u4d60\4\u4db8\4\u4e10\4\u4e68" + - "\4\u4ec0\4\u4f18\4\u4f70\4\u4fc8\4\u5020\4\u5078\4\u50d0\4\u5128" + - "\4\u5180\4\u51d8\4\u5230\4\u5288\4\u52e0\4\u5338\4\u5390\4\u53e8" + - "\4\u5440\4\u5498\4\u54f0\4\u5548\4\u55a0\4\u55f8\4\u5650\4\u56a8" + - "\4\u5700\4\u5758\4\u57b0\4\u5808\4\u5860\4\u58b8\4\u5910\4\u5968" + - "\4\u59c0\4\u5a18\4\u5a70\4\u5ac8\4\u5b20\4\u5b78\4\u5bd0\4\u5c28" + - "\4\u5c80\4\u5cd8\4\u5d30\4\u5d88\4\u5de0\4\u5e38\4\u5e90\4\u5ee8" + - "\4\u5f40\4\u5f98\4\u5ff0\4\u6048\4\u60a0\4\u60f8\4\u6150\4\u61a8" + - "\4\u6200\4\u6258\4\u62b0\4\u6308\4\u6360\4\u63b8\4\u6410\4\u6468" + - "\4\u64c0\4\u6518\4\u6570\4\u65c8\4\u6620\4\u6678\4\u66d0\4\u6728" + - "\4\u6780\4\u67d8\4\u6830\4\u6888\4\u68e0\4\u6938\4\u6990\4\u69e8" + - "\4\u6a40\4\u6a98\4\u6af0\1\ub0c8\4\u6b48\4\u6ba0\4\u6bf8\4\u6c50" + - "\4\u6ca8\4\u6d00\4\u6d58\4\u6db0\4\u6e08\4\u6e60\4\u6eb8\4\u6f10" + - "\4\u6f68\4\u6fc0\4\u7018\4\u7070\4\u70c8\4\u7120\4\u7178\4\u71d0" + - "\4\u7228\4\u7280\4\u72d8\4\u7330\4\u7388\4\u73e0\4\u7438\4\u7490" + - "\4\u74e8\4\u7540\4\u7598\4\u75f0\4\u7648\4\u76a0\4\u76f8\4\u7750" + - "\4\u77a8\4\u7800\1\u4d18\4\u7858\4\u78b0\4\u7908\4\u7960\4\u79b8" + - "\4\u7a10\4\u7a68\4\u7ac0\4\u7b18\4\u7b70\4\u7bc8\4\u7c20\4\u7c78" + - "\4\u7cd0\4\u7d28\4\u7d80\4\u7dd8\4\u7e30\4\u7e88\4\u7ee0\4\u7f38" + - "\4\u7f90\4\u7fe8\4\u8040\4\u8098\4\u80f0\4\u8148\4\u81a0\4\u81f8" + - "\4\u8250\4\u82a8\4\u8300\4\u8358\4\u83b0\4\u8408\4\u8460\4\u84b8" + - "\4\u8510\4\u8568\4\u85c0\4\u8618\4\u8670\4\u86c8\4\u8720\4\u8778" + - "\4\u87d0\4\u8828\4\u8880\4\u88d8\4\u8930\4\u8988\4\u89e0\4\u8a38" + - "\4\u8a90\4\u8ae8\4\u8b40\4\u8b98\4\u8bf0\4\u8c48\4\u8ca0\4\u8cf8" + - "\4\u8d50\4\u8da8\4\u8e00\4\u8e58\4\u8eb0\4\u8f08\4\u8f60\4\u8fb8" + - "\4\u9010\4\u9068\4\u90c0\4\u9118\4\u9170\4\u91c8\4\u9220\4\u9278" + - "\4\u92d0\4\u9328\4\u9380\4\u93d8\4\u9430\4\u9488\4\u94e0\4\u9538" + - "\4\u9590\4\u95e8\4\u9640\4\u9698\4\u96f0\4\u9748\4\u97a0\4\u97f8" + - "\4\u9850\4\u98a8\4\u9900\4\u9958\4\u99b0\4\u9a08\4\u9a60\4\u9ab8" + - "\4\u9b10\4\u9b68\4\u9bc0\4\u9c18\4\u9c70\4\u9cc8\4\u9d20\4\u9d78" + - "\4\u9dd0\4\u9e28\4\u9e80\1\u8ec0\4\u9ed8\4\u9f30\4\u9f88\4\u9fe0" + - "\4\ua038\4\ua090\4\ua0e8\4\ua140\4\ua198\4\ua1f0\4\ua248\4\ua2a0" + - "\4\ua2f8\4\ua350\4\ua3a8\4\ua400\4\ua458\4\ua4b0\4\ua508\4\ua560" + - "\4\ua5b8\4\ua610\4\ua668\4\ua6c0\4\ua718\4\ua770\4\ua7c8\4\ua820" + - "\4\ua878\4\ua8d0\4\ua928\4\ua980\4\ua9d8\4\uaa30\4\uaa88\4\uaae0" + - "\4\uab38\4\uab90\4\uabe8\4\uac40\4\uac98\4\uacf0\4\uad48\4\uada0" + - "\4\uadf8\4\uae50\4\uaea8\4\uaf00\4\uaf58\4\uafb0\4\ub008\4\ub060" + - "\4\ub0b8\4\ub110\4\ub168\4\ub1c0\4\ub218\4\ub270\4\ub2c8\4\ub320" + - "\4\ub378\4\ub3d0\4\ub428\4\ub480\4\ub4d8\4\ub530\4\ub588\4\ub5e0" + - "\4\ub638\4\ub690\4\ub6e8\4\ub740\4\ub798\4\ub7f0\4\ub848\4\ub8a0" + - "\4\ub8f8\4\ub950\4\ub9a8\4\uba00\4\uba58\4\ubab0\4\ubb08\4\ubb60" + - "\4\ubbb8\4\ubc10\4\ubc68\4\ubcc0\4\ubd18\4\ubd70\4\ubdc8\4\ube20" + - "\4\ube78\4\ubed0\4\ubf28\4\u2790\4\ubf80\2\u3100\4\ubfd8\4\uc030" + - "\4\uc088\4\uc0e0\4\uc138\4\uc190\4\uc1e8\4\uc240\4\uc298\4\uc2f0" + - "\4\uc348\4\uc3a0\4\uc3f8\4\uc450\4\uc4a8\4\uc500\1\u6b58\4\uc558" + - "\4\uc5b0\1\u19e0\4\uc608\4\uc660\4\uc6b8\4\uc710\4\uc768\4\uc7c0" + - "\4\uc818\4\uc870\4\uc8c8\4\uc920\4\uc978\4\uc9d0\4\uca28\4\uca80" + - "\4\ucad8\4\ucb30\4\ucb88\4\ucbe0\4\ucc38\4\ucc90\4\ucce8\4\ucd40" + - "\4\ucd98\4\ucdf0\4\uce48\4\ucea0\4\ucef8\4\ucf50\4\ucfa8\4\ud000" + - "\4\ud058\4\ud0b0\4\ud108\4\ud160\4\ud1b8\4\ud210\4\ud268\4\ud2c0" + - "\4\ud318\4\ud370\4\ud3c8\4\ud420\4\ud478\4\ud4d0\4\ud528\4\ud580" + - "\4\ud5d8\4\ud630\4\ud688\4\ud6e0\4\ud738\4\ud790\4\ud7e8\4\ud840" + - "\4\ud898\4\ud8f0\4\ud948\4\ud9a0\4\ud9f8\4\uda50\4\udaa8\4\udb00" + - "\4\udb58\4\udbb0\4\udc08\4\udc60\4\udcb8\4\udd10\4\udd68\4\uddc0" + - "\4\ude18\4\ude70\4\udec8\4\udf20\4\udf78\4\udfd0\4\ue028\4\ue080" + - "\4\ue0d8\4\ue130\4\ue188\4\ue1e0\4\ue238\4\ue290\4\ue2e8\4\ue340" + - "\4\ue398\4\ue3f0\4\ue448\4\ue4a0\4\ue4f8\4\ue550\4\ue5a8\4\ue600" + - "\4\ue658\4\ue6b0\4\ue708\4\ue760\4\ue7b8\4\ue810\4\ue868\4\ue8c0" + - "\4\ue918\4\ue970\4\ue9c8\4\uea20\4\uea78\4\uead0\4\ueb28\4\ueb80" + - "\4\uebd8\4\uec30\4\uec88\4\uece0\4\ued38\4\ued90\4\uede8\4\uee40" + - "\4\uee98\4\ueef0\4\uef48\4\uefa0\4\ueff8\4\uf050\4\uf0a8\4\uf100" + - "\4\uf158\4\uf1b0\4\uf208\4\uf260\1\u2b10\4\uf2b8\4\uf310\4\uf368" + - "\4\uf3c0\4\uf418\4\uf470\4\uf4c8\4\uf520\4\uf578\4\uf5d0\4\uf628" + - "\4\uf680\4\uf6d8\4\uf730\4\uf788\4\uf7e0\4\uf838\4\uf890\4\uf8e8" + - "\4\uf940\4\uf998\4\uf9f0\4\ufa48\4\ufaa0\4\ufaf8\4\ufb50\4\ufba8" + - "\4\ufc00\4\ufc58\4\ufcb0\4\ufd08\4\ufd60\4\ufdb8\4\ufe10\4\ufe68" + - "\4\ufec0\4\uff18\4\uff70\4\uffc8\5\40\5\170\5\320\5\u0128" + - "\5\u0180\5\u01d8\5\u0230\5\u0288\5\u02e0\5\u0338\0\udcb0\5\u0390" + - "\5\u03e8\5\u0440\5\u0498\5\u04f0\5\u0548\5\u05a0\5\u05f8\5\u0650" + - "\5\u06a8\5\u0700\5\u0758\5\u07b0\5\u0808\5\u0860\5\u08b8\5\u0910" + - "\5\u0968\5\u09c0\5\u0a18\5\u0a70\5\u0ac8\5\u0b20\5\u0b78\5\u0bd0" + - "\5\u0c28\5\u0c80\5\u0cd8\5\u0d30\5\u0d88\5\u0de0\5\u0e38\5\u0e90" + - "\5\u01d8\5\u0ee8\5\u0f40\5\u0f98\5\u0ff0\5\u1048\5\u10a0\5\u10f8" + - "\5\u1150\5\u11a8\5\u1200\5\u1258\5\u12b0\5\u1308\5\u1360\5\u13b8" + - "\5\u1410\5\u1468\5\u14c0\5\u1518\5\u1570\5\u15c8\5\u1620\5\u1678" + - "\5\u16d0\5\u1728\5\u1780\5\u17d8\5\u1830\5\u1888\5\u18e0\5\u1938" + - "\5\u1990\5\u19e8\5\u1a40\5\u1a98\5\u1af0\5\u1b48\5\u1ba0\5\u1bf8" + - "\5\u1c50\5\u1ca8\5\u1d00\5\u1d58\5\u1db0\5\u1e08\5\u1e60\5\u1eb8" + - "\5\u1f10\5\u1f68\5\u1fc0\5\u2018\5\u2070\5\u20c8\5\u2120\5\u2178" + - "\5\u21d0\5\u2228\5\u2280\5\u22d8\5\u2330\5\u2388\5\u23e0\5\u2438" + - "\5\u2490\5\u24e8\5\u2540\5\u2598\5\u25f0\5\u2648\5\u26a0\5\u26f8" + - "\5\u2750\5\u27a8\5\u2800\5\u2858\5\u28b0\5\u2908\5\u2960\5\u29b8" + - "\5\u2a10\5\u2a68\5\u2ac0\5\u2b18\5\u2b70\5\u2bc8\5\u2c20\5\u2c78" + - "\5\u2cd0\5\u2d28\5\u2d80\5\u2dd8\5\u2e30\5\u2e88\5\u2ee0\5\u2f38" + - "\5\u2f90\5\u2fe8\5\u3040\5\u3098\5\u30f0\5\u3148\5\u31a0\5\u31f8" + - "\5\u3250\5\u32a8\5\u3300\5\u3358\5\u33b0\5\u3408\5\u3460\5\u34b8" + - "\5\u3510\5\u3568\5\u35c0\5\u3618\5\u3670\5\u36c8\5\u3720\5\u3778" + - "\5\u37d0\5\u3828\5\u3880\5\u38d8\5\u3930\5\u3988\5\u39e0\5\u3a38" + - "\5\u3a90\5\u3ae8\5\u3b40\5\u3b98\5\u3bf0\5\u3c48\3\110\5\u3ca0" + - "\5\u3cf8\5\u3d50\5\u3da8\5\u3e00\5\u3e58\5\u3eb0\5\u3f08\5\u3f60" + - "\5\u3fb8\5\u4010\5\u4068\5\u40c0\5\u4118\5\u4170\5\u41c8\5\u4220" + - "\5\u4278\5\u42d0\5\u4328\5\u4380\5\u43d8\5\u4430\5\u4488\5\u44e0" + - "\5\u4538\5\u4590\5\u45e8\5\u4640\5\u4698\5\u46f0\5\u4748\5\u47a0" + - "\5\u47f8\5\u4850\5\u48a8\5\u4900\5\u4958\5\u49b0\5\u4a08\5\u4a60" + - "\5\u4ab8\5\u4b10\5\u4b68\5\u4bc0\5\u4c18\5\u4c70\5\u4cc8\5\u4d20" + - "\5\u4d78\5\u4dd0\5\u4e28\5\u4e80\5\u4ed8\5\u4f30\5\u4f88\5\u4fe0" + - "\5\u5038\5\u5090\5\u50e8\5\u5140\5\u5198\5\u51f0\5\u5248\5\u52a0" + - "\5\u52f8\5\u5350\5\u53a8\5\u5400\5\u5458\5\u54b0\5\u5508\5\u5560" + - "\5\u55b8\5\u5610\5\u5668\5\u56c0\5\u5718\5\u5770\5\u57c8\5\u5820" + - "\5\u5878\5\u58d0\5\u5928\5\u5980\5\u59d8\5\u5a30\5\u5a88\5\u5ae0" + - "\5\u5b38\5\u5b90\5\u5be8\5\u5c40\5\u5c98\5\u5cf0\5\u5d48\5\u5da0" + - "\5\u5df8\5\u5e50\5\u5ea8\5\u5f00\5\u5f58\5\u5fb0\2\u66a0\5\u6008" + - "\5\u6060\5\u60b8\5\u6110\5\u6168\5\u61c0\5\u6218\5\u6270\5\u62c8" + - "\5\u6320\5\u6378\5\u63d0\5\u6428\5\u6480\5\u64d8\5\u6530\5\u6588" + - "\5\u65e0\5\u6638\5\u6690\5\u66e8\5\u6740\5\u6798\5\u67f0\5\u6848" + - "\5\u68a0\5\u68f8\5\u6950\5\u69a8\5\u6a00\5\u6a58\5\u6ab0\5\u6b08" + - "\5\u6b60\5\u6bb8\5\u6c10\5\u6c68\5\u6cc0\5\u6d18\5\u6d70\5\u6dc8" + - "\3\ub3b8\5\u6e20\5\u6e78\5\u6ed0\5\u6f28\5\u6f80\5\u6fd8\5\u7030" + - "\5\u7088\5\u70e0\5\u7138\5\u7190\5\u71e8\5\u7240\5\u7298\5\u72f0" + - "\5\u7348\5\u73a0\5\u73f8\5\u7450\5\u74a8\5\u7500\5\u7558\5\u75b0" + - "\5\u7608\5\u7660\5\u76b8\5\u7710\5\u7768\5\u77c0\5\u7818\5\u7870" + - "\5\u78c8\5\u7920\5\u7978\5\u79d0\5\u7a28\5\u7a80\5\u7ad8\5\u7b30" + - "\5\u7b88\5\u7be0\5\u7c38\5\u7c90\5\u7ce8\5\u7d40\5\u7d98\5\u7df0" + - "\5\u7e48\5\u7ea0\5\u7ef8\5\u7f50\5\u7fa8\5\u8000\5\u8058\5\u80b0" + - "\5\u8108\5\u8160\5\u81b8\5\u8210\5\u8268\5\u82c0\5\u8318\5\u8370" + - "\5\u83c8\5\u8420\5\u8478\5\u84d0\5\u8528\5\u8580\5\u85d8\5\u8630" + - "\5\u8688\5\u86e0\5\u8738\5\u8790\5\u87e8\5\u8840\5\u8898\5\u88f0" + - "\5\u8948\5\u89a0\5\u89f8\5\u8a50\5\u8aa8\5\u8b00\5\u8b58\5\u8bb0" + - "\5\u8c08\5\u8c60\5\u8cb8\5\u8d10\5\u8d68\3\u0150\5\u8dc0\5\u8e18" + - "\5\u8e70\5\u8ec8\5\u8f20\5\u8f78\5\u8fd0\5\u9028\5\u9080\5\u90d8" + - "\5\u9130\5\u9188\5\u91e0\5\u9238\5\u9290\5\u92e8\5\u9340\5\u9398" + - "\5\u93f0\5\u9448\5\u94a0\5\u94f8\5\u9550\5\u95a8\5\u9600\5\u9658" + - "\5\u96b0\5\u9708\5\u9760\5\u97b8\5\u9810\5\u9868\5\u98c0\5\u9918" + - "\5\u9970\5\u99c8\5\u9a20\5\u9a78\5\u9ad0\5\u9b28\5\u9b80\5\u9bd8" + - "\5\u9c30\5\u9c88\5\u9ce0\5\u9d38\5\u9d90\5\u9de8\5\u9e40\5\u9e98" + - "\5\u9ef0\5\u9f48\5\u9fa0\5\u9ff8\5\ua050\5\ua0a8\5\ua100\5\ua158" + - "\5\ua1b0\5\ua208\5\ua260\5\ua2b8\5\ua310\5\ua368\5\ua3c0\5\ua418" + - "\5\ua470\5\ua4c8\5\ua520\5\ua578\5\ua5d0\5\ua628\5\ua680\5\ua6d8" + - "\5\ua730\5\ua788\5\ua7e0\5\ua838\5\ua890\5\ua8e8\5\ua940\5\ua998" + - "\5\ua9f0\5\uaa48\5\uaaa0\5\uaaf8\5\uab50\5\uaba8\5\uac00\5\uac58" + - "\5\uacb0\5\uad08\5\uad60\5\uadb8\5\uae10\5\uae68\5\uaec0\5\uaf18" + - "\5\uaf70\5\uafc8\5\ub020\5\ub078\5\ub0d0\5\ub128\5\ub180\5\ub1d8" + - "\5\ub230\5\ub288\5\ub2e0\5\ub338\5\ub390\5\ub3e8\5\ub440\5\ub498" + - "\5\ub4f0\5\ub548\5\ub5a0\5\ub5f8\5\ub650\5\ub6a8\5\ub700\5\ub758" + - "\5\ub7b0\5\ub808\5\ub860\5\ub8b8\5\ub910\5\ub968\5\ub9c0\5\uba18" + - "\5\uba70\5\ubac8\5\ubb20\5\ubb78\5\ubbd0\5\ubc28\5\ubc80\5\ubcd8" + - "\5\ubd30\5\ubd88\5\ubde0\5\ube38\5\ube90\5\ubee8\5\ubf40\5\ubf98" + - "\5\ubff0\5\uc048\0\u0630\5\uc0a0\5\uc0f8\5\uc150\5\uc1a8\5\uc200" + - "\5\uc258\5\uc2b0\5\uc308\5\uc360\5\uc3b8\5\uc410\5\uc468\5\uc4c0" + - "\5\uc518\5\uc570\5\uc5c8\5\uc620\5\uc678\5\uc6d0\5\uc728\5\uc780" + - "\5\uc7d8\5\uc830\5\uc888\5\uc8e0\5\uc938\4\u4db8\5\uc990\5\uc9e8" + - "\5\uca40\5\uca98\5\ucaf0\5\ucb48\5\ucba0\5\ucbf8\5\ucc50\5\ucca8" + - "\5\ucd00\5\ucd58\5\ucdb0\5\uce08\5\uce60\5\uceb8\5\ucf10\5\ucf68" + - "\5\ucfc0\5\ud018\5\ud070\5\ud0c8\5\ud120\5\ud178\5\ud1d0\5\ud228" + - "\5\ud280\5\ud2d8\5\ud330\5\ud388\5\ud3e0\5\ud438\5\ud490\5\ud4e8" + - "\5\ud540\5\ud598\5\ud5f0\5\ud648\5\ud6a0\5\ud6f8\5\ud750\5\ud7a8" + - "\5\ud800\5\ud858\5\ud8b0\5\ud908\5\ud960\5\ud9b8\5\uda10\5\uda68" + - "\5\udac0\5\udb18\5\udb70\5\udbc8\5\udc20\5\udc78\5\udcd0\5\udd28" + - "\5\udd80\5\uddd8\5\ude30\5\ude88\5\udee0\5\udf38\5\udf90\5\udfe8" + - "\5\ue040\5\ue098\5\ue0f0\5\ue148\5\ue1a0\5\ue1f8\5\ue250\5\ue2a8" + - "\5\ue300\5\ue358\5\ue3b0\5\ue408\5\ue460\5\ue4b8\5\ue510\5\ue568" + - "\5\ue5c0\5\ue618\5\ue670\5\ue6c8\5\ue720\5\ue778\5\ue7d0\5\ue828" + - "\5\ue880\5\ue8d8\5\ue930\5\ue988\5\ue9e0\5\uea38\5\uea90\5\ueae8" + - "\5\ueb40\5\ueb98\5\uebf0\5\uec48\5\ueca0\5\uecf8\5\ued50\5\ueda8" + - "\5\uee00\5\uee58\5\ueeb0\5\uef08\5\uef60\5\uefb8\5\uf010\5\uf068" + - "\5\uf0c0\5\uf118\5\uf170\5\uf1c8\5\uf220\5\uf278\5\uf2d0\5\uf328" + - "\5\uf380\5\uf3d8\5\uf430\5\uf488\5\uf4e0\5\uf538\5\uf590\5\uf5e8" + - "\5\uf640\5\uf698\5\uf6f0\5\uf748\5\uf7a0\5\uf7f8\5\uf850\5\uf8a8" + - "\5\uf900\5\uf958\5\uf9b0\5\ufa08\5\ufa60\5\ufab8\5\ufb10\5\ufb68" + - "\5\ufbc0\5\ufc18\5\ufc70\5\ufcc8\5\ufd20\5\ufd78\5\ufdd0\5\ufe28" + - "\5\ufe80\5\ufed8\5\uff30\5\uff88\5\uffe0\6\70\6\220\6\350" + - "\6\u0140\6\u0198\6\u01f0\6\u0248\6\u02a0\6\u02f8\6\u0350\6\u03a8" + - "\6\u0400\6\u0458\6\u04b0\6\u0508\6\u0560\6\u05b8\6\u0610\6\u0668" + - "\6\u06c0\6\u0718\6\u0770\6\u07c8\6\u0820\6\u0878\6\u08d0\6\u0928" + - "\6\u0980\6\u09d8\6\u0a30\6\u0a88\6\u0ae0\6\u0b38\6\u0b90\6\u0be8" + - "\3\u4ea8\6\u0c40\6\u0c98\6\u0cf0\6\u0d48\6\u0da0\6\u0df8\6\u0e50" + - "\6\u0ea8\6\u0f00\6\u0f58\6\u0fb0\6\u1008\6\u1060\6\u10b8\2\u3578" + - "\6\u1110\6\u1168\6\u11c0\6\u1218\6\u1270\6\u12c8\6\u1320\6\u1378" + - "\6\u13d0\6\u1428\6\u1480\6\u14d8\6\u1530\6\u1588\6\u15e0\6\u1638" + - "\6\u1690\6\u16e8\6\u1740\6\u1798\6\u17f0\6\u1848\6\u18a0\6\u18f8" + - "\6\u1950\6\u19a8\6\u1a00\6\u1a58\6\u1ab0\6\u1b08\6\u1b60\6\u1bb8" + - "\6\u1c10\3\u1960\6\u1c68\6\u1cc0\6\u1d18\6\u1d70\6\u1dc8\6\u1e20" + - "\6\u1e78\6\u1ed0\6\u1f28\6\u1f80\6\u1fd8\6\u2030\6\u2088\6\u20e0" + - "\6\u2138\6\u2190\6\u21e8\6\u2240\6\u2298\6\u22f0\6\u2348\6\u23a0" + - "\6\u23f8\6\u2450\6\u24a8\6\u2500\6\u2558\6\u25b0\1\u4798\6\u2608" + - "\6\u2660\6\u26b8\6\u2710\6\u2768\6\u27c0\6\u2818\6\u2870\6\u28c8" + - "\6\u2920\6\u2978\6\u29d0\6\u2a28\6\u2a80\6\u2ad8\6\u2b30\6\u2b88" + - "\6\u2be0\6\u2c38\6\u2c90\6\u2ce8\6\u2d40\6\u2d98\6\u2df0\6\u2e48" + - "\6\u2ea0\6\u2ef8\6\u2f50\6\u2fa8\6\u3000\6\u3058\6\u30b0\6\u3108" + - "\6\u3160\6\u31b8\6\u3210\6\u3268\6\u32c0\6\u3318\6\u3370\6\u33c8" + - "\6\u3420\6\u3478\6\u34d0\6\u3528\6\u3580\6\u35d8\6\u3630\6\u3688" + - "\6\u36e0\6\u3738\6\u3790\6\u37e8\6\u3840\6\u3898\6\u38f0\6\u3948" + - "\6\u39a0\6\u39f8\6\u3a50\6\u3aa8\6\u3b00\6\u3b58\6\u3bb0\6\u3c08" + - "\6\u3c60\6\u3cb8\6\u3d10\6\u3d68\6\u3dc0\6\u3e18\6\u3e70\5\u3460" + - "\6\u3ec8\6\u3f20\6\u3f78\6\u3fd0\6\u4028\6\u4080\6\u40d8\6\u4130" + - "\6\u4188\6\u41e0\6\u4238\6\u4290\6\u42e8\6\u4340\6\u4398\3\u0410" + - "\6\u43f0\6\u4448\6\u44a0\6\u44f8\6\u4550\6\u45a8\6\u4600\6\u4658" + - "\6\u46b0\6\u4708\6\u4760\6\u47b8\6\u4810\6\u4868\6\u48c0\6\u4918" + - "\6\u4970\6\u49c8\6\u4a20\6\u4a78\1\ufe20\6\u4ad0\6\u4b28\6\u4b80" + - "\6\u4bd8\6\u4c30\6\u4c88\6\u4ce0\6\u4d38\6\u4d90\6\u4de8\6\u4e40" + - "\6\u4e98\6\u4ef0\6\u4f48\6\u4fa0\6\u4ff8\6\u5050\6\u50a8\6\u5100" + - "\6\u5158\6\u51b0\6\u5208\6\u5260\6\u52b8\6\u5310\6\u5368\6\u53c0" + - "\6\u5418\6\u5470\6\u54c8\6\u5520\6\u5578\6\u55d0\6\u5628\6\u5680" + - "\6\u56d8\6\u5730\6\u5788\6\u57e0\6\u5838\6\u5890\6\u58e8\6\u5940" + - "\6\u5998\6\u59f0\6\u5a48\6\u5aa0\6\u5af8\6\u5b50\6\u5ba8\6\u5c00" + - "\6\u5c58\6\u5cb0\6\u5d08\6\u5d60\6\u5db8\6\u5e10\6\u5e68\6\u5ec0" + - "\6\u5f18\6\u5f70\6\u5fc8\6\u6020\6\u6078\6\u60d0\6\u6128\6\u6180" + - "\6\u61d8\6\u6230\6\u6288\6\u62e0\6\u6338\6\u6390\6\u63e8\6\u6440" + - "\6\u6498\6\u64f0\6\u6548\6\u65a0\6\u65f8\6\u6650\6\u66a8\6\u6700" + - "\6\u6758\6\u67b0\6\u6808\6\u6860\6\u68b8\6\u6910\6\u6968\6\u69c0" + - "\6\u6a18\6\u6a70\6\u6ac8\6\u6b20\6\u6b78\6\u6bd0\6\u6c28\6\u6c80" + - "\6\u6cd8\6\u6d30\6\u6d88\6\u6de0\6\u6e38\6\u6e90\6\u6ee8\6\u6f40" + - "\6\u6f98\6\u6ff0\6\u7048\6\u70a0\6\u70f8\6\u7150\6\u71a8\6\u7200" + - "\6\u7258\1\u7290\6\u72b0\6\u7308\6\u7360\6\u73b8\6\u7410\5\u0b78" + - "\6\u7468\6\u74c0\6\u7518\6\u7570\6\u75c8\6\u7620\6\u7678\6\u76d0" + - "\6\u7728\6\u7780\6\u77d8\6\u7830\6\u7888\6\u78e0\6\u7938\6\u7990" + - "\6\u79e8\6\u7a40\6\u7a98\6\u7af0\6\u7b48\6\u7ba0\6\u7bf8\6\u7c50" + - "\6\u7ca8\6\u7d00\6\u7d58\6\u7db0\6\u7e08\6\u7e60\6\u7eb8\6\u7f10" + - "\6\u7f68\6\u7fc0\6\u8018\6\u8070\6\u80c8\6\u8120\6\u8178\6\u81d0" + - "\6\u8228\6\u8280\6\u82d8\6\u8330\6\u8388\6\u83e0\6\u8438\6\u8490" + - "\6\u84e8\6\u8540\6\u8598\6\u85f0\6\u8648\6\u86a0\6\u86f8\6\u8750" + - "\6\u87a8\6\u8800\6\u8858\6\u88b0\6\u8908\6\u8960\6\u89b8\6\u8a10" + - "\6\u8a68\6\u8ac0\6\u8b18\6\u8b70\6\u8bc8\6\u8c20\6\u8c78\6\u8cd0" + - "\6\u8d28\6\u8d80\6\u8dd8\6\u8e30\6\u8e88\6\u8ee0\6\u8f38\6\u8f90" + - "\6\u8fe8\6\u9040\6\u9098\6\u90f0\6\u9148\6\u91a0\6\u91f8\6\u9250" + - "\6\u92a8\6\u9300\6\u9358\6\u93b0\6\u9408\6\u9460\6\u94b8\6\u9510" + - "\6\u9568\6\u95c0\6\u9618\6\u9670\6\u96c8\6\u9720\6\u9778\6\u97d0" + - "\6\u9828\6\u9880\6\u98d8\6\u9930\6\u9988\6\u99e0\6\u9a38\6\u9a90" + - "\6\u9ae8\6\u9b40\6\u9b98\6\u9bf0\6\u9c48\6\u9ca0\6\u9cf8\6\u9d50" + - "\6\u9da8\6\u9e00\6\u9e58\6\u9eb0\6\u9f08\6\u9f60\6\u9fb8\6\ua010" + - "\6\ua068\6\ua0c0\6\ua118\6\ua170\6\ua1c8\6\ua220\6\ua278\6\ua2d0" + - "\6\ua328\6\ua380\6\ua3d8\6\ua430\6\ua488\6\ua4e0\6\ua538\6\ua590" + - "\6\ua5e8\6\ua640\6\ua698\6\ua6f0\6\ua748\6\ua7a0\6\ua7f8\6\ua850" + - "\6\ua8a8\6\ua900\6\ua958\6\ua9b0\6\uaa08\6\uaa60\6\uaab8\6\uab10" + - "\6\uab68\6\uabc0\6\uac18\6\uac70\6\uacc8\6\uad20\6\uad78\6\uadd0" + - "\6\uae28\6\uae80\6\uaed8\6\uaf30\6\uaf88\6\uafe0\6\ub038\6\ub090" + - "\6\ub0e8\6\ub140\6\ub198\6\ub1f0\6\ub248\6\ub2a0\6\ub2f8\6\ub350" + - "\6\ub3a8\4\u31e0\6\ub400\6\ub458\6\ub4b0\6\ub508\6\ub560\6\ub5b8" + - "\6\ub610\6\ub668\6\ub6c0\6\ub718\6\ub770\2\u7988\6\ub7c8\6\ub820" + - "\6\ub878\6\ub8d0\6\ub928\6\ub980\6\ub9d8\6\uba30\6\uba88\6\ubae0" + - "\6\ubb38\6\ubb90\6\ubbe8\6\ubc40\6\ubc98\6\ubcf0\6\ubd48\6\ubda0" + - "\6\ubdf8\6\ube50\6\ubea8\6\ubf00\6\ubf58\6\ubfb0\6\uc008\6\uc060" + - "\6\uc0b8\6\uc110\6\uc168\6\uc1c0\6\uc218\6\uc270\6\uc2c8\6\uc320" + - "\6\uc378\6\uc3d0\6\uc428\6\uc480\6\uc4d8\6\uc530\6\uc588\6\uc5e0" + - "\6\uc638\6\uc690\6\uc6e8\6\uc740\6\uc798\6\uc7f0\6\uc848\6\uc8a0" + - "\6\uc8f8\6\uc950\6\uc9a8\6\uca00\6\uca58\6\ucab0\6\ucb08\6\ucb60" + - "\6\ucbb8\6\ucc10\6\ucc68\6\uccc0\6\ucd18\6\ucd70\6\ucdc8\6\uce20" + - "\6\uce78\6\uced0\6\ucf28\6\ucf80\6\ucfd8\6\ud030\6\ud088\6\ud0e0" + - "\6\ud138\6\ud190\6\ud1e8\6\ud240\6\ud298\6\ud2f0\6\ud348\6\ud3a0" + - "\6\ud3f8\6\ud450\6\ud4a8\6\ud500\6\ud558\6\ud5b0\6\ud608\6\ud660" + - "\6\ud6b8\6\ud710\6\ud768\6\ud7c0\6\ud818\6\ud870\6\ud8c8\6\ud920" + - "\6\ud978\6\ud9d0\6\uda28\6\uda80\6\udad8\6\udb30\6\udb88\6\udbe0" + - "\6\udc38\6\udc90\6\udce8\6\udd40\6\udd98\6\uddf0\6\ude48\6\udea0" + - "\6\udef8\6\udf50\6\udfa8\6\ue000\6\ue058\6\ue0b0\6\ue108\6\ue160" + - "\6\ue1b8\6\ue210\6\ue268\6\ue2c0\6\ue318\2\ua950\6\ue370\6\ue3c8" + - "\6\ue420\6\ue478\6\ue4d0\6\ue528\6\ue580\6\ue5d8\6\ue630\6\ue688" + - "\6\ue6e0\6\ue738\6\ue790\6\ue7e8\6\ue840\6\ue898\6\ue8f0\6\ue948" + - "\6\ue9a0\6\ue9f8\6\uea50\6\ueaa8\6\ueb00\6\ueb58\6\uebb0\6\uec08" + - "\6\uec60\6\uecb8\6\ued10\6\ued68\6\uedc0\6\uee18\6\uee70\6\ueec8" + - "\6\uef20\6\uef78\6\uefd0\6\uf028\6\uf080\6\uf0d8\6\uf130\6\uf188" + - "\6\uf1e0\6\uf238\6\uf290\6\uf2e8\6\uf340\6\uf398\6\uf3f0\6\uf448" + - "\6\uf4a0\6\uf4f8\6\uf550\6\uf5a8\6\uf600\6\uf658\6\uf6b0\6\uf708" + - "\6\uf760\6\uf7b8\6\uf810\6\uf868\6\uf8c0\6\uf918\6\uf970\6\uf9c8" + - "\6\ufa20\6\ufa78\6\ufad0\6\ufb28\6\ufb80\6\ufbd8\6\ufc30\6\ufc88" + - "\6\ufce0\6\ufd38\6\ufd90\6\ufde8\6\ufe40\6\ufe98\6\ufef0\6\uff48" + - "\6\uffa0\6\ufff8\7\120\7\250\7\u0100\7\u0158\7\u01b0\7\u0208" + - "\7\u0260\7\u02b8\7\u0310\7\u0368\3\ua4f0\7\u03c0\7\u0418\7\u0470" + - "\7\u04c8\7\u0520\7\u0578\7\u05d0\7\u0628\7\u0680\7\u06d8\7\u0730" + - "\7\u0788\7\u07e0\7\u0838\7\u0890\7\u08e8\7\u0940\7\u0998\7\u09f0" + - "\7\u0a48\7\u0aa0\3\u2250\7\u0af8\7\u0b50\7\u0ba8\7\u0c00\7\u0c58" + - "\7\u0cb0\7\u0d08\7\u0d60\7\u0db8\7\u0e10\7\u0e68\7\u0ec0\7\u0f18" + - "\7\u0f70\7\u0fc8\7\u1020\7\u1078\7\u10d0\7\u1128\7\u1180\7\u11d8" + - "\7\u1230\7\u1288\7\u12e0\7\u1338\7\u1390\7\u13e8\7\u1440\7\u1498" + - "\7\u14f0\7\u1548\7\u15a0\7\u15f8\7\u1650\7\u16a8\7\u1700\7\u1758" + - "\7\u17b0\7\u1808\7\u1860\7\u18b8\7\u1910\7\u1968\7\u19c0\7\u1a18" + - "\7\u1a70\7\u1ac8\7\u1b20\7\u1b78\7\u1bd0\7\u1c28\7\u1c80\7\u1cd8" + - "\7\u1d30\7\u1d88\7\u1de0\7\u1e38\7\u1e90\7\u1ee8\7\u1f40\7\u1f98" + - "\7\u1ff0\7\u2048\7\u20a0\7\u20f8\7\u2150\7\u21a8\7\u2200\7\u2258" + - "\7\u22b0\7\u2308\7\u2360\7\u23b8\7\u2410\7\u2468\7\u24c0\7\u2518" + - "\7\u2570\7\u25c8\7\u2620\7\u2678\7\u26d0\7\u2728\7\u2780\7\u27d8" + - "\7\u2830\7\u2888\7\u28e0\7\u2938\7\u2990\7\u29e8\7\u2a40\7\u2a98" + - "\7\u2af0\7\u2b48\7\u2ba0\7\u2bf8\7\u2c50\7\u2ca8\7\u2d00\7\u2d58" + - "\7\u2db0\7\u2e08\7\u2e60\7\u2eb8\7\u2f10\7\u2f68\7\u2fc0\7\u3018" + - "\7\u3070\7\u30c8\7\u3120\7\u3178\7\u31d0\7\u3228\7\u3280\7\u32d8" + - "\7\u3330\7\u3388\7\u33e0\7\u3438\7\u3490\7\u34e8\7\u3540\7\u3598" + - "\7\u35f0\7\u3648\7\u36a0\7\u36f8\7\u3750\7\u37a8\7\u3800\7\u3858" + - "\7\u38b0\7\u3908\7\u3960\7\u39b8\7\u3a10\7\u3a68\7\u3ac0\7\u3b18" + - "\7\u3b70\7\u3bc8\7\u3c20\7\u3c78\7\u3cd0\7\u3d28\7\u3d80\7\u3dd8" + - "\7\u3e30\7\u3e88\7\u3ee0\7\u3f38\7\u3f90\7\u3fe8\7\u4040\7\u4098" + - "\7\u40f0\7\u4148\7\u41a0\7\u41f8\7\u4250\7\u42a8\7\u4300\7\u4358" + - "\7\u43b0\7\u4408\7\u4460\7\u44b8\7\u4510\7\u4568\7\u45c0\7\u4618" + - "\7\u4670\7\u46c8\7\u4720\7\u4778\7\u47d0\7\u4828\7\u4880\7\u48d8" + - "\7\u4930\7\u4988\7\u49e0\7\u4a38\7\u4a90\7\u4ae8\7\u4b40\7\u4b98" + - "\7\u4bf0\7\u4c48\7\u4ca0\7\u4cf8\7\u4d50\7\u4da8\7\u4e00\7\u4e58" + - "\7\u4eb0\7\u4f08\7\u4f60\7\u4fb8\7\u5010\7\u5068\7\u50c0\7\u5118" + - "\7\u5170\7\u51c8\7\u5220\7\u5278\7\u52d0\7\u5328\7\u5380\7\u53d8" + - "\7\u5430\7\u5488\7\u54e0\7\u5538\7\u5590\7\u55e8\7\u5640\7\u5698" + - "\7\u56f0\7\u5748\7\u57a0\7\u57f8\7\u5850\7\u58a8\7\u5900\7\u5958" + - "\7\u59b0\7\u5a08\7\u5a60\7\u5ab8\5\u71e8\7\u5b10\7\u5b68\7\u5bc0" + - "\7\u5c18\7\u5c70\7\u5cc8\7\u5d20\7\u5d78\7\u5dd0\7\u5e28\7\u5e80" + - "\7\u5ed8\7\u5f30\7\u5f88\7\u5fe0\7\u6038\7\u6090\7\u60e8\7\u6140" + - "\7\u6198\7\u61f0\7\u6248\7\u62a0\7\u62f8\7\u6350\7\u63a8\7\u6400" + - "\7\u6458\7\u64b0\7\u6508\7\u6560\7\u65b8\7\u6610\7\u6668\7\u66c0" + - "\7\u6718\7\u6770\7\u67c8\7\u6820\7\u6878\7\u68d0\7\u6928\7\u6980" + - "\7\u69d8\7\u6a30\7\u6a88\7\u6ae0\7\u6b38\7\u6b90\7\u6be8\7\u6c40" + - "\7\u6c98\7\u6cf0\7\u6d48\7\u6da0\7\u6df8\7\u6e50\7\u6ea8\7\u6f00" + - "\7\u6f58\7\u6fb0\7\u7008\7\u7060\7\u70b8\7\u7110\7\u7168\7\u71c0" + - "\7\u7218\7\u7270\7\u72c8\7\u7320\7\u7378\7\u73d0\7\u7428\7\u7480" + - "\7\u74d8\7\u7530\7\u7588\7\u75e0\7\u7638\7\u7690\7\u76e8\7\u7740" + - "\7\u7798\7\u77f0\6\u1378\7\u7848\7\u78a0\7\u78f8\7\u7950\7\u79a8" + - "\7\u7a00\7\u7a58\7\u7ab0\7\u7b08\7\u7b60\7\u7bb8\7\u7c10\7\u7c68" + - "\7\u7cc0\7\u7d18\7\u7d70\7\u7dc8\7\u7e20\7\u7e78\7\u7ed0\7\u7f28" + - "\7\u7f80\7\u7fd8\7\u8030\7\u8088\7\u80e0\7\u8138\7\u8190\7\u81e8" + - "\7\u8240\7\u8298\7\u82f0\7\u8348\7\u83a0\7\u83f8\7\u8450\7\u84a8" + - "\7\u8500\7\u8558\7\u85b0\7\u8608\7\u8660\7\u86b8\7\u8710\7\u8768" + - "\7\u87c0\7\u8818\7\u8870\7\u88c8\7\u8920\7\u8978\7\u89d0\7\u8a28" + - "\7\u8a80\7\u8ad8\7\u8b30\7\u8b88\7\u8be0\7\u8c38\7\u8c90\7\u8ce8" + - "\7\u8d40\7\u8d98\7\u8df0\7\u8e48\7\u8ea0\7\u8ef8\7\u8f50\7\u8fa8" + - "\7\u9000\7\u9058\7\u90b0\7\u9108\7\u9160\7\u91b8\7\u9210\7\u9268" + - "\7\u92c0\7\u9318\7\u9370\7\u93c8\7\u9420\7\u9478\7\u94d0\7\u9528" + - "\7\u9580\7\u95d8\7\u9630\7\u9688\7\u96e0\7\u9738\7\u9790\7\u97e8" + - "\7\u9840\7\u9898\7\u98f0\7\u9948\7\u99a0\7\u99f8\7\u9a50\7\u9aa8" + - "\7\u9b00\7\u9b58\7\u9bb0\7\u9c08\7\u9c60\7\u9cb8\7\u9d10\7\u9d68" + - "\7\u9dc0\7\u9e18\7\u9e70\7\u9ec8\7\u9f20\7\u9f78\7\u9fd0\7\ua028" + - "\7\ua080\7\ua0d8\7\ua130\7\ua188\7\ua1e0\7\ua238\7\ua290\7\ua2e8" + - "\7\ua340\7\ua398\7\ua3f0\7\ua448\7\ua4a0\7\ua4f8\7\ua550\7\ua5a8" + - "\7\ua600\7\ua658\7\ua6b0\7\ua708\7\ua760\7\ua7b8\7\ua810\7\ua868" + - "\7\ua8c0\7\ua918\7\ua970\7\ua9c8\7\uaa20\7\uaa78\7\uaad0\7\uab28" + - "\7\uab80\7\uabd8\7\uac30\7\uac88\7\uace0\7\uad38\7\uad90\7\uade8" + - "\7\uae40\7\uae98\7\uaef0\7\uaf48\7\uafa0\7\uaff8\7\ub050\7\ub0a8" + - "\7\ub100\7\ub158\7\ub1b0\7\ub208\7\ub260\7\ub2b8\7\ub310\7\ub368" + - "\5\uc468\7\ub3c0\7\ub418\7\ub470\7\ub4c8\7\ub520\7\ub578\7\ub5d0" + - "\7\ub628\7\ub680\7\ub6d8\7\ub730\7\ub788\7\ub7e0\7\ub838\7\ub890" + - "\7\ub8e8\7\ub940\7\ub998\7\ub9f0\7\uba48\7\ubaa0\7\ubaf8\7\ubb50" + - "\7\ubba8\7\ubc00\7\ubc58\7\ubcb0\7\ubd08\7\ubd60\7\ubdb8\7\ube10" + - "\7\ube68\7\ubec0\7\ubf18\7\ubf70\7\ubfc8\7\uc020\7\uc078\7\uc0d0" + - "\7\uc128\7\uc180\7\uc1d8\7\uc230\7\uc288\7\uc2e0\7\uc338\7\uc390" + - "\7\uc3e8\7\uc440\7\uc498\7\uc4f0\7\uc548\7\uc5a0\7\uc5f8\7\uc650" + - "\7\uc6a8\7\uc700\7\uc758\7\uc7b0\7\uc808\7\uc860\7\uc8b8\7\uc910" + - "\7\uc968\7\uc9c0\7\uca18\7\uca70\7\ucac8\7\ucb20\7\ucb78\7\ucbd0" + - "\7\ucc28\7\ucc80\7\uccd8\7\ucd30\7\ucd88\7\ucde0\7\uce38\7\uce90" + - "\7\ucee8\7\ucf40\7\ucf98\7\ucff0\7\ud048\7\ud0a0\7\ud0f8\7\ud150" + - "\7\ud1a8\7\ud200\7\ud258\7\ud2b0\7\ud308\7\ud360\7\ud3b8\7\ud410" + - "\7\ud468\7\ud4c0\7\ud518\7\ud570\7\ud5c8\7\ud620\7\ud678\7\ud6d0" + - "\7\ud728\7\ud780\7\ud7d8\7\ud830\7\ud888\7\ud8e0\7\ud938\7\ud990" + - "\7\ud9e8\7\uda40\7\uda98\7\udaf0\7\udb48\7\udba0\7\udbf8\7\udc50" + - "\7\udca8\7\udd00\7\udd58\7\uddb0\7\ude08\7\ude60\7\udeb8\7\udf10" + - "\7\udf68\7\udfc0\7\ue018\7\ue070\7\ue0c8\7\ue120\7\ue178\7\ue1d0" + - "\7\ue228\7\ue280\7\ue2d8\7\ue330\7\ue388\7\ue3e0\7\ue438\7\ue490" + - "\7\ue4e8\7\ue540\7\ue598\7\ue5f0\7\ue648\7\ue6a0\7\ue6f8\7\ue750" + - "\7\ue7a8\7\ue800\7\ue858\7\ue8b0\7\ue908\7\ue960\7\ue9b8\7\uea10" + - "\7\uea68\7\ueac0\7\ueb18\7\ueb70\7\uebc8\7\uec20\7\uec78\7\uecd0" + - "\7\ued28\7\ued80\7\uedd8\7\uee30\7\uee88\7\ueee0\7\uef38\7\uef90" + - "\7\uefe8\7\uf040\7\uf098\7\uf0f0\7\uf148\7\uf1a0\7\uf1f8\7\uf250" + - "\7\uf2a8\7\uf300\7\uf358\7\uf3b0\7\uf408\7\uf460\7\uf4b8\7\uf510" + - "\7\uf568\7\uf5c0\7\uf618\7\uf670\7\uf6c8\7\uf720\7\uf778\7\uf7d0" + - "\7\uf828\7\uf880\7\uf8d8\7\uf930\7\uf988\7\uf9e0\7\ufa38\7\ufa90" + - "\7\ufae8\7\ufb40\7\ufb98\7\ufbf0\7\ufc48\7\ufca0\7\ufcf8\7\ufd50" + - "\7\ufda8\7\ufe00\7\ufe58\7\ufeb0\7\uff08\7\uff60\7\uffb8\10\20" + - "\10\150\10\300\10\u0118\10\u0170\10\u01c8\10\u0220\10\u0278\10\u02d0" + - "\10\u0328\10\u0380\10\u03d8\10\u0430\10\u0488\10\u04e0\10\u0538\10\u0590" + - "\10\u05e8\10\u0640\10\u0698\10\u06f0\1\ua938\10\u0748\10\u07a0\10\u07f8" + - "\10\u0850\10\u08a8\10\u0900\10\u0958\10\u09b0\10\u0a08\10\u0a60\10\u0ab8" + - "\10\u0b10\10\u0b68\10\u0bc0\10\u0c18\10\u0c70\10\u0cc8\10\u0d20\10\u0d78" + - "\10\u0dd0\10\u0e28\10\u0e80\10\u0ed8\10\u0f30\10\u0f88\10\u0fe0\10\u1038" + - "\10\u1090\10\u10e8\10\u1140\10\u1198\10\u11f0\10\u1248\10\u12a0\10\u12f8" + - "\10\u1350\10\u13a8\10\u1400\10\u1458\10\u14b0\10\u1508\10\u1560\10\u15b8" + - "\10\u1610\10\u1668\10\u16c0\10\u1718\10\u1770\10\u17c8\10\u1820\10\u1878" + - "\10\u18d0\10\u1928\10\u1980\10\u19d8\10\u1a30\10\u1a88\10\u1ae0\10\u1b38" + - "\10\u1b90\10\u1be8\10\u1c40\10\u1c98\10\u1cf0\10\u1d48\10\u1da0\10\u1df8" + - "\10\u1e50\10\u1ea8\10\u1f00\10\u1f58\10\u1fb0\10\u2008\10\u2060\7\u8df0" + - "\10\u20b8\10\u2110\10\u2168\10\u21c0\10\u2218\10\u2270\10\u22c8\10\u2320" + - "\10\u2378\10\u23d0\10\u2428\10\u2480\10\u24d8\10\u2530\10\u2588\10\u25e0" + - "\10\u2638\10\u2690\10\u26e8\10\u2740\10\u2798\10\u27f0\10\u2848\10\u28a0" + - "\10\u28f8\10\u2950\10\u29a8\10\u2a00\10\u2a58\10\u2ab0\10\u2b08\10\u2b60" + - "\10\u2bb8\10\u2c10\10\u2c68\10\u2cc0\10\u2d18\10\u2d70\10\u2dc8\10\u2e20" + - "\10\u2e78\10\u2ed0\10\u2f28\10\u2f80\10\u2fd8\10\u3030\10\u3088\10\u30e0" + - "\10\u3138\10\u3190\10\u31e8\10\u3240\10\u3298\10\u32f0\10\u3348\10\u33a0" + - "\10\u33f8\10\u3450\10\u34a8\10\u3500\10\u3558\10\u35b0\10\u3608\10\u3660" + - "\10\u36b8\10\u3710\2\ubc38\10\u3768\10\u37c0\10\u3818\10\u3870\10\u38c8" + - "\10\u3920\10\u3978\10\u39d0\10\u3a28\10\u3a80\10\u3ad8\10\u3b30\10\u3b88" + - "\10\u3be0\10\u3c38\10\u3c90\3\u21f8\10\u3ce8\10\u3d40\10\u3d98\10\u3df0" + - "\10\u3e48\10\u3ea0\10\u3ef8\10\u3f50\10\u3fa8\10\u4000\10\u4058\10\u40b0" + - "\10\u4108\10\u4160\10\u41b8\10\u4210\10\u4268\10\u42c0\10\u4318\10\u4370" + - "\10\u43c8\10\u4420\10\u4478\10\u44d0\10\u4528\10\u4580\10\u45d8\10\u4630" + - "\10\u4688\10\u46e0\10\u4738\10\u4790\10\u47e8\10\u4840\10\u4898\10\u48f0" + - "\10\u4948\10\u49a0\10\u49f8\10\u4a50\10\u4aa8\10\u4b00\10\u4b58\10\u4bb0" + - "\10\u4c08\10\u4c60\10\u4cb8\10\u4d10\10\u4d68\10\u4dc0\10\u4e18\10\u4e70" + - "\10\u4ec8\10\u4f20\10\u4f78\10\u4fd0\10\u5028\10\u5080\10\u50d8\10\u5130" + - "\10\u5188\10\u51e0\10\u5238\10\u5290\10\u52e8\10\u5340\10\u5398\10\u53f0" + - "\10\u5448\10\u54a0\10\u54f8\10\u5550\10\u55a8\10\u5600\10\u5658\10\u56b0" + - "\10\u5708\10\u5760\10\u57b8\10\u5810\10\u5868\10\u58c0\10\u5918\10\u5970" + - "\10\u59c8\10\u5a20\10\u5a78\10\u5ad0\10\u5b28\10\u5b80\10\u5bd8\10\u5c30" + - "\10\u5c88\10\u5ce0\10\u5d38\10\u5d90\10\u5de8\10\u5e40\10\u5e98\10\u5ef0" + - "\10\u5f48\10\u5fa0\10\u5ff8\10\u6050\10\u60a8\10\u6100\10\u6158\10\u61b0" + - "\10\u6208\10\u6260\10\u62b8\10\u6310\10\u6368\10\u63c0\10\u6418\10\u6470" + - "\10\u64c8\10\u6520\10\u6578\10\u65d0\10\u6628\10\u6680\10\u66d8\10\u6730" + - "\10\u6788\10\u67e0\10\u6838\10\u6890\10\u68e8\10\u6940\10\u6998\10\u69f0" + - "\10\u6a48\10\u6aa0\10\u6af8\10\u6b50\10\u6ba8\10\u6c00\10\u6c58\10\u6cb0" + - "\10\u6d08\10\u6d60\10\u6db8\10\u6e10\10\u6e68\10\u6ec0\10\u6f18\10\u6f70" + - "\10\u6fc8\10\u7020\10\u7078\10\u70d0\10\u7128\10\u7180\10\u71d8\10\u7230" + - "\10\u7288\10\u72e0\10\u7338\10\u7390\10\u73e8\10\u7440\10\u7498\10\u74f0" + - "\10\u7548\10\u75a0\10\u75f8\10\u7650\10\u76a8\10\u7700\10\u7758\10\u77b0" + - "\10\u7808\10\u7860\10\u78b8\10\u7910\10\u7968\10\u79c0\10\u7a18\10\u7a70" + - "\10\u7ac8\10\u7b20\10\u7b78\10\u7bd0\10\u7c28\10\u7c80\10\u7cd8\10\u7d30" + - "\10\u7d88\10\u7de0\10\u7e38\10\u7e90\10\u7ee8\10\u7f40\10\u7f98\10\u7ff0" + - "\10\u8048\10\u80a0\10\u80f8\10\u8150\10\u81a8\10\u8200\10\u8258\10\u82b0" + - "\10\u8308\10\u8360\10\u83b8\10\u8410\10\u8468\10\u84c0\10\u8518\10\u8570" + - "\10\u85c8\10\u8620\10\u8678\10\u86d0\10\u8728\10\u8780\10\u87d8\10\u8830" + - "\10\u8888\10\u88e0\10\u8938\10\u8990\10\u89e8\10\u8a40\10\u8a98\4\u2840" + - "\10\u8af0\10\u8b48\10\u8ba0\10\u8bf8\10\u8c50\10\u8ca8\10\u8d00\10\u8d58" + - "\10\u8db0\10\u8e08\10\u8e60\10\u8eb8\10\u8f10\10\u8f68\10\u8fc0\10\u9018" + - "\10\u9070\10\u90c8\10\u9120\10\u9178\10\u91d0\10\u9228\10\u9280\10\u92d8" + - "\10\u9330\10\u9388\10\u93e0\10\u9438\10\u9490\10\u94e8\10\u9540\10\u9598" + - "\10\u95f0\10\u9648\10\u96a0\10\u96f8\10\u9750\10\u97a8\10\u9800\10\u9858" + - "\10\u98b0\10\u9908\10\u9960\10\u99b8\10\u9a10\10\u9a68\10\u9ac0\10\u9b18" + - "\10\u9b70\10\u9bc8\10\u9c20\10\u9c78\10\u9cd0\10\u9d28\10\u9d80\10\u9dd8" + - "\10\u9e30\10\u9e88\10\u9ee0\10\u9f38\10\u9f90\0\uc0d8\10\u9fe8\10\ua040" + - "\10\ua098\10\ua0f0\10\ua148\10\ua1a0\10\ua1f8\10\ua250\10\ua2a8\5\u1830" + - "\10\ua300\10\ua358\10\ua3b0\10\ua408\10\ua460\10\ua4b8\10\ua510\10\ua568" + - "\10\ua5c0\10\ua618\10\ua670\10\ua6c8\10\ua720\10\ua778\10\ua7d0\10\ua828" + - "\10\ua880\10\ua8d8\10\ua930\10\ua988\10\ua9e0\10\uaa38\10\uaa90\10\uaae8" + - "\10\uab40\10\uab98\10\uabf0\10\uac48\10\uaca0\10\uacf8\10\uad50\10\uada8" + - "\10\uae00\10\uae58\10\uaeb0\10\uaf08\10\uaf60\10\uafb8\10\ub010\10\ub068" + - "\10\ub0c0\10\ub118\10\ub170\10\ub1c8\10\ub220\10\ub278\10\ub2d0\10\ub328" + - "\10\ub380\10\ub3d8\10\ub430\10\ub488\10\ub4e0\10\ub538\10\ub590\10\ub5e8" + - "\10\ub640\10\ub698\10\ub6f0\10\ub748\10\ub7a0\10\ub7f8\10\ub850\10\ub8a8" + - "\10\ub900\10\ub958\10\ub9b0\10\uba08\10\uba60\10\ubab8\10\ubb10\10\ubb68" + - "\10\ubbc0\10\ubc18\10\ubc70\10\ubcc8\10\ubd20\10\ubd78\10\ubdd0\10\ube28" + - "\10\ube80\10\ubed8\10\ubf30\10\ubf88\10\ubfe0\10\uc038\10\uc090\10\uc0e8" + - "\10\uc140\10\uc198\10\uc1f0\10\uc248\10\uc2a0\10\uc2f8\10\uc350\10\uc3a8" + - "\2\u6960\10\uc400\10\uc458\10\uc4b0\10\uc508\10\uc560\10\uc5b8\10\uc610" + - "\10\uc668\10\uc6c0\10\uc718\10\uc770\10\uc7c8\10\uc820\10\uc878\10\uc8d0" + - "\10\uc928\10\uc980\10\uc9d8\10\uca30\10\uca88\7\u71c0\10\ucae0\10\ucb38" + - "\10\ucb90\10\ucbe8\10\ucc40\10\ucc98\10\uccf0\10\ucd48\10\ucda0\6\ufe98" + - "\10\ucdf8\10\uce50\10\ucea8\10\ucf00\10\ucf58\10\ucfb0\10\ud008\10\ud060" + - "\10\ud0b8\10\ud110\10\ud168\10\ud1c0\10\ud218\10\ud270\10\ud2c8\10\ud320" + - "\10\ud378\10\ud3d0\10\ud428\10\ud480\10\ud4d8\10\u9228\10\ud530\10\ud588" + - "\10\ud5e0\10\ud638\10\ud690\10\ud6e8\10\ud740\10\ud798\10\ud7f0\10\ud848" + - "\10\ud8a0\10\ud8f8\10\ud950\10\ud9a8\10\uda00\10\uda58\10\udab0\10\udb08" + - "\10\udb60\10\udbb8\10\udc10\10\udc68\10\udcc0\10\udd18\10\udd70\10\uddc8" + - "\10\ude20\10\ude78\10\uded0\10\udf28\10\udf80\10\udfd8\10\ue030\10\ue088" + - "\10\ue0e0\10\ue138\10\ue190\10\ue1e8\10\ue240\10\ue298\10\ue2f0\10\ue348" + - "\10\ue3a0\10\ue3f8\10\ue450\10\ue4a8\10\ue500\10\ue558\10\ue5b0\10\ue608" + - "\10\ue660\10\ue6b8\10\ue710\10\ue768\10\ue7c0\10\ue818\10\ue870\10\ue8c8" + - "\10\ue920\10\ue978\10\ue9d0\10\uea28\10\uea80\10\uead8\10\ueb30\10\ueb88" + - "\10\uebe0\10\uec38\10\uec90\10\uece8\10\ued40\10\ued98\10\uedf0\10\uee48" + - "\10\ueea0\10\ueef8\10\uef50\10\uefa8\10\uf000\10\uf058\10\uf0b0\10\uf108" + - "\10\uf160\10\uf1b8\10\uf210\10\uf268\10\uf2c0\10\uf318\10\uf370\10\uf3c8" + - "\10\uf420\10\uf478\10\uf4d0\10\uf528\10\uf580\10\uf5d8\10\uf630\10\uf688" + - "\10\uf6e0\10\uf738\10\uf790\10\uf7e8\10\uf840\10\uf898\10\uf8f0\10\uf948" + - "\10\uf9a0\10\uf9f8\10\ufa50\10\ufaa8\10\ufb00\10\ufb58\10\u5de8\10\ufbb0" + - "\10\ufc08\10\ufc60\10\ufcb8\10\ufd10\10\ufd68\10\ufdc0\10\ufe18\10\ufe70" + - "\10\ufec8\10\uff20\10\uff78\10\uffd0\11\50\11\200\11\330\11\u0130" + - "\11\u0188\11\u01e0\11\u0238\11\u0290\11\u02e8\11\u0340\11\u0398\11\u03f0" + - "\11\u0448\11\u04a0\11\u04f8\11\u0550\11\u05a8\11\u0600\11\u0658\11\u06b0" + - "\11\u0708\11\u0760\11\u07b8\11\u0810\11\u0868\11\u08c0\11\u0918\11\u0970" + - "\11\u09c8\11\u0a20\11\u0a78\11\u0ad0\11\u0b28\11\u0b80\11\u0bd8\11\u0c30" + - "\11\u0c88\11\u0ce0\11\u0d38\11\u0d90\11\u0de8\11\u0e40\11\u0e98\11\u0ef0" + - "\11\u0f48\6\u1bb8\11\u0fa0\11\u0ff8\11\u1050\11\u10a8\11\u1100\11\u1158" + - "\11\u11b0\11\u1208\11\u1260\11\u12b8\11\u1310\11\u1368\11\u13c0\11\u1418" + - "\11\u1470\11\u14c8\11\u1520\11\u1578\11\u15d0\11\u1628\7\u9f78\11\u1680" + - "\11\u16d8\11\u1730\11\u1788\11\u17e0\11\u1838\11\u1890\11\u18e8\11\u1940" + - "\11\u1998\11\u19f0\11\u1a48\11\u1aa0\11\u1af8\11\u1b50\11\u1ba8\11\u1c00" + - "\11\u1c58\11\u1cb0\11\u1d08\11\u1d60\11\u1db8\11\u1e10\11\u1e68\11\u1ec0" + - "\11\u1f18\11\u1f70\11\u1fc8\11\u2020\11\u2078\11\u20d0\11\u2128\11\u2180" + - "\11\u21d8\11\u2230\11\u2288\11\u22e0\11\u2338\11\u2390\11\u23e8\11\u2440" + - "\11\u2498\11\u24f0\11\u2548\11\u25a0\11\u25f8\11\u2650\11\u26a8\11\u2700" + - "\11\u2758\11\u27b0\11\u2808\11\u2860\11\u28b8\11\u2910\11\u2968\11\u29c0" + - "\11\u2a18\11\u2a70\11\u2ac8\11\u2b20\11\u2b78\11\u2bd0\11\u2c28\11\u2c80" + - "\11\u2cd8\11\u2d30\11\u2d88\11\u2de0\11\u2e38\11\u2e90\11\u2ee8\11\u2f40" + - "\11\u2f98\11\u2ff0\11\u3048\11\u30a0\11\u30f8\11\u3150\11\u31a8\11\u3200" + - "\11\u3258\11\u32b0\11\u3308\11\u3360\11\u33b8\11\u3410\11\u3468\11\u34c0" + - "\11\u3518\11\u3570\11\u35c8\11\u3620\11\u3678\11\u36d0\11\u3728\11\u3780" + - "\11\u37d8\11\u3830\11\u3888\11\u38e0\11\u3938\11\u3990\11\u39e8\11\u3a40" + - "\11\u3a98\3\u2720\11\u3af0\11\u3b48\11\u3ba0\11\u3bf8\5\u0b20\11\u3c50" + - "\11\u3ca8\11\u3d00\11\u3d58\11\u3db0\11\u3e08\11\u3e60\11\u3eb8\11\u3f10" + - "\11\u3f68\11\u3fc0\11\u4018\11\u4070\11\u40c8\11\u4120\11\u4178\11\u41d0" + - "\11\u4228\11\u4280\11\u42d8\11\u4330\11\u4388\11\u43e0\11\u4438\11\u4490" + - "\11\u44e8\11\u4540\11\u4598\11\u45f0\11\u4648\11\u46a0\11\u46f8\11\u4750" + - "\11\u47a8\11\u4800\11\u4858\11\u48b0\11\u4908\11\u4960\11\u49b8\11\u4a10" + - "\11\u4a68\11\u4ac0\11\u4b18\11\u4b70\11\u4bc8\11\u4c20\11\u4c78\11\u4cd0" + - "\11\u4d28\11\u4d80\11\u4dd8\11\u4e30\11\u4e88\11\u4ee0\11\u4f38\11\u4f90" + - "\11\u4fe8\11\u5040\11\u5098\11\u50f0\11\u5148\11\u51a0\11\u51f8\11\u5250" + - "\11\u52a8\11\u5300\11\u5358\11\u53b0\11\u5408\11\u5460\11\u54b8\11\u5510" + - "\11\u5568\11\u55c0\11\u5618\11\u5670\11\u56c8\11\u5720\11\u5778\11\u57d0" + - "\11\u5828\11\u5880\11\u58d8\11\u5930\11\u5988\11\u59e0\11\u5a38\11\u5a90" + - "\11\u5ae8\11\u5b40\11\u5b98\11\u5bf0\11\u5c48\11\u5ca0\11\u5cf8\11\u5d50" + - "\11\u5da8\11\u5e00\11\u5e58\11\u5eb0\11\u5f08\11\u5f60\11\u5fb8\11\u6010" + - "\11\u6068\11\u60c0\11\u6118\11\u6170\11\u61c8\11\u6220\11\u6278\11\u62d0" + - "\11\u6328\11\u6380\11\u63d8\11\u6430\11\u6488\11\u64e0\11\u6538\11\u6590" + - "\11\u65e8\11\u6640\11\u6698\11\u66f0\11\u6748\11\u67a0\10\u57b8\11\u67f8" + - "\11\u6850\11\u68a8\11\u6900\11\u6958\11\u69b0\11\u6a08\11\u6a60\11\u6ab8" + - "\11\u6b10\11\u6b68\11\u6bc0\11\u6c18\11\u6c70\11\u6cc8\11\u6d20\11\u6d78" + - "\11\u6dd0\11\u6e28\11\u6e80\11\u6ed8\11\u6f30\11\u6f88\11\u6fe0\11\u7038" + - "\11\u7090\11\u70e8\11\u7140\11\u7198\11\u71f0\11\u7248\11\u72a0\11\u72f8" + - "\11\u7350\11\u73a8\11\u7400\11\u7458\11\u74b0\11\u7508\11\u7560\11\u75b8" + - "\11\u7610\11\u7668\11\u76c0\11\u7718\11\u7770\11\u77c8\11\u7820\11\u7878" + - "\11\u78d0\11\u7928\11\u7980\11\u79d8\11\u7a30\11\u7a88\11\u7ae0\11\u7b38" + - "\11\u7b90\11\u7be8\11\u7c40\11\u7c98\11\u7cf0\11\u7d48\11\u7da0\11\u7df8" + - "\11\u7e50\11\u7ea8\11\u7f00\11\u7f58\11\u7fb0\11\u8008\11\u8060\11\u80b8" + - "\11\u8110\7\u6038\11\u8168\11\u81c0\11\u8218\11\u8270\11\u82c8\11\u8320" + - "\11\u8378\11\u83d0\11\u8428\11\u8480\11\u84d8\11\u8530\11\u8588\11\u85e0" + - "\11\u8638\11\u8690\11\u86e8\11\u8740\5\u5ea8\11\u8798\11\u87f0\11\u8848" + - "\11\u88a0\11\u88f8\11\u8950\11\u89a8\11\u8a00\10\ue3a0\11\u8a58\11\u8ab0" + - "\11\u8b08\11\u8b60\11\u8bb8\11\u8c10\11\u8c68\11\u8cc0\11\u8d18\11\u8d70" + - "\11\u8dc8\11\u8e20\11\u8e78\11\u8ed0\11\u8f28\11\u8f80\11\u8fd8\11\u9030" + - "\11\u9088\11\u90e0\11\u9138\11\u9190\11\u91e8\11\u9240\11\u9298\11\u92f0" + - "\11\u9348\11\u93a0\11\u93f8\11\u9450\11\u94a8\11\u9500\11\u9558\11\u95b0" + - "\11\u9608\11\u9660\11\u96b8\11\u9710\11\u9768\11\u97c0\11\u9818\11\u9870" + - "\11\u98c8\11\u9920\11\u9978\11\u99d0\11\u9a28\11\u9a80\11\u9ad8\11\u9b30" + - "\11\u9b88\11\u9be0\11\u9c38\11\u9c90\11\u9ce8\11\u9d40\11\u9d98\11\u9df0" + - "\11\u9e48\11\u9ea0\11\u9ef8\11\u9f50\11\u9fa8\11\ua000\11\ua058\11\ua0b0" + - "\11\ua108\11\ua160\11\ua1b8\11\ua210\11\ua268\11\ua2c0\11\ua318\11\ua370" + - "\11\ua3c8\11\ua420\11\ua478\11\ua4d0\11\ua528\11\ua580\11\ua5d8\11\ua630" + - "\11\ua688\11\ua6e0\11\ua738\11\ua790\11\ua7e8\11\ua840\11\ua898\11\ua8f0" + - "\11\ua948\11\ua9a0\11\ua9f8\11\uaa50\11\uaaa8\11\uab00\11\uab58\11\uabb0" + - "\11\uac08\11\uac60\11\uacb8\11\uad10\11\uad68\11\uadc0\11\uae18\11\uae70" + - "\11\uaec8\11\uaf20\11\uaf78\11\uafd0\11\ub028\11\ub080\11\ub0d8\11\ub130" + - "\11\ub188\11\ub1e0\11\ub238\11\ub290\11\ub2e8\11\ub340\11\ub398\11\ub3f0" + - "\11\ub448\11\ub4a0\11\ub4f8\11\ub550\11\ub5a8\11\ub600\11\ub658\11\ub6b0" + - "\11\ub708\11\ub760\11\ub7b8\11\ub810\11\ub868\11\ub8c0\11\ub918\11\ub970" + - "\11\ub9c8\11\uba20\11\uba78\11\ubad0\11\ubb28\11\ubb80\11\ubbd8\11\ubc30" + - "\11\ubc88\11\ubce0\11\ubd38\11\ubd90\11\ubde8\11\ube40\4\u03d0\11\ube98" + - "\11\ubef0\11\ubf48\11\ubfa0\11\ubff8\11\uc050\11\uc0a8\11\uc100\11\uc158" + - "\11\uc1b0\11\uc208\11\uc260\11\uc2b8\11\uc310\11\uc368\11\uc3c0\11\uc418" + - "\11\uc470\11\uc4c8\11\uc520\11\uc578\11\uc5d0\11\uc628\11\uc680\11\uc6d8" + - "\11\uc730\11\uc788\11\uc7e0\11\uc838\11\uc890\11\uc8e8\11\uc940\11\uc998" + - "\11\uc9f0\11\uca48\11\ucaa0\11\ucaf8\11\ucb50\11\ucba8\11\ucc00\11\ucc58" + - "\11\uccb0\11\ucd08\11\ucd60\11\ucdb8\11\uce10\11\uce68\11\ucec0\11\ucf18" + - "\11\ucf70\11\ucfc8\11\ud020\11\ud078\11\ud0d0\11\ud128\11\ud180\11\ud1d8" + - "\11\ud230\11\ud288\11\ud2e0\11\ud338\11\ud390\11\ud3e8\11\ud440\11\ud498" + - "\11\ud4f0\11\ud548\11\ud5a0\11\ud5f8\11\ud650\11\ud6a8\11\ud700\11\ud758" + - "\11\ud7b0\11\ud808\11\ud860\11\ud8b8\11\ud910\11\ud968\11\ud9c0\11\uda18" + - "\11\uda70\11\udac8\11\udb20\11\udb78\11\udbd0\11\udc28\11\udc80\11\udcd8" + - "\11\udd30\11\udd88\11\udde0\11\ude38\11\ude90\11\udee8\11\udf40\11\udf98" + - "\11\udff0\11\ue048\11\ue0a0\11\ue0f8\11\ue150\11\ue1a8\11\ue200\11\ue258" + - "\11\ue2b0\11\ue308\11\ue360\11\ue3b8\11\ue410\11\ue468\11\ue4c0\11\ue518" + - "\11\ue570\11\ue5c8\11\ue620\11\ue678\11\ue6d0\11\ue728\11\ue780\11\ue7d8" + - "\11\ue830\11\ue888\11\ue8e0\11\ue938\11\ue990\11\ue9e8\11\uea40\11\uea98" + - "\11\ueaf0\11\ueb48\11\ueba0\11\uebf8\11\uec50\11\ueca8\11\ued00\11\ued58" + - "\11\uedb0\11\uee08\11\uee60\11\ueeb8\11\uef10\11\uef68\11\uefc0\11\uf018" + - "\11\uf070\11\uf0c8\11\uf120\11\uf178\11\uf1d0\11\uf228\11\uf280\11\uf2d8" + - "\11\uf330\11\uf388\11\uf3e0\11\uf438\11\uf490\11\uf4e8\11\uf540\11\uf598" + - "\11\uf5f0\11\uf648\11\uf6a0\11\uf6f8\11\uf750\11\uf7a8\11\uf800\11\uf858" + - "\11\uf8b0\11\uf908\11\uf960\11\uf9b8\11\ufa10\11\ufa68\11\ufac0\11\ufb18" + - "\11\ufb70\11\ufbc8\11\ufc20\10\u1400"; + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - private static int[] zzUnpackRowMap() { - int[] result = new int[7572]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\141\0\302\0\u0123\0\u0184\0\u01e5\0\u0246\0\u02a7"+ + "\0\u0308\0\u0369\0\u03ca\0\u042b\0\u048c\0\u04ed\0\u054e\0\u05af"+ + "\0\u0610\0\u0671\0\u06d2\0\u0733\0\u0794\0\u07f5\0\u0856\0\u08b7"+ + "\0\u0918\0\u0979\0\u09da\0\u0a3b\0\u0a9c\0\u0afd\0\u0b5e\0\u0bbf"+ + "\0\u0c20\0\u0c81\0\u0ce2\0\u0d43\0\u0da4\0\u0e05\0\u0c81\0\u0e66"+ + "\0\u0ec7\0\u0f28\0\u0f89\0\u0fea\0\u0c81\0\u0c81\0\u104b\0\u10ac"+ + "\0\u110d\0\u0c81\0\u116e\0\u0c81\0\u0c81\0\u0c81\0\u11cf\0\u0c81"+ + "\0\u1230\0\u1291\0\u12f2\0\u1353\0\u13b4\0\u1415\0\u1476\0\u14d7"+ + "\0\u1538\0\u1599\0\u15fa\0\u165b\0\u16bc\0\u171d\0\u177e\0\u17df"+ + "\0\u1840\0\u18a1\0\u1902\0\u11cf\0\u1963\0\u19c4\0\u0c81\0\u1a25"+ + "\0\u0c81\0\u1a86\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u1ae7\0\u0c81\0\u1b48\0\u1ba9\0\u0c81\0\u0c81\0\u1c0a"+ + "\0\u1c6b\0\u1ccc\0\u1d2d\0\u1d8e\0\u1def\0\u1e50\0\u1eb1\0\u0c81"+ + "\0\u1f12\0\u1f73\0\u1fd4\0\u0c81\0\u2035\0\u2096\0\u20f7\0\u2158"+ + "\0\u21b9\0\u221a\0\u227b\0\u22dc\0\u233d\0\u239e\0\u23ff\0\u2460"+ + "\0\u24c1\0\u2522\0\u2583\0\u25e4\0\u2645\0\u26a6\0\u0c81\0\u0c81"+ + "\0\u2707\0\u0c81\0\u2768\0\u27c9\0\u0c81\0\u282a\0\u0c81\0\u288b"+ + "\0\u0c81\0\u27c9\0\u28ec\0\u0c81\0\u294d\0\u29ae\0\u2a0f\0\u2a70"+ + "\0\u2ad1\0\u2b32\0\u0c81\0\u2b93\0\u2bf4\0\u2c55\0\u2cb6\0\u2d17"+ + "\0\u2d78\0\u2dd9\0\u2e3a\0\u0c81\0\u2e9b\0\u2efc\0\u2f5d\0\u2fbe"+ + "\0\u0c81\0\u301f\0\u0c81\0\u3080\0\u30e1\0\u3142\0\u31a3\0\u3204"+ + "\0\u3265\0\u32c6\0\u2035\0\u3327\0\u3388\0\u33e9\0\u344a\0\u34ab"+ + "\0\u350c\0\u356d\0\u35ce\0\u362f\0\u3690\0\u36f1\0\u3752\0\u37b3"+ + "\0\u3814\0\u3875\0\u38d6\0\u3937\0\u3998\0\u39f9\0\u3a5a\0\u3abb"+ + "\0\u3b1c\0\u3b7d\0\u3bde\0\u3c3f\0\u3ca0\0\u0c81\0\u3d01\0\u3d62"+ + "\0\u3dc3\0\u0c81\0\u3e24\0\u3e85\0\u0c81\0\u0c81\0\u3ee6\0\u3f47"+ + "\0\u3fa8\0\u0c81\0\u4009\0\u0c81\0\u0c81\0\u0c81\0\u406a\0\u0c81"+ + "\0\u40cb\0\u412c\0\u418d\0\u41ee\0\u0c81\0\u424f\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u406a\0\u40cb\0\u42b0\0\u4311\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u0c81\0\u406a\0\u0c81\0\u4372\0\u43d3\0\u4434\0\u4495\0\u44f6"+ + "\0\u4557\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81\0\u0c81"+ + "\0\u45b8\0\u4619\0\u0c81\0\u27c9\0\u467a\0\u0c81\0\u46db\0\u0c81"+ + "\0\u473c\0\u0c81\0\u479d\0\u47fe\0\u485f\0\u48c0\0\u4921\0\u0c81"+ + "\0\u4982\0\u49e3\0\u4a44\0\u4aa5\0\u4b06\0\u4b67\0\u4bc8\0\u4c29"+ + "\0\u4c8a\0\u4ceb\0\u4d4c\0\u4dad\0\u4e0e\0\u4e6f\0\u4ed0\0\u4f31"+ + "\0\u4f92\0\u4ff3\0\u5054\0\u50b5\0\u5116\0\u5177\0\u51d8\0\u5239"+ + "\0\u529a\0\u52fb\0\u535c\0\u53bd\0\u541e\0\u547f\0\u54e0\0\u5541"+ + "\0\u55a2\0\u5603\0\u5664\0\u56c5\0\u5726\0\u5787\0\u57e8\0\u5849"+ + "\0\u58aa\0\u590b\0\u596c\0\u59cd\0\u5a2e\0\u5a8f\0\u5af0\0\u5b51"+ + "\0\u5bb2\0\u5c13\0\u5c74\0\u5cd5\0\u5d36\0\u5d97\0\u5df8\0\u5e59"+ + "\0\u5eba\0\u5f1b\0\u5f7c\0\u5fdd\0\u603e\0\u609f\0\u6100\0\u6161"+ + "\0\u61c2\0\u6223\0\u6284\0\u62e5\0\u6346\0\u63a7\0\u6408\0\u6469"+ + "\0\u64ca\0\u652b\0\u0c81\0\u1f12\0\u658c\0\u65ed\0\u664e\0\u0c81"+ + "\0\u66af\0\u6710\0\u664e\0\u6771\0\u67d2\0\u6833\0\u6894\0\u6894"+ + "\0\u68f5\0\u6894\0\u6956\0\u69b7\0\u6a18\0\u6a79\0\u6ada\0\u6b3b"+ + "\0\u1c6b\0\u6b9c\0\u6bfd\0\u6c5e\0\u6cbf\0\u6d20\0\u6d81\0\u6de2"+ + "\0\u6e43\0\u6ea4\0\u6f05\0\u6f66\0\u6fc7\0\u7028\0\u7089\0\u70ea"+ + "\0\u714b\0\u71ac\0\u720d\0\u726e\0\u72cf\0\u7330\0\u7391\0\u73f2"+ + "\0\u7453\0\u74b4\0\u7515\0\u7576\0\u75d7\0\u7638\0\u7699\0\u76fa"+ + "\0\u775b\0\u77bc\0\u781d\0\u787e\0\u78df\0\u7940\0\u79a1\0\u7a02"+ + "\0\u7a63\0\u7ac4\0\u7b25\0\u7b86\0\u7be7\0\u7c48\0\u7ca9\0\u0c81"+ + "\0\u7d0a\0\u7d6b\0\u7dcc\0\u7e2d\0\u0c81\0\u7e8e\0\u7eef\0\u7f50"+ + "\0\u7fb1\0\u8012\0\u8073\0\u0c81\0\u0c81\0\u80d4\0\u8135\0\u8196"+ + "\0\u81f7\0\u8258\0\u82b9\0\u831a\0\u837b\0\u83dc\0\u843d\0\u849e"+ + "\0\u84ff\0\u8560\0\u85c1\0\u8622\0\u8683\0\u86e4\0\u8745\0\u87a6"+ + "\0\u8807\0\u8868\0\u88c9\0\u892a\0\u898b\0\u89ec\0\u8a4d\0\u8aae"+ + "\0\u8b0f\0\u8b70\0\u8bd1\0\u8c32\0\u8c93\0\u8cf4\0\u8d55\0\u8db6"+ + "\0\u8e17\0\u8e78\0\u8ed9\0\u0c81\0\u8f3a\0\u8f9b\0\u8ffc\0\u905d"+ + "\0\u90be\0\u911f\0\u9180\0\u91e1\0\u9242\0\u92a3\0\u9304\0\u9365"+ + "\0\u93c6\0\u9427\0\u9488\0\u94e9\0\u954a\0\u95ab\0\u960c\0\u966d"+ + "\0\u96ce\0\u972f\0\u9790\0\u97f1\0\u9852\0\u98b3\0\u9914\0\u9975"+ + "\0\u99d6\0\u9a37\0\u9a98\0\u9af9\0\u9b5a\0\u9bbb\0\u9c1c\0\u9c7d"+ + "\0\u9cde\0\u9d3f\0\u9da0\0\u9e01\0\u9e62\0\u9ec3\0\u9f24\0\u9f85"+ + "\0\u9fe6\0\ua047\0\ua0a8\0\ua109\0\ua16a\0\ua1cb\0\ua22c\0\ua28d"+ + "\0\ua2ee\0\ua34f\0\ua3b0\0\ua411\0\ua472\0\ua4d3\0\ua534\0\ua595"+ + "\0\ua5f6\0\ua657\0\ua6b8\0\ua719\0\ua77a\0\ua7db\0\ua83c\0\ua89d"+ + "\0\ua8fe\0\ua95f\0\ua9c0\0\uaa21\0\uaa82\0\uaae3\0\uab44\0\uaba5"+ + "\0\uac06\0\uac67\0\uacc8\0\uad29\0\uad8a\0\uadeb\0\uae4c\0\uaead"+ + "\0\uaf0e\0\uaf6f\0\uafd0\0\ub031\0\ub092\0\ub0f3\0\ub154\0\ub1b5"+ + "\0\ub216\0\ub277\0\ub2d8\0\ub339\0\ub39a\0\ub3fb\0\ub45c\0\ub4bd"+ + "\0\ub51e\0\ub57f\0\ub5e0\0\ub641\0\ub6a2\0\ub703\0\ub764\0\ub7c5"+ + "\0\ub826\0\ub887\0\ub8e8\0\ub949\0\ub9aa\0\uba0b\0\uba6c\0\ubacd"+ + "\0\ubb2e\0\ubb8f\0\ubbf0\0\ubc51\0\ubcb2\0\ubd13\0\ubd74\0\ubdd5"+ + "\0\ube36\0\ube97\0\ubef8\0\ubf59\0\ubfba\0\uc01b\0\uc07c\0\uc0dd"+ + "\0\uc13e\0\uc19f\0\uc200\0\uc261\0\uc2c2\0\uc323\0\uc384\0\uc3e5"+ + "\0\uc446\0\uc4a7\0\uc508\0\uc569\0\uc5ca\0\uc62b\0\uc68c\0\uc6ed"+ + "\0\uc74e\0\uc7af\0\uc810\0\uc871\0\uc8d2\0\uc933\0\uc994\0\uc9f5"+ + "\0\u1c6b\0\uca56\0\ucab7\0\ucb18\0\ucb79\0\ucbda\0\ucc3b\0\ucc9c"+ + "\0\uccfd\0\ucd5e\0\ucdbf\0\uce20\0\uce81\0\ucee2\0\ucf43\0\ucfa4"+ + "\0\ud005\0\ud066\0\ud0c7\0\ud128\0\ud189\0\ud1ea\0\ud24b\0\ud2ac"+ + "\0\ud30d\0\ud36e\0\ud3cf\0\ud430\0\ud491\0\ud4f2\0\ud553\0\ud5b4"+ + "\0\ud615\0\ud676\0\ud6d7\0\ud738\0\ud799\0\ud7fa\0\ud85b\0\ud8bc"+ + "\0\ud91d\0\ud97e\0\ud9df\0\u0c81\0\u0c81\0\uda40\0\u0c81\0\udaa1"+ + "\0\u0c81\0\udb02\0\udb63\0\udbc4\0\udc25\0\udc86\0\udce7\0\udd48"+ + "\0\udda9\0\ude0a\0\ude6b\0\udecc\0\udf2d\0\udf8e\0\udfef\0\ue050"+ + "\0\u0c81\0\ue0b1\0\ue112\0\ue173\0\ue1d4\0\ue235\0\u44f6\0\ue296"+ + "\0\u0c81\0\u0c81\0\u0c81\0\u479d\0\ue2f7\0\ue358\0\ue3b9\0\ue41a"+ + "\0\u0c81\0\ue47b\0\ue4dc\0\ue53d\0\ue59e\0\ue5ff\0\ue660\0\ue6c1"+ + "\0\ue722\0\ue783\0\ue7e4\0\ue845\0\ue8a6\0\ue907\0\ue968\0\ue9c9"+ + "\0\uea2a\0\uea8b\0\ueaec\0\ueb4d\0\uebae\0\uec0f\0\uec70\0\uecd1"+ + "\0\ued32\0\ued93\0\uedf4\0\uee55\0\ueeb6\0\uef17\0\uef78\0\uefd9"+ + "\0\uf03a\0\uf09b\0\uf0fc\0\uf15d\0\u5603\0\uf1be\0\uf21f\0\uf280"+ + "\0\uf2e1\0\uf342\0\uf3a3\0\uf404\0\uf465\0\uf4c6\0\uf527\0\uf588"+ + "\0\uf5e9\0\uf64a\0\uf6ab\0\uf70c\0\uf76d\0\uf7ce\0\uf82f\0\uf890"+ + "\0\uf8f1\0\uf952\0\uf9b3\0\ufa14\0\ufa75\0\ufad6\0\ufb37\0\ufb98"+ + "\0\u1599\0\ufbf9\0\ufc5a\0\ufcbb\0\ufd1c\0\ufd7d\0\ufdde\0\ufe3f"+ + "\0\ufea0\0\uff01\0\uff62\0\uffc3\1\44\1\205\1\346\0\u6894"+ + "\1\u0147\1\u01a8\1\u0209\1\u026a\1\u02cb\1\u032c\1\u038d\1\u03ee"+ + "\1\u044f\1\u04b0\1\u0511\1\u0572\1\u05d3\1\u0634\1\u0695\1\u06f6"+ + "\1\u0757\1\u07b8\1\u0819\1\u087a\1\u08db\1\u093c\1\u099d\1\u09fe"+ + "\1\u0a5f\0\u1c6b\1\u0ac0\1\u0b21\1\u0b82\1\u0be3\1\u0c44\1\u0ca5"+ + "\1\u0d06\1\u0d67\1\u0dc8\1\u0e29\1\u0e8a\1\u0eeb\1\u0f4c\1\u0fad"+ + "\1\u100e\1\u106f\1\u10d0\1\u1131\1\u1192\1\u11f3\1\u1254\1\u12b5"+ + "\1\u1316\1\u1377\1\u13d8\1\u1439\1\u149a\1\u14fb\1\u155c\1\u15bd"+ + "\1\u161e\1\u167f\1\u16e0\1\u1741\1\u17a2\1\u1803\1\u1864\1\u18c5"+ + "\1\u1926\1\u1987\1\u19e8\1\u1a49\1\u1aaa\1\u1b0b\1\u1b6c\1\u1bcd"+ + "\1\u1c2e\1\u1c8f\1\u1cf0\1\u1d51\1\u1db2\1\u1e13\1\u1e74\1\u1ed5"+ + "\1\u1f36\1\u1f97\1\u1ff8\1\u2059\1\u20ba\1\u211b\1\u217c\1\u21dd"+ + "\1\u223e\1\u229f\1\u2300\1\u2361\1\u23c2\1\u2423\1\u2484\1\u24e5"+ + "\1\u2546\1\u25a7\1\u2608\1\u2669\1\u26ca\1\u272b\1\u278c\1\u27ed"+ + "\1\u284e\1\u28af\1\u2910\1\u2971\1\u29d2\1\u2a33\0\uff62\1\u2a94"+ + "\1\u2af5\1\u2b56\1\u2bb7\1\u2c18\1\u2c79\1\u2cda\1\u2d3b\1\u2d9c"+ + "\1\u2dfd\1\u2e5e\1\u2ebf\1\u2f20\1\u2f81\1\u2fe2\1\u3043\1\u30a4"+ + "\1\u3105\1\u3166\1\u31c7\1\u3228\1\u3289\1\u32ea\1\u334b\1\u33ac"+ + "\1\u340d\1\u346e\1\u34cf\1\u3530\1\u3591\1\u35f2\1\u3653\1\u36b4"+ + "\1\u3715\1\u3776\1\u37d7\1\u3838\1\u3899\1\u38fa\1\u395b\1\u39bc"+ + "\1\u3a1d\1\u3a7e\1\u3adf\1\u3b40\1\u3ba1\1\u3c02\1\u3c63\1\u3cc4"+ + "\1\u3d25\1\u3d86\1\u3de7\1\u3e48\1\u3ea9\1\u3f0a\1\u3f6b\1\u3fcc"+ + "\1\u402d\1\u408e\1\u40ef\1\u4150\1\u41b1\1\u4212\1\u4273\1\u42d4"+ + "\1\u4335\1\u4396\1\u43f7\1\u4458\1\u44b9\1\u451a\1\u457b\1\u45dc"+ + "\1\u463d\1\u469e\1\u46ff\1\u4760\1\u47c1\1\u4822\1\u4883\1\u48e4"+ + "\1\u4945\1\u49a6\1\u4a07\1\u4a68\1\u4ac9\1\u4b2a\1\u4b8b\1\u4bec"+ + "\1\u4c4d\1\u4cae\1\u4d0f\1\u4d70\1\u4dd1\1\u4e32\1\u4e93\1\u4ef4"+ + "\1\u4f55\1\u4fb6\1\u5017\1\u5078\1\u50d9\1\u513a\1\u519b\1\u51fc"+ + "\1\u525d\1\u52be\1\u531f\1\u5380\1\u53e1\1\u5442\1\u54a3\1\u5504"+ + "\1\u5565\1\u55c6\1\u5627\1\u5688\1\u56e9\1\u4b8b\1\u574a\1\u57ab"+ + "\1\u580c\1\u586d\1\u58ce\1\u592f\1\u5990\1\u59f1\1\u5a52\1\u5ab3"+ + "\1\u5b14\1\u5b75\1\u5bd6\1\u5c37\1\u5c98\1\u5cf9\1\u5d5a\1\u5dbb"+ + "\1\u5e1c\1\u5e7d\1\u5ede\1\u5f3f\1\u5fa0\1\u6001\1\u6062\1\u60c3"+ + "\1\u6124\1\u6185\1\u61e6\1\u6247\1\u62a8\1\u6309\1\u636a\1\u63cb"+ + "\1\u642c\1\u648d\1\u64ee\1\u654f\1\u65b0\1\u6611\1\u6672\1\u66d3"+ + "\1\u6734\1\u6795\1\u67f6\1\u6857\1\u68b8\1\u6919\1\u0a5f\1\u697a"+ + "\1\u69db\1\u6a3c\1\u6a9d\1\u6afe\1\u6b5f\1\u6bc0\1\u6c21\1\u6c82"+ + "\1\u6ce3\1\u6d44\1\u6da5\1\u6e06\1\u6e67\1\u6ec8\1\u6f29\1\u6f8a"+ + "\1\u6feb\1\u704c\1\u70ad\1\u710e\1\u716f\1\u71d0\1\u7231\1\u7292"+ + "\1\u72f3\1\u7354\1\u73b5\1\u7416\1\u7477\1\u74d8\1\u7539\1\u759a"+ + "\1\u75fb\1\u765c\1\u76bd\1\u771e\1\u777f\1\u77e0\1\u7841\1\u78a2"+ + "\1\u7903\1\u7964\1\u79c5\1\u7a26\1\u7a87\1\u7ae8\1\u7b49\1\u7baa"+ + "\1\u7c0b\1\u7c6c\1\u7ccd\1\u7d2e\1\u7d8f\1\u7df0\1\u7e51\1\u7eb2"+ + "\1\u7f13\1\u7f74\1\u7fd5\1\u8036\1\u8097\1\u80f8\1\u8159\1\u81ba"+ + "\1\u821b\1\u827c\1\u82dd\1\u833e\1\u839f\1\u8400\1\u8461\1\u84c2"+ + "\1\u8523\1\u8584\1\u85e5\1\u8646\1\u86a7\1\u8708\1\u8769\1\u87ca"+ + "\1\u882b\1\u888c\1\u88ed\1\u894e\1\u89af\1\u8a10\1\u8a71\1\u8ad2"+ + "\1\u8b33\1\u8b94\1\u8bf5\1\u8c56\1\u8cb7\1\u8d18\1\u8d79\1\u8dda"+ + "\1\u8e3b\1\u8e9c\1\u8efd\1\u8f5e\1\u8fbf\1\u9020\1\u9081\1\u90e2"+ + "\1\u9143\1\u91a4\1\u9205\1\u9266\1\u92c7\1\u9328\1\u9389\1\u93ea"+ + "\1\u944b\1\u94ac\1\u950d\1\u956e\1\u95cf\1\u9630\1\u9691\1\u96f2"+ + "\1\u9753\1\u97b4\1\u9815\1\u9876\1\u98d7\1\u9938\1\u9999\1\u99fa"+ + "\1\u9a5b\1\u9abc\1\u9b1d\1\u9b7e\1\u9bdf\1\u9c40\1\u9ca1\1\u9d02"+ + "\1\u9d63\1\u9dc4\1\u9e25\1\u9e86\1\u9ee7\1\u9f48\1\u9fa9\1\ua00a"+ + "\1\ua06b\1\ua0cc\1\ua12d\1\ua18e\1\ua1ef\1\ua250\1\u4b2a\1\ua2b1"+ + "\1\ua312\1\ua373\1\ua3d4\1\ua435\1\ua496\1\ua4f7\1\ua558\1\ua5b9"+ + "\1\ua61a\1\ua67b\1\ua6dc\1\ua73d\1\ua79e\1\ua7ff\1\ua860\1\ua8c1"+ + "\1\ua922\1\ua983\1\ua9e4\1\uaa45\1\uaaa6\1\uab07\1\uab68\1\uabc9"+ + "\1\uac2a\1\uac8b\1\uacec\1\uad4d\1\uadae\1\uae0f\1\uae70\1\uaed1"+ + "\1\uaf32\1\uaf93\1\uaff4\1\ub055\1\ub0b6\1\ub117\1\ub178\1\ub1d9"+ + "\1\ub23a\1\ub29b\1\ub2fc\1\ub35d\1\ub3be\1\ub41f\1\ub480\1\ub4e1"+ + "\1\ub542\1\ub5a3\1\ub604\1\ub665\1\ub6c6\1\ub727\1\ub788\1\ub7e9"+ + "\1\ub84a\1\ub8ab\1\ub90c\1\ub96d\1\ub9ce\1\uba2f\1\uba90\1\ubaf1"+ + "\1\ubb52\1\ubbb3\1\ubc14\1\ubc75\1\ubcd6\1\ubd37\1\ubd98\1\ubdf9"+ + "\1\ube5a\1\ubebb\1\ubf1c\1\ubf7d\1\ubfde\1\uc03f\1\uc0a0\1\uc101"+ + "\1\uc162\1\uc1c3\1\uc224\1\uc285\1\uc2e6\1\uc347\1\uc3a8\1\uc409"+ + "\1\uc46a\1\uc4cb\1\uc52c\0\u0c81\1\uc58d\1\uc5ee\1\uc64f\1\uc6b0"+ + "\1\uc711\1\uc772\1\uc7d3\1\uc834\1\uc895\1\uc8f6\1\uc957\1\uc9b8"+ + "\1\uca19\1\uca7a\1\ucadb\1\ucb3c\1\ucb9d\1\ucbfe\1\ucc5f\1\uccc0"+ + "\1\ucd21\1\ucd82\1\ucde3\1\uce44\1\ucea5\1\ucf06\1\ucf67\1\ucfc8"+ + "\1\ud029\1\ud08a\1\ud0eb\1\ud14c\1\ud1ad\1\ud20e\1\ud26f\1\ud2d0"+ + "\0\u5726\1\ud331\0\uf03a\1\ud392\1\ud3f3\1\ud454\1\ud4b5\0\u0c81"+ + "\1\ud516\1\ud577\1\ud5d8\1\ud639\1\ud69a\1\ud6fb\1\ud75c\1\ud7bd"+ + "\0\u1c6b\1\ud81e\1\ud87f\1\ud8e0\1\ud941\0\u1c6b\1\ud9a2\1\uda03"+ + "\1\uda64\1\udac5\1\udb26\0\u1c6b\1\udb87\1\udbe8\1\udc49\1\udcaa"+ + "\1\udd0b\1\udd6c\1\uddcd\1\ude2e\1\ude8f\1\udef0\1\udf51\1\udfb2"+ + "\1\ue013\1\ue074\1\ue0d5\1\ue136\0\u7d6b\0\u0c81\1\ue197\1\ue1f8"+ + "\1\ue259\1\ue2ba\1\ue31b\1\ue37c\1\ue3dd\1\ue43e\1\ue49f\1\ue500"+ + "\1\ue561\1\ue5c2\1\ue623\1\ue684\1\ue6e5\1\ue746\1\ue7a7\1\ue808"+ + "\1\ue869\1\ue8ca\1\ue92b\1\ue98c\1\ue9ed\1\uea4e\1\ueaaf\1\ueb10"+ + "\1\ueb71\1\uebd2\1\uec33\1\uec94\1\uecf5\1\ued56\1\uedb7\1\uee18"+ + "\1\uee79\1\ueeda\1\uef3b\1\uef9c\1\ueffd\1\uf05e\1\uf0bf\0\u0c81"+ + "\1\uf120\1\uf181\1\uf1e2\1\uf243\1\uf2a4\1\uf305\1\uf366\1\uf3c7"+ + "\1\uf428\1\uf489\1\uf4ea\1\uf54b\1\uf5ac\1\uf60d\1\uf66e\1\uf6cf"+ + "\1\uf730\1\uf791\1\uf7f2\1\uf853\1\uf8b4\1\uf915\1\uf976\1\uf9d7"+ + "\1\ufa38\1\ufa99\1\ufafa\1\ufb5b\1\ufbbc\1\ufc1d\1\ufc7e\1\ufcdf"+ + "\1\ufd40\1\ufda1\1\ufe02\1\ufe63\1\ufec4\1\uff25\1\uff86\1\uffe7"+ + "\2\110\2\251\2\u010a\2\u016b\2\u01cc\2\u022d\2\u028e\2\u02ef"+ + "\2\u0350\2\u03b1\2\u0412\2\u0473\2\u04d4\2\u0535\2\u0596\2\u05f7"+ + "\2\u0658\2\u06b9\2\u071a\2\u077b\2\u07dc\2\u083d\2\u089e\2\u08ff"+ + "\2\u0960\2\u09c1\2\u0a22\2\u0a83\2\u0ae4\2\u0b45\2\u0ba6\2\u0c07"+ + "\2\u0c68\2\u0cc9\2\u0d2a\2\u0d8b\2\u04d4\2\u0dec\2\u0e4d\2\u0eae"+ + "\2\u0f0f\2\u0f70\2\u0fd1\2\u1032\2\u1093\2\u10f4\2\u1155\2\u11b6"+ + "\2\u1217\2\u1278\2\u12d9\2\u133a\2\u139b\2\u13fc\2\u145d\2\u14be"+ + "\2\u151f\2\u1580\2\u15e1\2\u1642\2\u16a3\2\u1704\2\u1765\2\u17c6"+ + "\2\u1827\2\u1888\2\u18e9\2\u194a\2\u19ab\2\u1a0c\2\u1a6d\2\u1ace"+ + "\2\u1b2f\2\u1b90\2\u1bf1\2\u1c52\2\u1cb3\2\u1d14\2\u1d75\2\u1dd6"+ + "\2\u1e37\2\u1e98\2\u1ef9\2\u1f5a\2\u1fbb\2\u201c\2\u207d\2\u20de"+ + "\2\u213f\2\u21a0\2\u2201\2\u2262\2\u22c3\2\u2324\2\u2385\2\u23e6"+ + "\2\u2447\2\u24a8\2\u2509\2\u256a\2\u25cb\2\u262c\2\u268d\2\u26ee"+ + "\2\u274f\2\u27b0\2\u2811\2\u2872\2\u28d3\2\u2934\2\u2995\2\u29f6"+ + "\2\u2a57\2\u2ab8\2\u2b19\2\u2b7a\2\u2bdb\2\u2c3c\2\u2c9d\2\u2cfe"+ + "\2\u2d5f\2\u2dc0\2\u2e21\2\u2e82\2\u2ee3\2\u2f44\0\u1c6b\2\u2fa5"+ + "\2\u3006\2\u3067\2\u30c8\2\u3129\2\u318a\2\u31eb\2\u324c\2\u32ad"+ + "\2\u330e\2\u336f\2\u33d0\2\u3431\2\u3492\2\u34f3\2\u3554\2\u35b5"+ + "\2\u3616\2\u3677\2\u36d8\2\u3739\2\u379a\2\u37fb\2\u385c\2\u38bd"+ + "\2\u391e\2\u397f\2\u39e0\2\u3a41\2\u3aa2\2\u3b03\2\u3b64\2\u3bc5"+ + "\2\u3c26\2\u3c87\2\u3ce8\2\u3d49\2\u3daa\2\u3e0b\2\u3e6c\2\u3ecd"+ + "\2\u3f2e\2\u3f8f\1\u8fbf\2\u3ff0\2\u4051\2\u40b2\2\u4113\2\u4174"+ + "\2\u41d5\2\u4236\2\u4297\2\u42f8\2\u4359\2\u43ba\2\u441b\2\u447c"+ + "\2\u44dd\2\u453e\2\u459f\2\u4600\2\u4661\2\u46c2\2\u4723\2\u4784"+ + "\2\u47e5\2\u4846\2\u48a7\2\u4908\2\u4969\1\udb87\2\u49ca\2\u4a2b"+ + "\2\u4a8c\2\u4aed\2\u4b4e\2\u4baf\2\u4c10\2\u4c71\2\u4cd2\2\u4d33"+ + "\2\u4d94\2\u4df5\2\u4e56\2\u4eb7\2\u4f18\2\u4f79\2\u4fda\2\u503b"+ + "\2\u509c\2\u50fd\2\u515e\2\u51bf\2\u5220\2\u5281\2\u52e2\2\u5343"+ + "\2\u53a4\2\u5405\2\u5466\2\u54c7\2\u5528\2\u5589\2\u55ea\2\u564b"+ + "\2\u56ac\2\u570d\2\u576e\2\u57cf\2\u5830\2\u5891\2\u58f2\2\u5953"+ + "\2\u59b4\2\u5a15\2\u5a76\2\u5ad7\2\u5b38\2\u5b99\2\u5bfa\2\u5c5b"+ + "\2\u5cbc\2\u5d1d\2\u5d7e\2\u5ddf\2\u5e40\2\u5ea1\2\u5f02\2\u5f63"+ + "\2\u5fc4\2\u6025\2\u6086\2\u60e7\2\u6148\2\u61a9\2\u620a\2\u626b"+ + "\2\u62cc\2\u632d\2\u638e\2\u63ef\2\u6450\2\u64b1\2\u6512\2\u6573"+ + "\2\u65d4\2\u6635\2\u6696\2\u66f7\2\u6758\2\u67b9\2\u681a\2\u687b"+ + "\2\u68dc\2\u693d\2\u699e\2\u69ff\2\u6a60\2\u6ac1\2\u6b22\2\u6b83"+ + "\2\u6be4\2\u6c45\2\u6ca6\2\u6d07\2\u6d68\2\u6dc9\2\u6e2a\2\u6e8b"+ + "\2\u6eec\2\u6f4d\2\u6fae\2\u700f\2\u7070\2\u70d1\2\u7132\2\u7193"+ + "\2\u71f4\2\u7255\2\u72b6\2\u7317\0\ua0a8\2\u7378\2\u73d9\2\u743a"+ + "\2\u749b\2\u74fc\2\u755d\2\u75be\2\u761f\2\u7680\2\u76e1\2\u7742"+ + "\2\u77a3\2\u7804\2\u7865\2\u78c6\2\u7927\2\u7988\2\u79e9\2\u7a4a"+ + "\2\u7aab\2\u7b0c\2\u7b6d\2\u7bce\2\u7c2f\2\u7c90\2\u7cf1\2\u7d52"+ + "\2\u7db3\2\u7e14\2\u7e75\2\u7ed6\2\u7f37\1\u88ed\2\u7f98\2\u7ff9"+ + "\2\u805a\2\u80bb\2\u811c\2\u817d\2\u81de\2\u823f\2\u82a0\2\u8301"+ + "\2\u8362\2\u83c3\2\u8424\2\u8485\2\u84e6\2\u8547\2\u85a8\2\u8609"+ + "\2\u866a\2\u86cb\2\u872c\2\u878d\2\u87ee\2\u884f\2\u88b0\2\u8911"+ + "\2\u8972\2\u89d3\2\u8a34\2\u8a95\2\u8af6\2\u8b57\2\u8bb8\2\u8c19"+ + "\2\u8c7a\2\u8cdb\2\u8d3c\2\u8d9d\2\u8dfe\2\u8e5f\2\u8ec0\2\u8f21"+ + "\2\u8f82\2\u8fe3\2\u9044\2\u90a5\2\u9106\2\u9167\2\u91c8\2\u9229"+ + "\2\u928a\2\u92eb\2\u934c\2\u93ad\2\u940e\2\u946f\2\u94d0\2\u9531"+ + "\2\u9592\2\u95f3\2\u9654\2\u96b5\2\u9716\2\u9777\2\u97d8\2\u9839"+ + "\2\u989a\2\u98fb\2\u995c\2\u99bd\2\u9a1e\2\u9a7f\2\u9ae0\2\u9b41"+ + "\2\u9ba2\2\u9c03\2\u9c64\2\u9cc5\2\u9d26\2\u9d87\2\u9de8\2\u9e49"+ + "\2\u9eaa\2\u9f0b\2\u9f6c\2\u9fcd\2\ua02e\2\ua08f\2\ua0f0\2\ua151"+ + "\2\ua1b2\2\ua213\2\ua274\2\ua2d5\2\ua336\2\ua397\2\ua3f8\2\ua459"+ + "\2\ua4ba\2\ua51b\2\ua57c\2\ua5dd\2\ua63e\2\ua69f\2\ua700\2\ua761"+ + "\2\ua7c2\2\ua823\2\ua884\2\ua8e5\2\ua946\2\ua9a7\2\uaa08\2\uaa69"+ + "\2\uaaca\2\uab2b\2\uab8c\2\uabed\2\uac4e\2\uacaf\2\uad10\2\uad71"+ + "\2\uadd2\2\uae33\2\uae94\2\uaef5\2\uaf56\2\uafb7\2\ub018\2\ub079"+ + "\2\ub0da\2\ub13b\2\ub19c\2\ub1fd\2\ub25e\2\ub2bf\2\ub320\2\ub381"+ + "\2\ub3e2\2\ub443\2\ub4a4\2\ub505\2\ub566\2\ub5c7\2\ub628\2\ub689"+ + "\2\ub6ea\2\ub74b\2\ub7ac\2\ub80d\2\ub86e\2\ub8cf\2\ub930\2\ub991"+ + "\2\ub9f2\2\uba53\2\ubab4\2\ubb15\2\ubb76\2\ubbd7\0\u0c81\2\ubc38"+ + "\2\ubc99\2\ubcfa\2\ubd5b\2\ubdbc\2\ube1d\0\u0c81\2\ube7e\1\uc6b0"+ + "\0\u104b\2\ubedf\2\ubf40\2\ubfa1\2\uc002\2\uc063\2\uc0c4\2\uc125"+ + "\2\uc186\2\uc1e7\2\uc248\2\uc2a9\2\uc30a\2\uc36b\2\uc3cc\2\uc42d"+ + "\2\uc48e\2\uc48e\2\uc4ef\2\uc550\2\uc5b1\0\u0c81\2\uc612\0\u0c81"+ + "\2\uc673\2\uc6d4\2\uc735\2\uc796\2\uc7f7\2\uc858\1\u04b0\2\uc8b9"+ + "\2\uc91a\2\uc97b\2\uc9dc\2\uca3d\2\uca9e\2\ucaff\2\ucb60\2\ucbc1"+ + "\2\ucc22\2\ucc83\2\ucce4\2\ucd45\2\ucda6\0\u0c81\0\u0c81\2\uce07"+ + "\2\uce68\1\ue31b\2\ucec9\1\ue43e\2\ucf2a\2\ucf8b\2\ucfec\2\ud04d"+ + "\2\ud0ae\2\ud10f\2\ud170\2\ud1d1\2\ud232\2\ud293\2\ud2f4\2\ud355"+ + "\2\ud3b6\2\ud417\2\ud478\2\ud4d9\2\ud53a\2\ud59b\2\ud5fc\2\ud65d"+ + "\2\ud6be\2\ud71f\2\ud780\2\ud7e1\2\ud842\2\ud8a3\2\ud904\2\ud965"+ + "\2\ud9c6\2\uda27\2\uda88\2\udae9\2\udb4a\2\udbab\2\udc0c\2\udc6d"+ + "\2\udcce\2\udd2f\2\udd90\2\uddf1\1\uf8b4\2\ude52\2\udeb3\2\udf14"+ + "\2\udf75\2\udfd6\2\ue037\2\ue098\2\ue0f9\2\ue15a\2\ue1bb\2\ue21c"+ + "\2\ue27d\2\ue2de\2\ue33f\2\ue3a0\2\ue401\2\ue462\2\ue4c3\2\ue524"+ + "\2\ue585\2\ue5e6\2\ue647\2\ue6a8\2\ue709\2\ue76a\2\ue7cb\0\ucc9c"+ + "\2\ue82c\2\ue88d\2\ue8ee\2\ue94f\2\ue9b0\2\uea11\2\uea72\2\uead3"+ + "\2\ueb34\2\ueb95\2\uebf6\2\uec57\2\uecb8\2\ued19\2\ued7a\2\ueddb"+ + "\2\uee3c\2\uee9d\2\ueefe\2\uef5f\2\uefc0\2\uf021\2\uf082\2\uf0e3"+ + "\2\uf144\2\uf1a5\2\uf206\2\uf267\2\uf2c8\2\uf329\2\uf38a\2\uf3eb"+ + "\2\uf44c\2\uf4ad\2\uf50e\2\uf56f\2\uf5d0\2\uf631\2\uf692\2\uf6f3"+ + "\2\uf754\2\uf7b5\2\uf816\2\uf877\2\uf8d8\2\uf939\2\uf99a\2\uf9fb"+ + "\2\ufa5c\2\ufabd\2\ufb1e\2\ufb7f\2\ufbe0\2\ufc41\2\ufca2\2\ufd03"+ + "\2\ufd64\2\ufdc5\2\ufe26\2\ufe87\2\ufee8\2\uff49\2\uffaa\3\13"+ + "\3\154\3\315\3\u012e\3\u018f\3\u01f0\3\u0251\3\u02b2\3\u0313"+ + "\3\u0374\3\u03d5\3\u0436\3\u0497\3\u04f8\3\u0559\3\u05ba\3\u061b"+ + "\3\u067c\3\u06dd\3\u073e\3\u079f\3\u0800\3\u0861\3\u08c2\3\u0923"+ + "\3\u0984\3\u09e5\3\u0a46\3\u0aa7\3\u0b08\3\u0b69\3\u0bca\3\u0c2b"+ + "\3\u0c8c\3\u0ced\3\u0d4e\3\u0daf\3\u0e10\3\u0e71\3\u0ed2\3\u0f33"+ + "\3\u0f94\3\u0ff5\3\u1056\3\u10b7\3\u1118\3\u1179\3\u11da\3\u123b"+ + "\3\u129c\3\u12fd\3\u135e\3\u13bf\3\u1420\3\u1481\3\u14e2\3\u1543"+ + "\3\u15a4\3\u1605\3\u1666\3\u16c7\3\u1728\3\u1789\3\u17ea\3\u184b"+ + "\3\u18ac\3\u190d\3\u196e\3\u19cf\3\u1a30\3\u1a91\3\u1af2\3\u1b53"+ + "\3\u1bb4\3\u1c15\3\u1c76\3\u1cd7\3\u1cd7\3\u1d38\3\u1d99\3\u1dfa"+ + "\3\u1e5b\3\u1ebc\3\u1f1d\3\u1f7e\3\u1fdf\3\u2040\3\u20a1\3\u2102"+ + "\3\u2163\3\u21c4\3\u2225\3\u2286\3\u22e7\3\u2348\3\u23a9\3\u240a"+ + "\3\u246b\3\u24cc\3\u252d\3\u258e\3\u25ef\3\u2650\3\u26b1\3\u2712"+ + "\3\u2773\3\u27d4\3\u2835\3\u2896\3\u28f7\3\u2958\3\u29b9\3\u2a1a"+ + "\3\u2a7b\3\u2adc\3\u2b3d\3\u2b9e\3\u2bff\3\u2c60\3\u2cc1\3\u2d22"+ + "\3\u2d83\3\u2de4\3\u2e45\3\u2ea6\3\u2f07\3\u2f68\3\u2fc9\3\u302a"+ + "\3\u308b\3\u30ec\3\u314d\3\u31ae\3\u320f\3\u1c76\2\u34f3\3\u3270"+ + "\3\u32d1\3\u3332\3\u3393\3\u33f4\3\u3455\3\u34b6\3\u3517\3\u3578"+ + "\3\u35d9\3\u363a\3\u369b\3\u36fc\3\u375d\3\u37be\3\u381f\3\u3880"+ + "\3\u38e1\3\u3942\3\u39a3\3\u3a04\3\u3a65\3\u3ac6\3\u3b27\3\u3b88"+ + "\3\u3be9\3\u3c4a\3\u3cab\3\u3d0c\3\u3d6d\3\u3dce\3\u3e2f\3\u3e90"+ + "\3\u3ef1\3\u3f52\3\u3fb3\3\u4014\3\u4075\3\u40d6\3\u4137\3\u4198"+ + "\3\u41f9\3\u425a\3\u42bb\3\u431c\3\u437d\3\u43de\3\u443f\3\u44a0"+ + "\3\u4501\3\u4562\3\u45c3\3\u4624\3\u4685\3\u46e6\3\u4747\3\u47a8"+ + "\3\u4809\3\u486a\3\u48cb\3\u492c\3\u498d\3\u49ee\3\u4a4f\3\u4ab0"+ + "\3\u4b11\3\u4b72\3\u4bd3\3\u4c34\3\u4c95\3\u4cf6\3\u4d57\3\u4db8"+ + "\3\u4e19\3\u4e7a\3\u4edb\3\u4f3c\3\u4f9d\3\u4ffe\3\u505f\3\u50c0"+ + "\3\u5121\3\u5182\3\u51e3\3\u5244\3\u52a5\3\u5306\3\u5367\3\u53c8"+ + "\3\u5429\3\u548a\3\u54eb\3\u554c\3\u55ad\3\u560e\3\u566f\3\u56d0"+ + "\3\u5731\3\u5792\3\u57f3\3\u5854\3\u58b5\3\u5916\3\u5977\3\u59d8"+ + "\3\u5a39\3\u5a9a\3\u5afb\3\u5b5c\3\u5bbd\3\u5c1e\3\u5c7f\3\u5ce0"+ + "\3\u5d41\3\u5da2\3\u5e03\3\u5e64\3\u5ec5\3\u5f26\3\u5f87\3\u5fe8"+ + "\3\u6049\3\u60aa\3\u610b\3\u616c\3\u61cd\3\u622e\3\u628f\3\u62f0"+ + "\3\u6351\3\u63b2\3\u6413\3\u6474\3\u64d5\3\u6536\3\u6597\3\u65f8"+ + "\3\u6659\3\u66ba\3\u671b\3\u677c\3\u67dd\3\u683e\3\u689f\3\u6900"+ + "\3\u6961\3\u69c2\3\u6a23\3\u6a84\3\u6ae5\3\u6b46\3\u6ba7\3\u6c08"+ + "\3\u6c69\3\u6cca\3\u6d2b\3\u6d8c\3\u6ded\3\u6e4e\3\u6eaf\3\u6f10"+ + "\3\u6f71\3\u6fd2\3\u7033\3\u7094\3\u70f5\3\u7156\3\u71b7\3\u7218"+ + "\3\u7279\3\u72da\3\u733b\3\u739c\3\u73fd\3\u745e\3\u74bf\3\u7520"+ + "\3\u7581\3\u75e2\3\u7643\3\u76a4\3\u7705\3\u7766\3\u77c7\3\u7828"+ + "\3\u7889\3\u78ea\3\u794b\3\u79ac\3\u7a0d\3\u7a6e\3\u7acf\3\u7b30"+ + "\3\u7b91\3\u7bf2\3\u7c53\3\u7cb4\3\u7d15\3\u7d76\3\u7dd7\3\u7e38"+ + "\3\u7e99\3\u7efa\3\u7f5b\3\u7fbc\3\u801d\3\u807e\3\u80df\3\u8140"+ + "\3\u81a1\3\u8202\3\u8263\3\u82c4\3\u8325\3\u8386\3\u83e7\3\u8448"+ + "\3\u84a9\3\u850a\3\u856b\3\u85cc\3\u862d\3\u868e\3\u86ef\3\u8750"+ + "\3\u87b1\3\u8812\3\u8873\3\u88d4\3\u8935\3\u8996\3\u89f7\3\u8a58"+ + "\3\u8ab9\3\u8b1a\3\u8b7b\3\u8bdc\3\u8c3d\3\u8c9e\3\u8cff\3\u8d60"+ + "\3\u8dc1\3\u8e22\3\u8e83\3\u8ee4\3\u8f45\3\u8fa6\3\u9007\3\u9068"+ + "\3\u90c9\3\u912a\3\u918b\3\u91ec\3\u924d\3\u92ae\3\u930f\3\u9370"+ + "\3\u93d1\3\u9432\3\u9493\3\u94f4\3\u9555\3\u95b6\3\u9617\3\u9678"+ + "\3\u96d9\3\u973a\3\u979b\3\u97fc\3\u985d\3\u98be\3\u991f\3\u9980"+ + "\3\u99e1\3\u9a42\3\u9aa3\3\u9b04\3\u9b65\3\u9bc6\3\u9c27\3\u9c88"+ + "\3\u9ce9\3\u9d4a\3\u9dab\3\u9e0c\3\u9e6d\3\u9ece\3\u9f2f\3\u9f90"+ + "\3\u9ff1\3\ua052\3\ua0b3\3\ua114\3\ua175\3\ua1d6\3\ua237\3\ua298"+ + "\3\ua2f9\3\ua35a\3\ua3bb\3\ua41c\3\ua47d\3\ua4de\3\ua53f\3\ua5a0"+ + "\3\ua601\3\ua662\3\ua6c3\3\ua724\3\ua785\3\ua7e6\3\ua847\3\ua8a8"+ + "\3\ua909\3\ua96a\3\ua9cb\3\uaa2c\3\uaa8d\3\uaaee\3\uab4f\3\uabb0"+ + "\3\uac11\3\uac72\3\uacd3\3\uad34\3\uad95\3\uadf6\3\uae57\3\uaeb8"+ + "\3\uaf19\3\uaf7a\3\uafdb\3\ub03c\3\ub09d\3\ub0fe\3\ub15f\3\ub1c0"+ + "\3\ub221\3\ub282\3\ub2e3\3\ub344\3\ub3a5\3\ub406\3\ub467\3\ub4c8"+ + "\3\ub529\3\ub58a\3\ub5eb\3\ub64c\3\ub6ad\3\ub70e\3\ub76f\3\ub7d0"+ + "\3\ub831\3\ub892\3\ub8f3\3\ub954\3\ub9b5\3\uba16\3\uba77\3\ubad8"+ + "\3\ubb39\3\ubb9a\3\ubbfb\3\ubc5c\3\ubcbd\3\ubd1e\3\ubd7f\3\ubde0"+ + "\3\ube41\3\ubea2\3\ubf03\3\ubf64\3\ubfc5\3\uc026\3\uc087\3\uc0e8"+ + "\3\uc149\1\u8dda\3\uc1aa\3\uc20b\3\uc26c\3\uc2cd\3\uc32e\3\uc38f"+ + "\3\uc3f0\3\uc451\3\uc4b2\3\uc513\3\uc574\3\uc5d5\3\uc636\3\uc697"+ + "\3\uc6f8\3\uc759\3\uc7ba\3\uc81b\3\uc87c\3\uc8dd\3\uc93e\3\uc99f"+ + "\3\uca00\3\uca61\3\ucac2\3\ucb23\3\ucb84\3\ucbe5\3\ucc46\3\ucca7"+ + "\3\ucd08\3\ucd69\3\ucdca\3\uce2b\3\uce8c\3\uceed\3\ucf4e\3\ucfaf"+ + "\3\ud010\3\ud071\3\ud0d2\3\ud133\0\u485f\3\ud194\3\ud1f5\3\ud256"+ + "\3\ud2b7\3\ud318\3\ud379\3\ud3da\3\ud43b\3\ud49c\3\ud4fd\3\ud55e"+ + "\3\ud5bf\3\ud620\3\ud681\3\ud6e2\3\ud743\3\ud7a4\3\ud805\3\ud866"+ + "\3\ud8c7\3\ud928\3\ud989\3\ud9ea\3\uda4b\3\udaac\3\udb0d\3\udb6e"+ + "\3\udbcf\3\udc30\3\udc91\3\udcf2\3\udd53\3\uddb4\3\ude15\3\ude76"+ + "\3\uded7\3\udf38\3\udf99\3\udffa\3\ue05b\3\ue0bc\3\ue11d\3\ue17e"+ + "\3\ue1df\3\ue240\3\ue2a1\3\ue302\3\ue363\3\ue3c4\3\ue425\3\ue486"+ + "\3\ue4e7\3\ue548\3\ue5a9\3\ue60a\3\ue66b\3\ue6cc\3\ue72d\3\ue78e"+ + "\3\ue7ef\3\ue850\3\ue8b1\3\ue912\3\ue973\3\ue9d4\3\uea35\3\uea96"+ + "\3\ueaf7\3\ueb58\3\uebb9\3\uec1a\3\uec7b\3\uecdc\3\ued3d\3\ued9e"+ + "\3\uedff\3\uee60\3\ueec1\3\uef22\3\uef83\3\uefe4\3\uf045\3\uf0a6"+ + "\3\uf107\3\uf168\3\uf1c9\3\uf22a\3\uf28b\3\uf2ec\3\uf34d\3\uf3ae"+ + "\3\uf40f\3\uf470\3\uf4d1\3\uf532\3\uf593\3\uf5f4\3\uf655\3\uf6b6"+ + "\3\uf717\3\uf778\3\uf7d9\3\uf83a\3\uf89b\3\uf8fc\3\uf95d\3\uf9be"+ + "\3\ufa1f\3\ufa80\3\ufae1\3\ufb42\3\ufba3\3\ufc04\3\ufc65\3\ufcc6"+ + "\3\ufd27\3\ufd88\3\ufde9\3\ufe4a\3\ufeab\3\uff0c\3\uff6d\3\uffce"+ + "\4\57\4\220\4\361\4\u0152\4\u01b3\4\u0214\4\u0275\4\u02d6"+ + "\4\u0337\4\u0398\4\u03f9\4\u045a\4\u04bb\4\u051c\4\u057d\4\u05de"+ + "\1\ua1ef\4\u063f\4\u06a0\4\u0701\4\u0762\4\u07c3\4\u0824\4\u0885"+ + "\4\u08e6\4\u0947\4\u09a8\4\u0a09\4\u0a6a\4\u0acb\4\u0b2c\4\u0b8d"+ + "\4\u0bee\4\u0c4f\4\u0cb0\4\u0d11\4\u0d72\4\u0dd3\4\u0e34\4\u0e95"+ + "\4\u0ef6\4\u0f57\4\u0fb8\4\u1019\4\u107a\4\u10db\4\u113c\4\u119d"+ + "\4\u11fe\4\u125f\4\u12c0\4\u1321\4\u1382\4\u13e3\4\u1444\4\u14a5"+ + "\4\u1506\4\u1567\4\u15c8\4\u1629\4\u168a\4\u16eb\4\u174c\4\u17ad"+ + "\4\u180e\4\u186f\4\u18d0\4\u1931\4\u1992\4\u19f3\4\u1a54\4\u1ab5"+ + "\4\u1b16\4\u1b77\4\u1bd8\4\u1c39\4\u1c9a\4\u1cfb\4\u1d5c\4\u1dbd"+ + "\4\u1e1e\4\u1e7f\4\u1ee0\4\u1f41\4\u1fa2\0\u9a98\4\u2003\4\u2064"+ + "\4\u20c5\4\u2126\4\u2187\4\u21e8\4\u2249\4\u22aa\4\u230b\4\u236c"+ + "\4\u23cd\4\u242e\4\u248f\4\u24f0\4\u2551\4\u25b2\4\u2613\4\u2674"+ + "\4\u26d5\4\u2736\4\u2797\4\u27f8\4\u2859\4\u28ba\4\u291b\4\u297c"+ + "\4\u29dd\4\u2a3e\4\u2a9f\4\u2b00\4\u2b61\4\u2bc2\4\u2c23\4\u2c84"+ + "\4\u2ce5\4\u2d46\4\u2da7\4\u2e08\4\u2e69\4\u2eca\4\u2f2b\4\u2f8c"+ + "\4\u2fed\4\u304e\4\u30af\4\u3110\4\u3171\4\u31d2\4\u3233\4\u3294"+ + "\4\u32f5\4\u3356\4\u33b7\4\u3418\4\u3479\4\u34da\4\u353b\4\u359c"+ + "\4\u35fd\4\u365e\4\u36bf\4\u3720\4\u3781\4\u37e2\4\u3843\4\u38a4"+ + "\4\u3905\4\u3966\4\u39c7\4\u3a28\4\u3a89\4\u3aea\4\u3b4b\4\u3bac"+ + "\4\u3c0d\4\u3c6e\4\u3ccf\4\u3d30\4\u3d91\4\u3df2\4\u3e53\4\u3eb4"+ + "\4\u3f15\4\u3f76\4\u3fd7\4\u4038\4\u4099\4\u40fa\4\u415b\4\u41bc"+ + "\4\u421d\4\u427e\4\u42df\4\u4340\4\u43a1\4\u4402\4\u4463\4\u44c4"+ + "\4\u4525\4\u4586\4\u45e7\4\u4648\4\u46a9\4\u470a\4\u476b\4\u47cc"+ + "\4\u482d\4\u488e\4\u48ef\4\u4950\4\u49b1\4\u4a12\4\u4a73\4\u4ad4"+ + "\4\u4b35\4\u4b96\4\u4bf7\4\u4c58\4\u4cb9\4\u4d1a\4\u4d7b\4\u4ddc"+ + "\4\u4e3d\4\u4e9e\4\u4eff\4\u4f60\4\u4fc1\4\u5022\4\u5083\4\u50e4"+ + "\4\u5145\4\u51a6\4\u5207\4\u5268\4\u52c9\4\u532a\4\u538b\4\u53ec"+ + "\4\u544d\4\u54ae\4\u550f\4\u5570\4\u55d1\4\u5632\4\u5693\4\u56f4"+ + "\4\u5755\4\u57b6\4\u5817\4\u5878\4\u58d9\4\u593a\4\u599b\4\u59fc"+ + "\4\u5a5d\4\u5abe\4\u5b1f\4\u5b80\4\u5be1\4\u5c42\4\u5ca3\4\u5d04"+ + "\4\u5d65\4\u5dc6\4\u5e27\4\u5e88\4\u5ee9\4\u5f4a\4\u5fab\4\u600c"+ + "\4\u606d\4\u60ce\4\u612f\4\u6190\4\u61f1\4\u6252\4\u62b3\4\u6314"+ + "\4\u6375\4\u63d6\4\u6437\4\u6498\4\u64f9\4\u655a\4\u65bb\4\u661c"+ + "\4\u667d\4\u66de\4\u673f\4\u67a0\4\u6801\4\u6862\4\u68c3\4\u6924"+ + "\4\u6985\4\u69e6\4\u6a47\4\u6aa8\4\u6b09\4\u6b6a\4\u6bcb\4\u6c2c"+ + "\4\u6c8d\4\u6cee\4\u6d4f\4\u6db0\4\u6e11\4\u6e72\4\u6ed3\4\u6f34"+ + "\4\u6f95\4\u6ff6\4\u7057\4\u70b8\4\u7119\4\u717a\4\u71db\4\u723c"+ + "\4\u729d\4\u72fe\4\u735f\4\u73c0\4\u7421\4\u7482\4\u74e3\4\u7544"+ + "\4\u75a5\4\u7606\4\u7667\4\u76c8\4\u7729\4\u778a\4\u77eb\4\u784c"+ + "\4\u78ad\4\u790e\4\u796f\4\u79d0\4\u7a31\4\u7a92\4\u7af3\4\u7b54"+ + "\4\u7bb5\4\u7c16\4\u7c77\4\u7cd8\4\u7d39\4\u7d9a\4\u7dfb\4\u7e5c"+ + "\4\u7ebd\4\u7f1e\4\u7f7f\4\u7fe0\4\u8041\4\u80a2\4\u8103\4\u8164"+ + "\4\u81c5\4\u8226\4\u8287\4\u82e8\4\u8349\4\u83aa\4\u840b\4\u846c"+ + "\4\u84cd\4\u852e\4\u858f\4\u85f0\4\u8651\4\u86b2\4\u8713\4\u8774"+ + "\4\u87d5\4\u8836\4\u8897\4\u88f8\4\u8959\4\u89ba\4\u8a1b\4\u8a7c"+ + "\4\u8add\4\u8b3e\4\u8b9f\4\u8c00\4\u8c61\4\u8cc2\4\u8d23\3\u4f9d"+ + "\4\u8d84\4\u8de5\4\u8e46\4\u8ea7\4\u8f08\4\u8f69\4\u8fca\4\u902b"+ + "\4\u908c\4\u90ed\4\u914e\4\u91af\4\u9210\4\u9271\4\u92d2\4\u9333"+ + "\4\u9394\4\u93f5\4\u9456\4\u94b7\4\u9518\4\u9579\4\u95da\4\u963b"+ + "\4\u969c\4\u96fd\4\u975e\4\u97bf\4\u9820\4\u9881\4\u98e2\4\u9943"+ + "\4\u99a4\4\u9a05\4\u9a66\4\u9ac7\4\u9b28\4\u9b89\4\u9bea\4\u9c4b"+ + "\4\u9cac\4\u9d0d\4\u9d6e\4\u9dcf\4\u9e30\4\u9e91\4\u9ef2\4\u9f53"+ + "\4\u9fb4\4\ua015\4\ua076\4\ua0d7\4\ua138\4\ua199\4\ua1fa\4\ua25b"+ + "\4\ua2bc\4\ua31d\4\ua37e\4\ua3df\4\ua440\4\ua4a1\4\ua502\4\ua563"+ + "\4\ua5c4\4\ua625\4\ua686\4\ua6e7\4\ua748\4\ua7a9\4\ua80a\4\ua86b"+ + "\4\ua8cc\4\ua92d\4\ua98e\4\ua9ef\4\uaa50\4\uaab1\4\uab12\4\uab73"+ + "\4\uabd4\4\uac35\4\uac96\4\uacf7\4\uad58\4\uadb9\4\uae1a\4\uae7b"+ + "\4\uaedc\4\uaf3d\4\uaf9e\4\uafff\4\ub060\4\ub0c1\4\ub122\4\ub183"+ + "\4\ub1e4\4\ub245\4\ub2a6\4\ub307\4\ub368\4\ub3c9\4\ub42a\4\ub48b"+ + "\4\ub4ec\4\ub54d\4\ub5ae\4\ub60f\4\ub670\4\ub6d1\4\ub732\4\ub793"+ + "\4\ub7f4\4\ub855\4\ub8b6\4\ub917\4\ub978\4\ub9d9\4\uba3a\4\uba9b"+ + "\4\ubafc\4\ubb5d\4\ubbbe\4\ubc1f\4\ubc80\4\ubce1\4\ubd42\4\ubda3"+ + "\4\ube04\4\ube65\4\u612f\4\ubec6\4\ubf27\4\ubf88\4\ubfe9\4\uc04a"+ + "\4\uc0ab\4\uc10c\4\uc16d\4\uc1ce\4\uc22f\4\uc290\4\uc2f1\4\uc352"+ + "\4\uc3b3\4\uc414\4\uc475\4\uc4d6\4\uc537\4\uc598\4\uc5f9\4\uc65a"+ + "\4\uc6bb\4\uc71c\4\uc77d\4\uc7de\4\uc83f\4\uc8a0\4\uc901\4\uc962"+ + "\4\uc9c3\4\uca24\4\uca85\4\ucae6\4\ucb47\4\ucba8\4\ucc09\4\ucc6a"+ + "\4\ucccb\4\ucd2c\4\ucd8d\4\ucdee\4\uce4f\4\uceb0\4\ucf11\4\ucf72"+ + "\4\ucfd3\4\ud034\4\ud095\4\ud0f6\4\ud157\4\ud1b8\4\ud219\4\ud27a"+ + "\4\ud2db\4\ud33c\4\ud39d\4\ud3fe\4\ud45f\4\ud4c0\4\ud521\4\ud582"+ + "\4\ud5e3\4\ud644\4\ud6a5\4\ud706\4\ud767\4\ud7c8\4\ud829\4\ud88a"+ + "\4\ud8eb\4\ud94c\4\ud9ad\4\uda0e\4\uda6f\4\udad0\4\udb31\4\udb92"+ + "\4\udbf3\4\udc54\4\udcb5\4\udd16\4\udd77\4\uddd8\4\ude39\4\ude9a"+ + "\4\udefb\4\udf5c\4\udfbd\4\ue01e\4\ue07f\4\ue0e0\4\ue141\4\ue1a2"+ + "\4\ue203\4\ue264\4\ue2c5\4\ue326\4\ue387\4\ue3e8\4\ue449\4\ue4aa"+ + "\4\ue50b\4\ue56c\4\ue5cd\4\ue62e\4\ue68f\4\ue6f0\4\ue751\4\ue7b2"+ + "\4\ue813\4\ue874\4\ue8d5\4\ue936\4\ue997\4\ue9f8\4\uea59\4\ueaba"+ + "\4\ueb1b\4\ueb7c\4\uebdd\4\uec3e\4\uec9f\0\u485f\4\ued00\4\ued61"+ + "\4\uedc2\4\uee23\4\uee84\4\ueee5\4\uef46\4\uefa7\4\uf008\4\uf069"+ + "\4\uf0ca\4\uf12b\4\uf18c\4\uf1ed\1\ue808\4\uf24e\4\uf2af\4\uf310"+ + "\4\uf371\4\uf3d2\4\uf433\4\uf494\4\uf4f5\4\uf556\4\uf5b7\4\uf618"+ + "\4\uf679\4\uf6da\4\uf73b\4\uf79c\4\uf7fd\4\uf85e\4\uf8bf\4\uf920"+ + "\4\uf981\4\uf9e2\4\ufa43\4\ufaa4\4\ufb05\4\ufb66\4\ufbc7\4\ufc28"+ + "\4\ufc89\4\ufcea\4\ufd4b\4\ufdac\4\ufe0d\4\ufe6e\4\ufecf\4\uff30"+ + "\4\uff91\4\ufff2\5\123\5\264\5\u0115\5\u0176\2\u620a\5\u01d7"+ + "\5\u0238\5\u0299\5\u02fa\5\u035b\5\u03bc\5\u041d\5\u047e\5\u04df"+ + "\5\u0540\5\u05a1\5\u0602\5\u0663\5\u06c4\5\u0725\5\u0786\5\u07e7"+ + "\5\u0848\5\u08a9\5\u090a\5\u096b\5\u09cc\5\u0a2d\5\u0a8e\5\u0aef"+ + "\5\u0b50\5\u0bb1\5\u0c12\5\u0c73\5\u0cd4\5\u0d35\5\u0d96\5\u0df7"+ + "\5\u0e58\5\u0eb9\5\u0f1a\5\u0f7b\5\u0fdc\5\u103d\5\u109e\5\u10ff"+ + "\5\u1160\5\u11c1\5\u1222\5\u1283\5\u12e4\5\u1345\5\u13a6\5\u1407"+ + "\5\u1468\5\u14c9\5\u152a\5\u158b\5\u15ec\5\u164d\5\u16ae\5\u170f"+ + "\5\u1770\5\u17d1\5\u1832\5\u1893\5\u18f4\5\u1955\5\u19b6\5\u1a17"+ + "\5\u1a78\5\u1ad9\5\u1b3a\5\u1b9b\5\u1bfc\5\u1c5d\5\u1cbe\5\u1d1f"+ + "\5\u1d80\5\u1de1\5\u1e42\5\u1ea3\5\u1f04\5\u1f65\5\u1fc6\5\u2027"+ + "\5\u2088\5\u20e9\5\u214a\5\u21ab\5\u220c\5\u226d\5\u22ce\5\u232f"+ + "\5\u2390\5\u23f1\5\u2452\5\u24b3\5\u2514\5\u2575\5\u25d6\5\u2637"+ + "\5\u2698\5\u26f9\5\u275a\5\u27bb\5\u281c\5\u287d\5\u28de\5\u293f"+ + "\5\u29a0\5\u2a01\5\u2a62\5\u2ac3\5\u2b24\5\u2b85\5\u2be6\5\u2c47"+ + "\5\u2ca8\5\u2d09\5\u2d6a\5\u2dcb\5\u2e2c\5\u2e8d\5\u2eee\5\u2f4f"+ + "\5\u2fb0\5\u3011\5\u3072\5\u30d3\5\u3134\5\u3195\5\u31f6\5\u3257"+ + "\5\u32b8\5\u3319\5\u337a\5\u33db\5\u343c\5\u349d\5\u34fe\5\u355f"+ + "\5\u35c0\5\u3621\5\u3682\5\u36e3\5\u3744\5\u37a5\5\u3806\5\u3867"+ + "\5\u38c8\5\u3929\5\u398a\5\u39eb\5\u3a4c\5\u3aad\5\u3b0e\5\u3b6f"+ + "\5\u3bd0\5\u3c31\5\u3c92\5\u3cf3\5\u3d54\5\u3db5\5\u3e16\5\u3e77"+ + "\5\u3ed8\5\u3f39\5\u3f9a\5\u3ffb\5\u405c\5\u40bd\5\u411e\5\u417f"+ + "\5\u41e0\5\u4241\5\u42a2\5\u4303\5\u4364\5\u43c5\5\u4426\5\u4487"+ + "\5\u44e8\5\u4549\5\u45aa\5\u460b\5\u466c\5\u46cd\5\u472e\5\u478f"+ + "\5\u47f0\5\u4851\5\u48b2\5\u4913\5\u4974\5\u49d5\5\u4a36\5\u4a97"+ + "\5\u4af8\5\u4b59\5\u4bba\5\u4af8\5\u4c1b\5\u4c7c\5\u4cdd\5\u4d3e"+ + "\5\u4d9f\5\u4e00\5\u4e61\5\u4ec2\5\u4f23\5\u4f84\5\u4fe5\5\u5046"+ + "\5\u50a7\5\u5108\5\u5169\5\u51ca\5\u522b\5\u528c\5\u52ed\5\u534e"+ + "\5\u53af\5\u5410\5\u5471\5\u54d2\5\u5533\5\u5594\5\u55f5\5\u5656"+ + "\5\u56b7\5\u5718\5\u5779\5\u57da\5\u583b\5\u589c\5\u58fd\5\u595e"+ + "\5\u59bf\5\u5a20\5\u5a81\5\u5ae2\5\u5b43\5\u5ba4\5\u5c05\5\u5c66"+ + "\5\u5cc7\5\u5d28\5\u5d89\5\u5dea\5\u5e4b\5\u5eac\5\u5f0d\5\u5f6e"+ + "\5\u5fcf\5\u6030\5\u6091\5\u60f2\5\u6153\5\u61b4\5\u6215\5\u6276"+ + "\5\u62d7\5\u6338\5\u6399\5\u63fa\5\u645b\5\u64bc\5\u651d\5\u657e"+ + "\5\u65df\5\u6640\5\u66a1\5\u6702\5\u6763\5\u67c4\5\u6825\5\u6886"+ + "\5\u68e7\5\u6948\5\u69a9\5\u6a0a\5\u6a6b\5\u6acc\5\u6b2d\5\u6b8e"+ + "\5\u6bef\5\u6c50\5\u6cb1\5\u6d12\5\u6d73\5\u6dd4\5\u6e35\5\u6e96"+ + "\5\u6ef7\5\u6f58\5\u6fb9\5\u701a\5\u707b\5\u70dc\5\u713d\5\u719e"+ + "\5\u71ff\5\u7260\5\u72c1\5\u7322\5\u7383\5\u73e4\5\u7445\5\u74a6"+ + "\5\u7507\5\u7568\5\u75c9\5\u762a\5\u768b\5\u76ec\5\u774d\5\u77ae"+ + "\5\u780f\5\u7870\5\u78d1\5\u7932\5\u7993\5\u79f4\5\u7a55\5\u7ab6"+ + "\5\u7b17\5\u7b78\5\u7bd9\5\u7c3a\5\u7c9b\5\u7cfc\5\u7d5d\5\u7dbe"+ + "\5\u7e1f\5\u7e80\5\u7ee1\5\u7f42\5\u7fa3\5\u8004\5\u8065\5\u80c6"+ + "\5\u8127\5\u8188\5\u81e9\5\u824a\5\u82ab\5\u830c\5\u836d\5\u83ce"+ + "\5\u842f\5\u8490\5\u84f1\5\u8552\5\u85b3\5\u8614\5\u8675\5\u86d6"+ + "\5\u8737\5\u8798\5\u87f9\5\u885a\5\u88bb\5\u891c\5\u897d\5\u89de"+ + "\5\u8a3f\5\u8aa0\5\u8b01\5\u8b62\5\u8bc3\5\u8c24\5\u8c85\5\u8ce6"+ + "\5\u8d47\5\u8da8\5\u8e09\5\u8e6a\5\u8ecb\5\u8f2c\5\u8f8d\5\u8fee"+ + "\5\u904f\5\u90b0\5\u9111\5\u9172\5\u91d3\5\u9234\5\u9295\5\u92f6"+ + "\5\u9357\5\u93b8\5\u9419\5\u947a\5\u94db\1\u34cf\5\u953c\5\u959d"+ + "\5\u95fe\5\u965f\2\u2262\5\u96c0\5\u9721\5\u9782\5\u97e3\5\u9844"+ + "\5\u98a5\5\u9906\5\u9967\5\u99c8\5\u9a29\5\u9a8a\5\u9aeb\5\u9b4c"+ + "\5\u9bad\5\u9c0e\5\u9c6f\5\u9cd0\5\u9d31\5\u9d92\5\u9df3\5\u9e54"+ + "\5\u9eb5\5\u9f16\5\u9f77\5\u9fd8\5\ua039\5\ua09a\5\ua0fb\5\ua15c"+ + "\5\ua1bd\5\u6e96\5\ua21e\3\u51e3\5\ua27f\5\ua2e0\5\ua341\5\ua3a2"+ + "\5\ua403\5\ua464\5\ua4c5\5\ua526\5\ua587\5\ua5e8\5\ua649\5\ua6aa"+ + "\5\ua70b\5\ua76c\5\ua7cd\5\ua82e\5\ua88f\5\ua8f0\5\ua951\5\ua9b2"+ + "\5\uaa13\5\uaa74\5\uaad5\5\uab36\5\uab97\5\uabf8\5\uac59\5\uacba"+ + "\5\uad1b\5\uad7c\5\uaddd\5\uae3e\5\uae9f\5\uaf00\5\uaf61\5\uafc2"+ + "\5\ub023\5\ub084\5\ub0e5\5\ub146\5\ub1a7\5\ub208\5\ub269\5\ub2ca"+ + "\5\ub32b\5\ub38c\5\ub3ed\5\ub44e\5\ub4af\5\ub510\5\ub571\5\ub5d2"+ + "\5\ub633\5\ub694\5\ub6f5\5\ub756\5\ub7b7\5\ub818\5\ub879\5\ub8da"+ + "\5\ub93b\5\ub99c\5\ub9fd\5\uba5e\5\ubabf\5\ubb20\5\ubb81\5\ubbe2"+ + "\5\ubc43\5\ubca4\5\ubd05\5\ubd66\5\ubdc7\5\ube28\5\ube89\5\ubeea"+ + "\5\ubf4b\5\ubfac\5\uc00d\5\uc06e\5\uc0cf\5\uc130\5\uc191\5\uc1f2"+ + "\5\uc253\5\uc2b4\5\uc315\2\u30c8\5\uc376\5\uc3d7\5\uc438\5\uc499"+ + "\5\uc4fa\5\uc55b\5\uc5bc\5\uc61d\5\uc67e\5\uc6df\5\uc740\5\uc7a1"+ + "\5\uc802\5\uc863\5\uc8c4\5\uc925\5\uc986\5\uc9e7\5\uca48\5\ucaa9"+ + "\5\ucb0a\5\ucb6b\5\ucbcc\5\ucc2d\5\ucc8e\5\uccef\5\ucd50\5\ucdb1"+ + "\5\uce12\5\uce73\5\uced4\5\ucf35\5\ucf96\5\ucff7\5\ud058\5\ud0b9"+ + "\5\ud11a\5\ud17b\5\ud1dc\5\ud23d\5\ud29e\5\ud2ff\5\ud360\5\ud3c1"+ + "\5\ud422\5\ud483\5\ud4e4\5\ud545\5\ud5a6\5\ud607\5\ud668\5\ud6c9"+ + "\5\ud72a\5\ud78b\5\ud7ec\5\ud84d\5\ud8ae\5\ud90f\5\ud970\5\ud9d1"+ + "\5\uda32\5\uda93\5\udaf4\5\udb55\5\udbb6\5\udc17\5\udc78\5\udcd9"+ + "\5\udd3a\5\udd9b\5\uddfc\5\ude5d\5\udebe\5\udf1f\5\udf80\5\udfe1"+ + "\5\ue042\5\ue0a3\5\ue104\5\ue165\5\ue1c6\5\ue227\5\ue288\5\ue2e9"+ + "\5\ue34a\5\ue3ab\5\ue40c\5\ue46d\5\ue4ce\5\ue52f\5\ue590\5\ue5f1"+ + "\5\ue652\5\ue6b3\5\ue714\5\ue775\5\ue7d6\5\ue837\5\ue898\5\ue8f9"+ + "\5\ue95a\5\ue9bb\5\uea1c\5\uea7d\5\ueade\5\ueb3f\5\ueba0\5\uec01"+ + "\5\uec62\5\uecc3\5\ued24\5\ued85\5\uede6\5\uee47\5\ueea8\5\uef09"+ + "\5\uef6a\5\uefcb\5\uf02c\5\uf08d\5\uf0ee\5\uf14f\5\uf1b0\5\uf211"+ + "\5\uf272\5\uf2d3\5\uf334\5\uf395\5\uf3f6\5\uf457\5\uf4b8\5\uf519"+ + "\5\uf57a\5\uf5db\1\ubb52\5\uf63c\5\uf69d\5\uf6fe\5\uf75f\5\uf7c0"+ + "\5\uf821\5\uf882\5\uf8e3\5\uf944\5\uf9a5\5\ufa06\5\ufa67\5\ufac8"+ + "\5\ufb29\5\ufb8a\5\ufbeb\5\ufc4c\5\ufcad\5\ufd0e\5\ufd6f\5\ufdd0"+ + "\5\ufe31\5\ufe92\5\ufef3\5\uff54\5\uffb5\6\26\6\167\6\330"+ + "\6\u0139\6\u019a\6\u01fb\6\u025c\6\u02bd\6\u031e\6\u037f\6\u03e0"+ + "\6\u0441\6\u04a2\6\u0503\6\u0564\6\u05c5\6\u0626\6\u0687\6\u06e8"+ + "\6\u0749\6\u07aa\6\u080b\6\u086c\6\u08cd\6\u092e\6\u098f\6\u09f0"+ + "\6\u0a51\6\u0ab2\6\u0b13\6\u0b74\6\u0bd5\6\u0c36\6\u0c97\6\u0cf8"+ + "\6\u0d59\6\u0dba\6\u0e1b\6\u0e7c\6\u0edd\6\u0f3e\6\u0f9f\6\u1000"+ + "\6\u1061\6\u10c2\6\u1123\6\u1184\6\u11e5\6\u1246\6\u12a7\6\u1308"+ + "\6\u1369\6\u13ca\6\u142b\6\u148c\6\u14ed\6\u154e\6\u15af\6\u1610"+ + "\6\u1671\6\u16d2\6\u1733\6\u1794\6\u17f5\6\u1856\6\u18b7\6\u1918"+ + "\6\u1979\6\u19da\6\u1a3b\6\u1a9c\6\u1afd\6\u1b5e\6\u1bbf\6\u1c20"+ + "\6\u1c81\6\u1ce2\6\u1d43\6\u1da4\6\u1e05\6\u1e66\6\u1ec7\6\u1f28"+ + "\6\u1f89\6\u1fea\6\u204b\6\u20ac\6\u210d\6\u216e\6\u21cf\6\u2230"+ + "\6\u2291\6\u22f2\6\u2353\6\u23b4\6\u2415\6\u2476\6\u24d7\6\u2538"+ + "\6\u2599\6\u25fa\6\u265b\6\u26bc\6\u271d\3\ue973\6\u277e\6\u27df"+ + "\6\u2840\6\u28a1\6\u2902\6\u2963\6\u29c4\6\u2a25\6\u2a86\6\u2ae7"+ + "\6\u2b48\6\u2ba9\6\u2c0a\6\u2c6b\6\u2ccc\6\u2d2d\6\u2d8e\6\u2def"+ + "\6\u2e50\6\u2eb1\6\u2f12\6\u2f73\6\u2fd4\6\u3035\6\u3096\6\u30f7"+ + "\6\u3158\6\u31b9\6\u321a\6\u327b\6\u32dc\6\u333d\6\u339e\6\u33ff"+ + "\6\u3460\6\u34c1\6\u3522\6\u3583\6\u35e4\6\u3645\6\u36a6\6\u3707"+ + "\6\u3768\6\u37c9\6\u382a\6\u388b\6\u38ec\6\u394d\6\u39ae\6\u3a0f"+ + "\6\u3a70\6\u3ad1\6\u3b32\6\u3b93\6\u3bf4\6\u3c55\6\u3cb6\6\u3d17"+ + "\6\u3d78\6\u3dd9\6\u3e3a\6\u3e9b\6\u3efc\6\u3f5d\6\u3fbe\6\u401f"+ + "\6\u4080\6\u40e1\6\u4142\6\u41a3\6\u4204\6\u4265\6\u42c6\6\u4327"+ + "\6\u4388\6\u43e9\6\u444a\6\u44ab\6\u450c\6\u456d\6\u45ce\6\u462f"+ + "\6\u4690\6\u46f1\6\u4752\6\u47b3\6\u4814\6\u4875\6\u48d6\6\u4937"+ + "\6\u4998\6\u49f9\6\u4a5a\6\u4abb\6\u4b1c\6\u4b7d\6\u4bde\6\u4c3f"+ + "\6\u4ca0\6\u4d01\6\u4d62\6\u4dc3\6\u4e24\6\u4e85\6\u4ee6\6\u4f47"+ + "\6\u4fa8\6\u5009\6\u506a\6\u50cb\6\u512c\6\u518d\6\u51ee\6\u524f"+ + "\6\u52b0\6\u5311\6\u5372\6\u53d3\6\u5434\6\u5495\6\u54f6\6\u5557"+ + "\6\u55b8\6\u5619\6\u567a\6\u56db\6\u573c\6\u579d\6\u57fe\6\u585f"+ + "\6\u58c0\6\u5921\6\u5982\6\u59e3\6\u5a44\6\u5aa5\6\u5b06\6\u5b67"+ + "\6\u5bc8\6\u5c29\6\u5c8a\6\u5ceb\6\u5d4c\6\u5dad\6\u5e0e\6\u5e6f"+ + "\1\ua1ef\6\u5ed0\6\u5f31\6\u5f92\6\u5ff3\6\u6054\6\u60b5\6\u6116"+ + "\6\u6177\6\u61d8\6\u6239\6\u629a\6\u62fb\6\u635c\6\u63bd\6\u641e"+ + "\6\u647f\6\u64e0\6\u6541\6\u65a2\6\u6603\6\u6664\6\u66c5\6\u6726"+ + "\6\u6787\6\u67e8\6\u6849\6\u68aa\6\u690b\6\u696c\6\u69cd\6\u6a2e"+ + "\6\u6a8f\6\u6af0\6\u6b51\6\u6bb2\6\u6c13\6\u6c74\6\u6cd5\1\u48e4"+ + "\6\u6d36\6\u6d97\6\u6df8\6\u6e59\6\u6eba\6\u6f1b\6\u6f7c\6\u6fdd"+ + "\6\u703e\6\u709f\6\u7100\6\u7161\6\u71c2\6\u7223\6\u7284\6\u72e5"+ + "\6\u7346\6\u73a7\6\u7408\6\u7469\6\u74ca\6\u752b\6\u758c\6\u75ed"+ + "\6\u764e\6\u76af\6\u7710\6\u7771\6\u77d2\6\u7833\6\u7894\6\u78f5"+ + "\6\u7956\6\u79b7\6\u7a18\6\u7a79\6\u7ada\6\u7b3b\6\u7b9c\6\u7bfd"+ + "\6\u696c\6\u7c5e\6\u7cbf\6\u7d20\6\u7d81\6\u7de2\6\u7e43\6\u7ea4"+ + "\6\u7f05\6\u7f66\6\u7fc7\6\u8028\6\u8089\6\u80ea\6\u814b\6\u81ac"+ + "\6\u820d\6\u826e\6\u82cf\6\u8330\6\u8391\6\u83f2\6\u8453\6\u84b4"+ + "\6\u8515\6\u8576\6\u85d7\6\u8638\6\u8699\6\u86fa\6\u875b\6\u87bc"+ + "\6\u881d\6\u887e\6\u88df\6\u8940\6\u89a1\6\u8a02\6\u8a63\6\u8ac4"+ + "\6\u8b25\6\u8b86\6\u8be7\6\u8c48\6\u8ca9\6\u8d0a\6\u8d6b\6\u8dcc"+ + "\6\u8e2d\6\u8e8e\6\u8eef\6\u8f50\6\u8fb1\6\u9012\6\u9073\6\u90d4"+ + "\6\u9135\6\u9196\6\u91f7\6\u9258\6\u92b9\6\u931a\6\u937b\6\u93dc"+ + "\6\u943d\6\u949e\6\u94ff\6\u9560\6\u95c1\6\u9622\6\u9683\6\u96e4"+ + "\6\u9745\6\u97a6\6\u9807\6\u9868\6\u98c9\6\u992a\6\u998b\6\u99ec"+ + "\6\u9a4d\6\u9aae\6\u9b0f\6\u9b70\6\u9bd1\6\u9c32\6\u9c93\6\u9cf4"+ + "\6\u9d55\6\u9db6\6\u9e17\6\u9e78\6\u9ed9\6\u9f3a\6\u9f9b\6\u9ffc"+ + "\6\ua05d\6\ua0be\6\ua11f\6\ua180\6\ua1e1\6\ua242\6\ua2a3\6\ua304"+ + "\6\ua365\6\ua3c6\6\ua427\6\ua488\6\ua4e9\6\ua54a\6\ua5ab\6\ua60c"+ + "\6\ua66d\6\ua6ce\6\ua72f\6\ua790\6\ua7f1\6\ua852\6\ua8b3\6\ua914"+ + "\6\ua975\6\ua9d6\6\uaa37\6\uaa98\6\uaaf9\6\uab5a\6\uabbb\6\uac1c"+ + "\6\uac7d\6\uacde\6\uad3f\6\uada0\6\uae01\6\uae62\6\uaec3\6\uaf24"+ + "\6\uaf85\6\uafe6\6\ub047\6\ub0a8\6\ub109\6\ub16a\6\ub1cb\6\ub22c"+ + "\6\ub28d\6\ub2ee\6\ub34f\6\ub3b0\6\ub411\6\ub472\6\ub4d3\6\ub534"+ + "\6\ub595\6\ub5f6\6\ub657\6\ub6b8\6\ub719\6\ub77a\6\ub7db\6\ub83c"+ + "\6\ub89d\6\ub8fe\6\ub95f\6\ub9c0\6\uba21\6\uba82\6\ubae3\6\ubb44"+ + "\6\ubba5\6\ubc06\6\ubc67\6\ubcc8\6\ubd29\6\ubd8a\6\ubdeb\6\ube4c"+ + "\6\ubead\6\ubf0e\6\ubf6f\6\ubfd0\6\uc031\6\uc092\6\uc0f3\6\uc154"+ + "\6\uc1b5\6\uc216\6\uc277\6\uc2d8\6\uc339\6\uc39a\6\uc3fb\6\uc45c"+ + "\6\uc4bd\6\uc51e\6\uc57f\6\uc5e0\6\uc641\6\uc6a2\6\uc703\6\uc764"+ + "\6\uc7c5\6\uc826\6\uc887\6\uc8e8\6\uc949\6\uc9aa\6\uca0b\6\uca6c"+ + "\6\ucacd\6\ucb2e\6\ucb8f\6\ucbf0\6\ucc51\6\uccb2\6\ucd13\6\ucd74"+ + "\6\ucdd5\6\uce36\6\uce97\6\ucef8\6\ucf59\6\ucfba\6\ud01b\6\ud07c"+ + "\6\ud0dd\6\ud13e\6\ud19f\6\ud200\6\ud261\6\ud2c2\6\ud323\6\ud384"+ + "\6\ud3e5\6\ud446\6\ud4a7\6\ud508\6\ud569\6\ud5ca\4\u1fa2\6\ud62b"+ + "\6\ud68c\6\ud6ed\6\ud74e\6\ud7af\6\ud810\6\ud871\6\ud8d2\6\ud933"+ + "\6\ud994\6\ud9f5\6\uda56\6\udab7\6\udb18\6\udb79\6\udbda\6\udc3b"+ + "\6\udc9c\6\udcfd\6\udd5e\6\uddbf\6\ude20\6\ude81\6\udee2\6\udf43"+ + "\6\udfa4\6\ue005\6\ue066\6\ue0c7\6\ue128\6\ue189\6\ue1ea\6\ue24b"+ + "\6\ue2ac\6\ue30d\6\ue36e\6\ue3cf\6\ue430\6\ue491\6\ue4f2\6\ue553"+ + "\6\ue5b4\6\ue615\6\ue676\6\ue6d7\6\ue738\6\ue799\4\ub7f4\6\ue7fa"+ + "\6\ue85b\6\ue8bc\6\ue91d\6\ue97e\6\ue9df\6\uea40\6\ueaa1\6\ueb02"+ + "\6\ueb63\6\uebc4\6\uec25\6\uec86\6\uece7\6\ued48\6\ueda9\6\uee0a"+ + "\6\uee6b\6\ueecc\6\uef2d\6\uef8e\6\uefef\6\uf050\6\uf0b1\6\uf112"+ + "\6\uf173\6\uf1d4\6\uf235\6\uf296\6\uf2f7\6\uf358\6\uf3b9\6\uf41a"+ + "\6\uf47b\6\uf4dc\6\uf53d\3\u41f9\6\uf59e\6\uf5ff\6\uf660\6\uf6c1"+ + "\6\uf722\6\uf783\6\uf7e4\6\uf845\6\uf8a6\6\uf907\6\uf968\6\uf9c9"+ + "\6\ufa2a\6\ufa8b\6\ufaec\6\ufb4d\6\ufbae\6\ufc0f\6\ufc70\6\ufcd1"+ + "\6\ufd32\6\ufd93\6\ufdf4\6\ufe55\6\ufeb6\6\uff17\6\uff78\6\uffd9"+ + "\7\72\7\233\7\374\7\u015d\7\u01be\7\u021f\7\u0280\7\u02e1"+ + "\7\u0342\7\u03a3\7\u0404\7\u0465\7\u04c6\7\u0527\7\u0588\7\u05e9"+ + "\7\u064a\7\u06ab\7\u070c\7\u076d\7\u07ce\7\u082f\7\u0890\7\u08f1"+ + "\7\u0952\0\u0c81\7\u09b3\7\u0a14\7\u0a75\7\u0ad6\7\u0b37\0\u0c81"+ + "\7\u0b98\0\u0c81\7\u0bf9\7\u0c5a\0\u0c81\7\u0cbb\7\u0d1c\7\u0d7d"+ + "\7\u0dde\7\u0e3f\7\u0ea0\7\u0f01\7\u0f62\7\u0fc3\7\u1024\7\u1085"+ + "\7\u10e6\7\u1147\7\u11a8\7\u1209\7\u126a\7\u12cb\7\u132c\7\u138d"+ + "\7\u13ee\7\u144f\7\u14b0\7\u1511\4\u2ce5\7\u1572\7\u15d3\7\u1634"+ + "\7\u1695\7\u16f6\7\u1757\7\u17b8\7\u1819\7\u187a\7\u18db\7\u193c"+ + "\7\u199d\7\u19fe\7\u1a5f\7\u1ac0\7\u1b21\7\u1b82\7\u1be3\7\u1c44"+ + "\7\u1ca5\7\u1d06\7\u1d67\7\u1dc8\7\u1e29\7\u1e8a\7\u1eeb\2\udf75"+ + "\7\u1f4c\7\u1fad\7\u200e\7\u206f\7\u20d0\7\u2131\7\u2192\7\u21f3"+ + "\7\u2254\7\u22b5\7\u2316\7\u2377\7\u23d8\7\u2439\7\u249a\7\u24fb"+ + "\7\u255c\7\u25bd\7\u261e\7\u267f\7\u26e0\7\u2741\7\u27a2\7\u2803"+ + "\7\u2864\4\u612f\7\u28c5\7\u2926\7\u2987\7\u29e8\7\u2a49\7\u2aaa"+ + "\7\u2b0b\7\u2b6c\7\u2bcd\7\u2c2e\7\u2c8f\7\u2cf0\7\u2d51\7\u2db2"+ + "\7\u2e13\7\u2e74\7\u2ed5\7\u2f36\7\u2f97\7\u2ff8\7\u3059\7\u30ba"+ + "\7\u311b\7\u317c\7\u31dd\7\u323e\7\u329f\7\u3300\7\u3361\7\u33c2"+ + "\6\u758c\7\u3423\7\u3484\7\u34e5\7\u3546\7\u35a7\7\u3608\7\u3669"+ + "\7\u36ca\7\u372b\7\u378c\7\u37ed\7\u384e\7\u38af\7\u3910\7\u3971"+ + "\7\u39d2\7\u3a33\7\u3a94\7\u3af5\7\u3b56\7\u3bb7\7\u3c18\7\u3c79"+ + "\7\u3cda\7\u3d3b\7\u3d9c\7\u3dfd\7\u3e5e\7\u3ebf\7\u3f20\7\u3f81"+ + "\7\u3fe2\7\u4043\7\u40a4\7\u4105\7\u4166\7\u41c7\7\u4228\7\u4289"+ + "\7\u42ea\7\u434b\7\u43ac\7\u440d\7\u446e\7\u44cf\7\u4530\7\u4591"+ + "\7\u45f2\7\u4653\7\u46b4\7\u4715\7\u4776\7\u47d7\7\u4838\7\u4899"+ + "\7\u48fa\7\u495b\7\u49bc\7\u4a1d\5\u1bfc\7\u4a7e\7\u4adf\7\u4b40"+ + "\7\u4ba1\7\u4c02\7\u4c63\7\u4cc4\7\u4d25\7\u4d86\7\u4de7\7\u4e48"+ + "\7\u4ea9\7\u4f0a\7\u4f6b\7\u4fcc\7\u502d\7\u508e\7\u50ef\7\u5150"+ + "\7\u51b1\7\u5212\7\u5273\7\u52d4\7\u5335\7\u5396\7\u53f7\7\u5458"+ + "\7\u54b9\7\u551a\7\u557b\7\u55dc\7\u563d\7\u569e\7\u56ff\7\u5760"+ + "\7\u57c1\7\u5822\7\u5883\7\u58e4\7\u5945\7\u59a6\7\u5a07\7\u5a68"+ + "\7\u5ac9\7\u5b2a\7\u5b8b\7\u5bec\7\u5c4d\7\u5cae\7\u5d0f\7\u5d70"+ + "\7\u5dd1\7\u5e32\7\u5e93\7\u5ef4\7\u5f55\7\u5fb6\7\u6017\7\u6078"+ + "\7\u60d9\7\u613a\7\u619b\7\u61fc\7\u625d\7\u62be\7\u631f\7\u6380"+ + "\7\u63e1\7\u6442\7\u64a3\7\u6504\7\u6565\7\u65c6\7\u6627\7\u6688"+ + "\7\u66e9\7\u674a\7\u67ab\7\u680c\7\u686d\7\u68ce\7\u692f\7\u6990"+ + "\7\u69f1\7\u6a52\7\u6ab3\7\u6b14\7\u6b75\7\u6bd6\7\u6c37\7\u6c98"+ + "\7\u6cf9\7\u6d5a\7\u6dbb\7\u6e1c\7\u6e7d\7\u6ede\7\u6f3f\7\u6fa0"+ + "\7\u7001\7\u7062\7\u70c3\7\u7124\7\u7185\7\u71e6\7\u7247\7\u72a8"+ + "\7\u7309\7\u736a\7\u73cb\7\u742c\7\u748d\7\u74ee\7\u754f\7\u75b0"+ + "\7\u7611\7\u7672\7\u76d3\7\u7734\7\u7795\7\u77f6\7\u7857\7\u78b8"+ + "\7\u7919\7\u797a\7\u79db\7\u7a3c\7\u7a9d\7\u7afe\7\u7b5f\7\u7bc0"+ + "\7\u7c21\7\u7c82\7\u7ce3\7\u7d44\7\u7da5\7\u7e06\7\u7e67\7\u7ec8"+ + "\7\u7f29\7\u7f8a\7\u7feb\7\u804c\7\u80ad\7\u810e\7\u816f\7\u81d0"+ + "\7\u8231\7\u8292\7\u82f3\7\u8354\7\u83b5\7\u8416\7\u8477\7\u84d8"+ + "\7\u8539\7\u859a\7\u85fb\7\u865c\7\u86bd\7\u871e\7\u877f\7\u87e0"+ + "\7\u8841\7\u88a2\7\u8903\7\u8964\7\u89c5\7\u8a26\2\u0c07\7\u8a87"+ + "\7\u8ae8\7\u8b49\7\u8baa\7\u8c0b\7\u8c6c\7\u8ccd\7\u8d2e\7\u8d8f"+ + "\7\u8df0\7\u8e51\7\u8eb2\7\u8f13\7\u8f74\7\u8fd5\7\u9036\7\u9097"+ + "\7\u90f8\7\u9159\7\u91ba\7\u921b\7\u927c\7\u92dd\7\u933e\7\u939f"+ + "\7\u9400\7\u9461\7\u94c2\7\u9523\7\u9584\7\u95e5\7\u9646\7\u96a7"+ + "\7\u9708\4\u1ee0\7\u9769\7\u97ca\7\u982b\7\u988c\7\u98ed\7\u994e"+ + "\7\u99af\7\u9a10\7\u9a71\7\u9ad2\7\u9b33\7\u9b94\7\u9bf5\7\u9c56"+ + "\7\u9cb7\7\u9d18\7\u9d79\7\u9dda\7\u9e3b\7\u9e9c\7\u9efd\7\u9f5e"+ + "\7\u9fbf\7\ua020\7\ua081\7\ua0e2\2\u749b\7\ua143\7\ua1a4\7\ua205"+ + "\7\ua266\7\ua2c7\7\ua328\7\ua389\7\ua3ea\7\ua44b\7\ua4ac\7\ua50d"+ + "\7\ua56e\7\ua5cf\7\ua630\7\ua691\7\ua6f2\7\ua753\7\ua7b4\7\ua815"+ + "\7\ua876\7\ua8d7\7\ua938\7\ua999\7\ua9fa\7\uaa5b\7\uaabc\7\uab1d"+ + "\7\uab7e\7\uabdf\7\uac40\7\uaca1\7\uad02\7\uad63\7\uadc4\7\uae25"+ + "\7\uae86\7\uaee7\7\uaf48\7\uafa9\7\ub00a\7\ub06b\7\ub0cc\7\ub12d"+ + "\7\ub18e\7\ub1ef\7\ub250\7\ub2b1\7\ub312\7\ub373\7\ub3d4\7\ub435"+ + "\7\ub496\7\ub4f7\7\ub558\7\ub5b9\7\ub61a\7\ub67b\7\ub6dc\7\ub73d"+ + "\7\ub79e\7\ub7ff\7\ub860\7\ub8c1\7\ub922\7\ub983\7\ub9e4\7\uba45"+ + "\7\ubaa6\7\ubb07\7\ubb68\7\ubbc9\7\ubc2a\7\ubc8b\7\ubcec\7\ubd4d"+ + "\7\ubdae\7\ube0f\7\ube70\7\ubed1\7\ubf32\7\ubf93\7\ubff4\7\uc055"+ + "\7\uc0b6\7\uc117\7\uc178\7\uc1d9\7\uc23a\7\uc29b\7\uc2fc\7\uc35d"+ + "\7\uc3be\7\uc41f\7\uc480\1\u46ff\7\uc4e1\7\uc542\7\uc5a3\7\uc604"+ + "\7\uc665\7\uc6c6\7\uc727\7\uc788\7\uc7e9\7\uc84a\7\uc8ab\7\uc90c"+ + "\7\uc96d\7\uc9ce\7\uca2f\7\uca90\7\ucaf1\7\ucb52\7\ucbb3\7\ucc14"+ + "\7\ucc75\7\uccd6\6\u32dc\7\ucd37\7\ucd98\7\ucdf9\7\uce5a\7\ucebb"+ + "\7\ucf1c\7\ucf7d\7\ucfde\7\ud03f\7\ud0a0\7\ud101\7\ud162\7\ud1c3"+ + "\7\ud224\7\ud285\7\ud2e6\7\ud347\7\ud3a8\7\ud409\7\ud46a\7\ud4cb"+ + "\7\ud52c\7\ud58d\7\ud5ee\7\ud64f\7\ud6b0\7\ud711\7\ud772\7\ud7d3"+ + "\7\ud834\7\ud895\7\ud8f6\7\ud957\7\ud9b8\7\uda19\7\uda7a\7\udadb"+ + "\7\udb3c\7\udb9d\7\udbfe\7\udc5f\7\udcc0\7\udd21\7\udd82\7\udde3"+ + "\7\ude44\7\udea5\7\udf06\7\udf67\7\udfc8\7\ue029\7\ue08a\7\ue0eb"+ + "\7\ue14c\7\ue1ad\7\ue20e\7\ue26f\7\ue2d0\7\ue331\7\ue392\7\ue3f3"+ + "\7\ue454\7\ue4b5\7\ue516\7\ue577\7\ue5d8\7\ue639\7\ue69a\7\ue6fb"+ + "\7\ue75c\7\ue7bd\7\ue81e\7\ue87f\7\ue8e0\7\ue941\7\ue9a2\7\uea03"+ + "\7\uea64\7\ueac5\7\ueb26\7\ueb87\7\uebe8\7\uec49\7\uecaa\7\ued0b"+ + "\7\ued6c\7\uedcd\7\uee2e\7\uee8f\7\ueef0\7\uef51\7\uefb2\7\uf013"+ + "\7\uf074\7\uf0d5\7\uf136\7\uf197\7\uf1f8\7\uf259\7\uf2ba\7\uf31b"+ + "\7\uf37c\7\uf3dd\7\uf43e\7\uf49f\7\uf500\7\uf561\7\uf5c2\7\uf623"+ + "\7\uf684\7\uf6e5\7\uf746\7\uf7a7\7\uf808\7\uf869\7\uf8ca\7\uf92b"+ + "\7\uf98c\7\uf9ed\7\ufa4e\7\ufaaf\7\ufb10\7\ufb71\7\ufbd2\7\ufc33"+ + "\7\ufc94\7\ufcf5\7\ufd56\7\ufdb7\7\ufe18\7\ufe79\7\ufeda\7\uff3b"+ + "\7\uff9c\7\ufffd\10\136\10\277\10\u0120\10\u0181\10\u01e2\10\u0243"+ + "\10\u02a4\10\u0305\10\u0366\10\u03c7\10\u0428\10\u0489\10\u04ea\10\u054b"+ + "\10\u05ac\10\u060d\10\u066e\10\u06cf\10\u0730\10\u0791\10\u07f2\10\u0853"+ + "\10\u08b4\10\u0915\10\u0976\10\u09d7\10\u0a38\10\u0a99\10\u0afa\10\u0b5b"+ + "\10\u0bbc\10\u0c1d\10\u0c7e\10\u0cdf\10\u0d40\10\u0da1\10\u0e02\10\u0e63"+ + "\10\u0ec4\10\u0f25\10\u0f86\10\u0fe7\10\u1048\10\u10a9\10\u110a\10\u116b"+ + "\10\u11cc\10\u122d\10\u128e\10\u12ef\10\u1350\10\u13b1\10\u1412\10\u1473"+ + "\10\u14d4\10\u1535\10\u1596\10\u15f7\10\u1658\10\u16b9\10\u171a\10\u177b"+ + "\10\u17dc\10\u183d\10\u189e\10\u18ff\10\u1960\10\u19c1\10\u1a22\10\u1a83"+ + "\10\u1ae4\10\u1b45\10\u1ba6\10\u1c07\10\u1c68\10\u1cc9\10\u1d2a\10\u1d8b"+ + "\10\u1dec\10\u1e4d\10\u1eae\10\u1f0f\10\u1f70\10\u1fd1\10\u2032\10\u2093"+ + "\10\u20f4\10\u2155\10\u21b6\10\u2217\10\u2278\10\u22d9\10\u233a\10\u239b"+ + "\10\u23fc\10\u245d\10\u24be\10\u251f\2\u96b5\10\u2580\10\u25e1\10\u2642"+ + "\10\u26a3\10\u2704\10\u2765\10\u27c6\10\u2827\10\u2888\10\u28e9\10\u294a"+ + "\10\u29ab\10\u2a0c\10\u2a6d\10\u2ace\10\u2b2f\10\u2b90\10\u2bf1\10\u2c52"+ + "\10\u2cb3\10\u2d14\10\u2d75\10\u2dd6\10\u2e37\10\u2e98\10\u2ef9\10\u2f5a"+ + "\10\u2fbb\10\u301c\10\u307d\10\u30de\10\u313f\10\u31a0\10\u3201\10\u3262"+ + "\10\u32c3\10\u3324\10\u3385\10\u33e6\10\u3447\10\u34a8\10\u3509\10\u356a"+ + "\10\u35cb\10\u362c\10\u368d\10\u36ee\10\u374f\10\u37b0\10\u3811\10\u3872"+ + "\10\u38d3\10\u3934\10\u3995\10\u39f6\10\u3a57\10\u3ab8\10\u3b19\10\u3b7a"+ + "\10\u3bdb\10\u3c3c\10\u3c9d\10\u3cfe\10\u3d5f\10\u3dc0\10\u3e21\10\u3e82"+ + "\10\u3ee3\10\u3f44\10\u3fa5\10\u4006\10\u4067\10\u40c8\10\u4129\10\u418a"+ + "\10\u41eb\10\u424c\10\u42ad\10\u430e\10\u436f\10\u43d0\10\u4431\10\u4492"+ + "\10\u44f3\10\u4554\10\u45b5\10\u4616\10\u4677\10\u46d8\10\u4739\10\u479a"+ + "\10\u47fb\10\u485c\10\u48bd\10\u491e\10\u497f\10\u49e0\10\u4a41\10\u4aa2"+ + "\10\u4b03\10\u4b64\10\u4bc5\10\u4c26\10\u4c87\10\u4ce8\10\u4d49\5\u774d"+ + "\10\u4daa\10\u4e0b\10\u4e6c\10\u4ecd\10\u4f2e\10\u4f8f\10\u4ff0\10\u5051"+ + "\10\u50b2\10\u5113\10\u5174\3\u5a39\10\u51d5\10\u5236\10\u5297\10\u52f8"+ + "\10\u5359\10\u53ba\10\u541b\10\u547c\10\u54dd\10\u553e\10\u559f\10\u5600"+ + "\10\u5661\10\u56c2\10\u5723\10\u5784\10\u57e5\10\u5846\10\u58a7\10\u5908"+ + "\10\u5969\10\u59ca\10\u5a2b\10\u5a8c\10\u5aed\10\u5b4e\10\u5baf\10\u5c10"+ + "\10\u5c71\10\u5cd2\10\u5d33\10\u5d94\10\u5df5\10\u5e56\10\u5eb7\10\u5f18"+ + "\10\u5f79\10\u5fda\10\u603b\10\u609c\10\u60fd\10\u615e\10\u61bf\10\u6220"+ + "\10\u6281\10\u62e2\10\u6343\10\u63a4\10\u6405\10\u6466\10\u64c7\10\u6528"+ + "\10\u6589\10\u65ea\10\u664b\10\u66ac\10\u670d\10\u676e\10\u67cf\10\u6830"+ + "\10\u6891\10\u68f2\10\u6953\10\u69b4\10\u6a15\10\u6a76\10\u6ad7\10\u6b38"+ + "\10\u6b99\10\u6bfa\10\u6c5b\10\u6cbc\10\u6d1d\10\u6d7e\10\u6ddf\10\u6e40"+ + "\10\u6ea1\10\u6f02\10\u6f63\10\u6fc4\10\u7025\10\u7086\10\u70e7\10\u7148"+ + "\10\u71a9\10\u720a\10\u726b\10\u72cc\10\u732d\10\u738e\10\u73ef\10\u7450"+ + "\4\ua502\10\u74b1\10\u7512\10\u7573\10\u75d4\10\u7635\10\u7696\10\u76f7"+ + "\10\u7758\10\u77b9\10\u781a\10\u787b\10\u78dc\10\u793d\10\u799e\10\u79ff"+ + "\10\u7a60\10\u7ac1\10\u7b22\10\u7b83\10\u7be4\10\u7c45\10\u7ca6\4\u30af"+ + "\10\u7d07\10\u7d68\10\u7dc9\10\u7e2a\10\u7e8b\10\u7eec\10\u7f4d\10\u7fae"+ + "\10\u800f\10\u8070\10\u80d1\10\u8132\10\u8193\10\u81f4\10\u8255\10\u82b6"+ + "\10\u8317\10\u8378\10\u83d9\10\u843a\10\u849b\10\u84fc\10\u855d\10\u85be"+ + "\10\u861f\10\u8680\10\u86e1\10\u8742\10\u87a3\10\u8804\10\u8865\10\u88c6"+ + "\10\u8927\10\u8988\10\u89e9\10\u8a4a\10\u8aab\10\u8b0c\10\u8b6d\10\u8bce"+ + "\10\u8c2f\10\u8c90\10\u8cf1\10\u8d52\10\u8db3\10\u8e14\10\u8e75\10\u8ed6"+ + "\10\u8f37\10\u8f98\10\u8ff9\10\u905a\10\u90bb\10\u911c\10\u917d\10\u91de"+ + "\10\u923f\10\u92a0\10\u9301\10\u9362\10\u93c3\3\u7dd7\10\u9424\10\u9485"+ + "\10\u94e6\10\u9547\10\u95a8\10\u9609\10\u966a\10\u96cb\10\u972c\10\u978d"+ + "\10\u97ee\10\u984f\10\u98b0\10\u9911\10\u9972\10\u99d3\10\u9a34\10\u9a95"+ + "\10\u9af6\10\u9b57\10\u9bb8\10\u9c19\10\u9c7a\10\u9cdb\10\u9d3c\10\u9d9d"+ + "\10\u9dfe\10\u9e5f\10\u9ec0\10\u9f21\10\u9f82\10\u9fe3\10\ua044\10\ua0a5"+ + "\10\ua106\10\ua167\10\ua1c8\10\ua229\10\ua28a\10\ua2eb\10\ua34c\10\ua3ad"+ + "\10\ua40e\10\ua46f\10\ua4d0\10\ua531\10\ua592\10\ua5f3\10\ua654\10\ua6b5"+ + "\10\ua716\10\ua777\10\ua7d8\10\ua839\10\ua89a\10\ua8fb\10\ua95c\10\ua9bd"+ + "\10\uaa1e\10\uaa7f\10\uaae0\10\uab41\10\uaba2\10\uac03\10\uac64\10\uacc5"+ + "\10\uad26\10\uad87\10\uade8\10\uae49\10\uaeaa\10\uaf0b\10\uaf6c\10\uafcd"+ + "\10\ub02e\10\ub08f\10\ub0f0\10\ub151\10\ub1b2\10\ub213\10\ub274\10\ub2d5"+ + "\10\ub336\10\ub397\10\ub3f8\10\ub459\10\ub4ba\10\ub51b\10\ub57c\10\ub5dd"+ + "\10\ub63e\10\ub69f\10\ub700\10\ub761\10\ub7c2\10\ub823\10\ub884\10\ub8e5"+ + "\10\ub946\10\ub9a7\10\uba08\10\uba69\10\ubaca\10\ubb2b\10\ubb8c\10\ubbed"+ + "\10\ubc4e\10\ubcaf\10\ubd10\10\ubd71\10\ubdd2\10\ube33\10\ube94\0\u0c81"+ + "\10\ubef5\10\ubf56\10\ubfb7\10\uc018\10\uc079\10\uc0da\10\uc13b\10\uc19c"+ + "\10\uc1fd\10\uc25e\10\uc2bf\10\uc320\10\uc381\10\uc3e2\10\uc443\10\uc4a4"+ + "\10\uc505\10\uc566\10\uc5c7\10\uc628\10\uc689\10\uc6ea\10\uc74b\10\uc7ac"+ + "\10\uc80d\10\uc86e\10\uc8cf\10\uc930\10\uc991\7\u1e8a\10\uc9f2\10\uca53"+ + "\10\ucab4\10\ucb15\10\ucb76\10\ucbd7\10\ucc38\10\ucc99\10\uccfa\10\ucd5b"+ + "\10\ucdbc\10\uce1d\10\uce7e\10\ucedf\10\ucf40\10\ucfa1\10\ud002\10\ud063"+ + "\10\ud0c4\10\ud125\10\ud186\10\ud1e7\10\ud248\10\ud2a9\10\ud30a\10\ud36b"+ + "\10\ud3cc\10\ud42d\10\ud48e\10\ud4ef\10\ud550\10\ud5b1\10\ud612\10\ud673"+ + "\10\ud6d4\10\ud735\10\ud796\10\ud7f7\10\ud858\10\ud8b9\10\ud91a\10\ud97b"+ + "\10\ud9dc\10\uda3d\10\uda9e\10\udaff\10\udb60\10\udbc1\10\udc22\10\udc83"+ + "\10\udce4\10\udd45\10\udda6\10\ude07\10\ude68\10\udec9\10\udf2a\10\udf8b"+ + "\10\udfec\10\ue04d\10\ue0ae\10\ue10f\10\ue170\10\ue1d1\10\ue232\10\ue293"+ + "\10\ue2f4\10\ue355\10\ue3b6\10\ue417\10\ue478\10\ue4d9\10\ue53a\10\ue59b"+ + "\10\ue5fc\10\ue65d\10\ue6be\10\ue71f\10\ue780\10\ue7e1\10\ue842\10\ue8a3"+ + "\10\ue904\10\ue965\10\ue9c6\10\uea27\10\uea88\10\ueae9\10\ueb4a\10\uebab"+ + "\10\uec0c\10\uec6d\10\uecce\10\ued2f\10\ued90\10\uedf1\10\uee52\10\ueeb3"+ + "\10\uef14\10\uef75\10\uefd6\10\uf037\10\uf098\10\uf0f9\10\uf15a\10\uf1bb"+ + "\10\uf21c\10\uf27d\10\uf2de\10\uf33f\10\uf3a0\10\uf401\10\uf462\10\uf4c3"+ + "\10\uf524\10\uf585\10\uf5e6\10\uf647\10\uf6a8\10\uf709\10\uf76a\10\uf7cb"+ + "\10\uf82c\10\uf88d\10\uf8ee\10\uf94f\10\uf9b0\10\ufa11\10\ufa72\10\ufad3"+ + "\10\ufb34\10\ufb95\10\ufbf6\10\ufc57\10\ufcb8\10\ufd19\10\ufd7a\10\ufddb"+ + "\10\ufe3c\10\ufe9d\10\ufefe\10\uff5f\10\uffc0\11\41\11\202\11\343"+ + "\11\u0144\11\u01a5\11\u0206\11\u0267\11\u02c8\11\u0329\11\u038a\11\u03eb"+ + "\11\u044c\11\u04ad\11\u050e\11\u056f\6\ub89d\11\u05d0\11\u0631\11\u0692"+ + "\11\u06f3\11\u0754\11\u07b5\11\u0816\11\u0877\11\u08d8\11\u0939\11\u099a"+ + "\11\u09fb\11\u0a5c\11\u0abd\11\u0b1e\11\u0b7f\11\u0be0\11\u0c41\11\u0ca2"+ + "\11\u0d03\11\u0d64\11\u0dc5\11\u0e26\11\u0e87\11\u0ee8\11\u0f49\11\u0faa"+ + "\11\u100b\11\u106c\11\u10cd\11\u112e\11\u118f\11\u11f0\11\u1251\11\u12b2"+ + "\11\u1313\11\u1374\11\u13d5\11\u1436\11\u1497\11\u14f8\11\u1559\11\u15ba"+ + "\11\u161b\11\u167c\11\u16dd\11\u173e\11\u179f\11\u1800\11\u1861\11\u18c2"+ + "\11\u1923\11\u1984\11\u19e5\11\u1a46\11\u1aa7\11\u1b08\11\u1b69\11\u1bca"+ + "\11\u1c2b\11\u1c8c\11\u1ced\11\u1d4e\11\u1daf\11\u1e10\11\u1e71\11\u1ed2"+ + "\11\u1f33\11\u1f94\11\u1ff5\11\u2056\11\u20b7\11\u2118\11\u2179\11\u21da"+ + "\11\u223b\11\u229c\11\u22fd\11\u235e\11\u23bf\11\u2420\11\u2481\11\u24e2"+ + "\11\u2543\11\u25a4\11\u2605\11\u2666\11\u26c7\11\u2728\11\u2789\11\u27ea"+ + "\11\u284b\11\u28ac\11\u290d\11\u296e\11\u29cf\11\u2a30\11\u2a91\11\u2af2"+ + "\11\u2b53\11\u2bb4\11\u2c15\11\u2c76\11\u2cd7\11\u2d38\11\u2d99\11\u2dfa"+ + "\11\u2e5b\11\u2ebc\11\u2f1d\11\u2f7e\11\u2fdf\11\u3040\11\u30a1\11\u3102"+ + "\11\u3163\11\u31c4\11\u3225\11\u3286\11\u32e7\11\u3348\11\u33a9\11\u340a"+ + "\11\u346b\11\u34cc\11\u352d\11\u358e\11\u35ef\11\u3650\11\u36b1\11\u3712"+ + "\11\u3773\11\u37d4\11\u3835\11\u3896\11\u38f7\11\u3958\11\u39b9\11\u3a1a"+ + "\11\u3a7b\11\u3adc\11\u3b3d\11\u3b9e\11\u3bff\11\u3c60\11\u3cc1\11\u3d22"+ + "\11\u3d83\11\u3de4\11\u3e45\11\u3ea6\11\u3f07\11\u3f68\11\u3fc9\11\u402a"+ + "\11\u408b\11\u40ec\11\u414d\11\u41ae\11\u420f\11\u4270\11\u42d1\11\u4332"+ + "\11\u4393\11\u43f4\11\u4455\11\u44b6\11\u4517\11\u4578\11\u45d9\11\u463a"+ + "\11\u469b\11\u46fc\11\u475d\11\u47be\11\u481f\11\u4880\11\u48e1\11\u4942"+ + "\11\u49a3\11\u4a04\11\u4a65\11\u4ac6\11\u4b27\11\u4b88\11\u4be9\11\u4c4a"+ + "\11\u4cab\11\u4d0c\11\u4d6d\11\u4dce\11\u4e2f\11\u4e90\11\u4ef1\11\u4f52"+ + "\11\u4fb3\11\u5014\11\u5075\11\u50d6\11\u5137\11\u5198\11\u51f9\11\u525a"+ + "\11\u52bb\11\u531c\11\u537d\11\u53de\11\u543f\11\u54a0\11\u5501\11\u5562"+ + "\11\u55c3\11\u5624\11\u5685\11\u56e6\11\u5747\11\u57a8\11\u5809\11\u586a"+ + "\11\u58cb\11\u592c\11\u598d\11\u59ee\11\u5a4f\11\u5ab0\11\u5b11\11\u5b72"+ + "\7\u4d86\11\u5bd3\11\u5c34\11\u5c95\11\u5cf6\11\u5d57\11\u5db8\11\u5e19"+ + "\11\u5e7a\11\u5edb\11\u5f3c\11\u5f9d\11\u5ffe\11\u605f\11\u60c0\11\u6121"+ + "\11\u6182\11\u61e3\11\u6244\11\u62a5\11\u6306\11\u6367\11\u63c8\11\u6429"+ + "\11\u648a\11\u64eb\11\u654c\11\u65ad\11\u660e\11\u666f\11\u66d0\11\u6731"+ + "\11\u6792\11\u67f3\11\u6854\11\u68b5\11\u6916\11\u6977\11\u69d8\11\u6a39"+ + "\11\u6a9a\11\u6afb\11\u6b5c\11\u6bbd\11\u6c1e\11\u6c7f\11\u6ce0\11\u6d41"+ + "\11\u6da2\11\u6e03\11\u6e64\11\u6ec5\11\u6f26\11\u6f87\11\u6fe8\11\u7049"+ + "\11\u70aa\11\u710b\11\u716c\11\u71cd\11\u722e\11\u728f\11\u72f0\11\u7351"+ + "\11\u73b2\11\u7413\11\u7474\11\u74d5\11\u7536\11\u7597\11\u75f8\11\u7659"+ + "\2\u453e\11\u76ba\11\u771b\11\u777c\11\u77dd\11\u783e\11\u789f\11\u7900"+ + "\11\u7961\11\u79c2\11\u7a23\11\u7a84\11\u7ae5\11\u7b46\11\u7ba7\11\u7c08"+ + "\11\u7c69\11\u7cca\11\u7d2b\11\u7d8c\11\u7ded\11\u7e4e\4\u3110\11\u7eaf"+ + "\11\u7f10\11\u7f71\11\u7fd2\11\u8033\11\u8094\11\u80f5\11\u8156\11\u81b7"+ + "\11\u8218\11\u8279\11\u82da\11\u833b\11\u839c\11\u83fd\11\u845e\11\u84bf"+ + "\11\u8520\11\u8581\11\u85e2\11\u8643\11\u86a4\11\u8705\11\u8766\11\u87c7"+ + "\11\u8828\11\u8889\11\u88ea\11\u894b\11\u89ac\11\u8a0d\11\u8a6e\11\u8acf"+ + "\11\u8b30\11\u8b91\11\u8bf2\11\u8c53\11\u8cb4\11\u8d15\11\u8d76\11\u8dd7"+ + "\11\u8e38\11\u8e99\11\u8efa\11\u8f5b\11\u8fbc\11\u901d\11\u907e\11\u90df"+ + "\11\u9140\11\u91a1\11\u9202\11\u9263\11\u92c4\11\u9325\11\u9386\11\u93e7"+ + "\11\u9448\11\u94a9\11\u950a\11\u956b\11\u95cc\11\u962d\11\u968e\11\u96ef"+ + "\11\u9750\11\u97b1\11\u9812\11\u9873\11\u98d4\11\u9935\11\u9996\11\u99f7"+ + "\11\u9a58\11\u9ab9\11\u9b1a\11\u9b7b\11\u9bdc\11\u9c3d\11\u9c9e\11\u9cff"+ + "\11\u9d60\11\u9dc1\11\u9e22\11\u9e83\11\u9ee4\11\u9f45\11\u9fa6\11\ua007"+ + "\11\ua068\11\ua0c9\11\ua12a\11\ua18b\11\ua1ec\11\ua24d\11\ua2ae\11\ua30f"+ + "\11\ua370\11\ua3d1\11\ua432\11\ua493\11\ua4f4\11\ua555\11\ua5b6\11\ua617"+ + "\11\ua678\11\ua6d9\11\ua73a\11\ua79b\11\ua7fc\11\ua85d\11\ua8be\11\ua91f"+ + "\11\ua980\11\ua9e1\11\uaa42\11\uaaa3\11\uab04\11\uab65\11\uabc6\11\uac27"+ + "\11\uac88\11\uace9\11\uad4a\11\uadab\11\uae0c\11\uae6d\11\uaece\11\uaf2f"+ + "\11\uaf90\11\uaff1\11\ub052\11\ub0b3\11\ub114\11\ub175\11\ub1d6\11\ub237"+ + "\11\ub298\11\ub2f9\11\ub35a\11\ub3bb\11\ub41c\11\ub47d\11\ub4de\11\ub53f"+ + "\11\ub5a0\11\ub601\11\ub662\11\ub6c3\11\ub724\11\ub785\11\ub7e6\11\ub847"+ + "\11\ub8a8\11\ub909\11\ub96a\11\ub9cb\11\uba2c\11\uba8d\11\ubaee\11\ubb4f"+ + "\11\ubbb0\11\ubc11\11\ubc72\11\ubcd3\11\ubd34\11\ubd95\11\ubdf6\11\ube57"+ + "\11\ubeb8\11\ubf19\11\ubf7a\11\ubfdb\11\uc03c\11\uc09d\11\uc0fe\11\uc15f"+ + "\11\uc1c0\11\uc221\11\uc282\11\uc2e3\11\uc344\11\uc3a5\11\uc406\11\uc467"+ + "\11\uc4c8\3\u991f\11\uc529\11\uc58a\11\uc5eb\11\uc64c\11\uc6ad\11\uc70e"+ + "\11\uc76f\11\uc7d0\11\uc831\11\uc892\11\uc8f3\11\uc954\11\uc9b5\11\uca16"+ + "\11\uca77\11\ucad8\11\ucb39\11\ucb9a\11\ucbfb\11\ucc5c\11\uccbd\11\ucd1e"+ + "\11\ucd7f\11\ucde0\11\uce41\11\ucea2\11\ucf03\11\ucf64\11\ucfc5\11\ud026"+ + "\11\ud087\11\ud0e8\11\ud149\11\ud1aa\11\ud20b\11\ud26c\11\ud2cd\11\ud32e"+ + "\11\ud38f\11\ud3f0\11\ud451\11\ud4b2\11\ud513\11\ud574\11\ud5d5\11\ud636"+ + "\11\ud697\11\ud6f8\11\ud759\11\ud7ba\11\ud81b\11\ud87c\11\ud8dd\11\ud93e"+ + "\11\ud99f\11\uda00\11\uda61\11\udac2\11\udb23\11\udb84\11\udbe5\11\udc46"+ + "\11\udca7\11\udd08\11\udd69\11\uddca\11\ude2b\11\ude8c\11\udeed\11\udf4e"+ + "\11\udfaf\11\ue010\11\ue071\11\ue0d2\11\ue133\11\ue194\11\ue1f5\11\ue256"+ + "\11\ue2b7\11\ue318\11\ue379\11\ue3da\11\ue43b\11\ue49c\11\ue4fd\11\ue55e"+ + "\11\ue5bf\11\ue620\11\ue681\11\ue6e2\11\ue743\11\ue7a4\11\ue805\11\ue866"+ + "\11\ue8c7\11\ue928\11\ue989\11\ue9ea\11\uea4b\11\ueaac\11\u4dce\11\ueb0d"+ + "\11\ueb6e\11\uebcf\11\uec30\11\uec91\11\uecf2\11\ued53\11\uedb4\11\uee15"+ + "\11\uee76\11\ueed7\11\uef38\11\uef99\11\ueffa\11\uf05b\11\uf0bc\11\uf11d"+ + "\11\uf17e\11\uf1df\11\uf240\11\uf2a1\11\uf302\11\uf363\11\uf3c4\11\uf425"+ + "\11\uf486\11\uf4e7\11\uf548\11\uf5a9\11\uf60a\11\uf66b\11\uf6cc\11\uf72d"+ + "\11\uf78e\11\uf7ef\11\uf850\11\uf8b1\11\uf912\11\uf973\11\uf9d4\11\ufa35"+ + "\11\ufa96\11\ufaf7\11\ufb58\11\ufbb9\11\ufc1a\11\ufc7b\11\ufcdc\11\ufd3d"+ + "\11\ufd9e\11\ufdff\11\ufe60\11\ufec1\11\uff22\11\uff83\11\uffe4\12\105"+ + "\12\246\12\u0107\12\u0168\12\u01c9\12\u022a\12\u028b\12\u02ec\12\u034d"+ + "\12\u03ae\12\u040f\12\u0470\12\u04d1\12\u0532\12\u0593\12\u05f4\12\u0655"+ + "\12\u06b6\12\u0717\12\u0778\12\u07d9\12\u083a\6\u82cf\12\u089b\12\u08fc"+ + "\12\u095d\12\u09be\12\u0a1f\12\u0a80\12\u0ae1\12\u0b42\12\u0ba3\12\u0c04"+ + "\12\u0c65\12\u0cc6\12\u0d27\12\u0d88\12\u0de9\12\u0e4a\12\u0eab\12\u0f0c"+ + "\12\u0f6d\12\u0fce\12\u102f\12\u1090\12\u10f1\12\u1152\12\u11b3\12\u1214"+ + "\12\u1275\12\u12d6\12\u1337\12\u1398\12\u13f9\12\u145a\12\u14bb\12\u151c"+ + "\12\u157d\12\u15de\12\u163f\12\u16a0\12\u1701\12\u1762\12\u17c3\12\u1824"+ + "\12\u1885\12\u18e6\12\u1947\12\u19a8\12\u1a09\12\u1a6a\12\u1acb\12\u1b2c"+ + "\12\u1b8d\12\u1bee\12\u1c4f\12\u1cb0\12\u1d11\12\u1d72\12\u1dd3\12\u1e34"+ + "\12\u1e95\12\u1ef6\12\u1f57\12\u1fb8\12\u2019\12\u207a\12\u20db\12\u213c"+ + "\12\u219d\12\u21fe\12\u225f\12\u22c0\12\u2321\12\u2382\12\u23e3\12\u2444"+ + "\12\u24a5\12\u2506\12\u2567\12\u25c8\12\u2629\12\u268a\12\u26eb\12\u274c"+ + "\12\u27ad\12\u280e\12\u286f\12\u28d0\12\u2931\12\u2992\12\u29f3\12\u2a54"+ + "\12\u2ab5\12\u2b16\12\u2b77\12\u2bd8\12\u2c39\12\u2c9a\12\u2cfb\12\u2d5c"+ + "\12\u2dbd\12\u2e1e\12\u2e7f\12\u2ee0\12\u2f41\12\u2fa2\12\u3003\12\u3064"+ + "\12\u30c5\12\u3126\12\u3187\12\u31e8\12\u3249\12\u32aa\12\u330b\12\u336c"+ + "\12\u33cd\12\u342e\12\u348f\12\u34f0\12\u3551\12\u35b2\12\u3613\12\u3674"+ + "\12\u36d5\12\u3736\12\u3797\12\u37f8\12\u3859\12\u38ba\12\u391b\12\u397c"+ + "\12\u39dd\12\u3a3e\12\u3a9f\12\u3b00\12\u3b61\12\u3bc2\12\u3c23\12\u3c84"+ + "\12\u3ce5\12\u3d46\12\u3da7\12\u3e08\12\u3e69\12\u3eca\12\u3f2b\12\u3f8c"+ + "\12\u3fed\12\u404e\12\u40af\12\u4110\1\u07b8\12\u4171\12\u41d2\12\u4233"+ + "\12\u4294\12\u42f5\12\u4356\12\u43b7\12\u4418\12\u4479\12\u44da\12\u453b"+ + "\12\u459c\12\u45fd\12\u465e\12\u46bf\12\u4720\12\u4781\12\u47e2\12\u4843"+ + "\12\u48a4\12\u4905\12\u4966\12\u49c7\12\u4a28\12\u4a89\12\u4aea\12\u4b4b"+ + "\12\u4bac\12\u4c0d\12\u4c6e\12\u4ccf\12\u4d30\12\u4d91\12\u4df2\12\u4e53"+ + "\12\u4eb4\12\u4f15\12\u4f76\12\u4fd7\12\u5038\12\u5099\12\u50fa\12\u515b"+ + "\12\u51bc\12\u521d\12\u527e\12\u52df\12\u5340\12\u53a1\12\u5402\12\u5463"+ + "\12\u54c4\12\u5525\12\u5586\12\u55e7\12\u5648\12\u56a9\12\u570a\12\u576b"+ + "\12\u57cc\5\u6ef7\12\u582d\12\u588e\12\u58ef\12\u5950\12\u59b1\12\u5a12"+ + "\12\u5a73\12\u5ad4\12\u5b35\12\u5b96\12\u5bf7\12\u5c58\12\u5cb9\12\u5d1a"+ + "\12\u5d7b\12\u5ddc\12\u5e3d\12\u5e9e\12\u5eff\12\u5f60\12\u5fc1\12\u6022"+ + "\12\u6083\12\u60e4\12\u6145\12\u61a6\12\u6207\12\u6268\12\u62c9\12\u632a"+ + "\12\u638b\12\u63ec\12\u644d\12\u64ae\12\u650f\12\u6570\12\u65d1\12\u6632"+ + "\12\u6693\12\u66f4\12\u6755\12\u67b6\12\u6817\12\u6878\12\u68d9\12\u693a"+ + "\12\u699b\12\u69fc\12\u6a5d\12\u6abe\12\u6b1f\12\u6b80\12\u6be1\12\u6c42"+ + "\10\u6f63\12\u6ca3\12\u6d04\12\u6d65\12\u6dc6\12\u6e27\12\u6e88\12\u6ee9"+ + "\12\u6f4a\12\u6fab\12\u700c\12\u706d\12\u70ce\12\u712f\12\u7190\12\u71f1"+ + "\12\u7252\12\u72b3\12\u7314\12\u7375\12\u73d6\12\u7437\12\u7498\12\u74f9"+ + "\12\u755a\12\u75bb\12\u761c\12\u767d\12\u76de\12\u773f\12\u77a0\12\u7801"+ + "\12\u7862\12\u78c3\12\u7924\12\u7985\12\u79e6\12\u7a47\12\u7aa8\12\u7b09"+ + "\12\u7b6a\12\u7bcb\12\u7c2c\12\u7c8d\12\u7cee\12\u7d4f\12\u7db0\12\u7e11"+ + "\12\u7e72\12\u7ed3\12\u7f34\12\u7f95\12\u7ff6\12\u8057\12\u80b8\12\u8119"+ + "\12\u817a\12\u81db\12\u823c\12\u829d\12\u82fe\12\u835f\12\u83c0\12\u8421"+ + "\12\u8482\12\u84e3\12\u8544\12\u85a5\12\u8606\12\u8667\12\u86c8\12\u8729"+ + "\12\u878a\12\u87eb\12\u884c\12\u88ad\12\u890e\12\u896f\12\u89d0\12\u8a31"+ + "\12\u8a92\12\u8af3\3\u45c3\12\u8b54\12\u8bb5\12\u8c16\12\u8c77\12\u8cd8"+ + "\12\u8d39\12\u8d9a\12\u8dfb\12\u8e5c\12\u8ebd\12\u8f1e\12\u8f7f\12\u8fe0"+ + "\12\u9041\12\u90a2\12\u9103\12\u9164\12\u91c5\12\u9226\12\u9287\12\u92e8"+ + "\10\ucf40\12\u9349\12\u93aa\12\u940b\12\u946c\12\u94cd\12\u952e\12\u958f"+ + "\12\u95f0\12\u9651\12\u96b2\12\u9713\12\u9774\12\u97d5\12\u9836\12\u9897"+ + "\12\u98f8\12\u9959\12\u99ba\12\u9a1b\12\u9a7c\12\u9add\12\u9b3e\12\u9b9f"+ + "\12\u9c00\12\u9c61\12\u9cc2\12\u9d23\12\u9d84\12\u9de5\12\u9e46\12\u9ea7"+ + "\12\u9f08\12\u9f69\12\u9fca\12\ua02b\12\ua08c\12\ua0ed\12\ua14e\12\ua1af"+ + "\12\ua210\12\ua271\12\ua2d2\12\ua333\12\ua394\12\ua3f5\12\u47e2\12\ua456"+ + "\12\ua4b7\12\ua518\12\ua579\12\ua5da\12\ua63b\12\ua69c\12\ua6fd\12\ua75e"+ + "\12\ua7bf\12\ua820\12\ua881\12\ua8e2\12\ua943\12\ua9a4\12\uaa05\12\uaa66"+ + "\12\uaac7\12\uab28\12\uab89\12\uabea\12\uac4b\12\uacac\12\uad0d\12\uad6e"+ + "\12\uadcf\12\uae30\12\uae91\12\uaef2\12\uaf53\12\uafb4\12\ub015\12\ub076"+ + "\12\ub0d7\12\ub138\12\ub199\12\ub1fa\12\ub25b\12\ub2bc\12\ub31d\12\ub37e"+ + "\12\ub3df\12\ub440\12\ub4a1\12\ub502\12\ub563\12\ub5c4\12\ub625\12\ub686"+ + "\7\u14b0\12\ub6e7\12\ub748\12\ub7a9\12\ub80a\12\ub86b\12\ub8cc\12\ub92d"+ + "\12\ub98e\12\ub9ef\12\uba50\12\ubab1\12\ubb12\12\ubb73\12\ubbd4\12\ubc35"+ + "\12\ubc96\12\ubcf7\12\ubd58\12\ubdb9\12\ube1a\12\ube7b\12\ubedc\12\ubf3d"+ + "\12\ubf9e\12\ubfff\12\uc060\12\uc0c1\12\uc122\12\uc183\12\uc1e4\12\uc245"+ + "\12\uc2a6\12\uc307\12\uc368\12\uc3c9\12\uc42a\12\uc48b\12\uc4ec\12\uc54d"+ + "\12\u213c\12\uc5ae\12\uc60f\12\uc670\12\uc6d1\12\uc732\12\uc793\12\uc7f4"+ + "\12\uc855\12\uc8b6\12\uc917\12\uc978\12\uc9d9\12\uca3a\12\uca9b\12\ucafc"+ + "\12\ucb5d\12\ucbbe\12\ucc1f\12\ucc80\12\ucce1\12\ucd42\12\ucda3\12\uce04"+ + "\12\uce65\12\ucec6\12\ucf27\12\ucf88\12\ucfe9\12\ud04a\12\ud0ab\12\ud10c"+ + "\12\ud16d\12\ud1ce\12\ud22f\12\ud290\12\ud2f1\12\ud352\12\ud3b3\12\ud414"+ + "\12\ud475\12\ud4d6\12\ud537\12\ud598\12\ud5f9\12\ud65a\12\ud6bb\12\ud71c"+ + "\12\ud77d\12\ud7de\12\ud83f\12\ud8a0\12\ud901\12\ud962\11\u2af2\12\ud9c3"+ + "\12\uda24\12\uda85\12\udae6\12\udb47\12\udba8\12\udc09\12\udc6a\12\udccb"+ + "\12\udd2c\12\udd8d\12\uddee\12\ude4f\12\udeb0\12\udf11\12\udf72\12\udfd3"+ + "\12\ue034\12\ue095\12\ue0f6\12\ue157\12\ue1b8\12\ue219\12\ue27a\12\ue2db"+ + "\12\ue33c\12\ue39d\12\ue3fe\12\ue45f\12\ue4c0\12\ue521\12\ue582\12\ue5e3"+ + "\12\ue644\12\ue6a5\12\ue706\12\ue767\12\ue7c8\12\ue829\12\ue88a\12\ue8eb"+ + "\12\ue94c\12\ue9ad\12\uea0e\12\uea6f\12\uead0\12\ueb31\12\ueb92\12\uebf3"+ + "\12\uec54\12\uecb5\12\ued16\12\ued77\12\uedd8\12\uee39\12\uee9a\12\ueefb"+ + "\12\uef5c\12\uefbd\12\uf01e\12\uf07f\12\uf0e0\12\uf141\12\uf1a2\12\uf203"+ + "\12\uf264\12\uf2c5\12\uf326\12\uf387\12\uf3e8\12\uf449\12\uf4aa\12\uf50b"+ + "\12\uf56c\12\uf5cd\12\uf62e\12\uf68f\12\uf6f0\12\uf751\12\uf7b2\12\uf813"+ + "\12\uf874\12\uf8d5\12\uf936\12\uf997\12\uf9f8\12\ufa59\12\ufaba\12\ufb1b"+ + "\12\ufb7c\12\ufbdd\12\ufc3e\12\ufc9f\12\ufd00\12\ufd61\12\ufdc2\12\ufe23"+ + "\12\ufe84\12\ufee5\12\uff46\12\uffa7\13\10\13\151\13\312\13\u012b"+ + "\13\u018c\13\u01ed\13\u024e\13\u02af\13\u0310\13\u0371\13\u03d2\13\u0433"+ + "\13\u0494\13\u04f5\13\u0556\13\u05b7\13\u0618\13\u0679\13\u06da\13\u073b"+ + "\13\u079c\13\u07fd\13\u085e\13\u08bf\13\u0920\13\u0981\13\u09e2\13\u0a43"+ + "\13\u0aa4\13\u0b05\13\u0b66\3\uf532\13\u0bc7\13\u0c28\13\u0c89\13\u0cea"+ + "\6\u752b\13\u0d4b\13\u0dac\13\u0e0d\13\u0e6e\13\u0ecf\13\u0f30\13\u0f91"+ + "\13\u0ff2\13\u1053\13\u10b4\13\u1115\13\u1176\13\u11d7\13\u1238\13\u1299"+ + "\13\u12fa\13\u135b\13\u13bc\13\u141d\13\u147e\13\u14df\13\u1540\13\u15a1"+ + "\13\u1602\13\u1663\13\u16c4\13\u1725\13\u1786\13\u17e7\13\u1848\13\u18a9"+ + "\13\u190a\13\u196b\13\u19cc\13\u1a2d\13\u1a8e\13\u1aef\13\u1b50\13\u1bb1"+ + "\13\u1c12\13\u1c73\13\u1cd4\13\u1d35\13\u1d96\13\u1df7\13\u1e58\13\u1eb9"+ + "\13\u1f1a\13\u1f7b\13\u1fdc\13\u203d\13\u209e\13\u20ff\13\u2160\13\u21c1"+ + "\13\u2222\13\u2283\13\u22e4\13\u2345\13\u23a6\13\u2407\13\u2468\13\u24c9"+ + "\13\u252a\13\u258b\13\u25ec\12\u4233\13\u264d\13\u26ae\13\u270f\13\u2770"+ + "\13\u27d1\13\u2832\13\u2893\13\u28f4\13\u2955\13\u29b6\13\u2a17\13\u2a78"+ + "\13\u2ad9\13\u2b3a\13\u2b9b\13\u2bfc\13\u2c5d\13\u2cbe\13\u2d1f\13\u2d80"+ + "\13\u2de1\13\u2e42\13\u2ea3\13\u2f04\13\u2f65\13\u2fc6\13\u3027\13\u3088"+ + "\13\u30e9\13\u314a\13\u31ab\13\u320c\13\u326d\13\u32ce\13\u332f\13\u3390"+ + "\13\u33f1\13\u3452\13\u34b3\13\u3514\13\u3575\13\u35d6\13\u3637\13\u3698"+ + "\13\u36f9\13\u375a\13\u37bb\13\u381c\13\u387d\13\u38de\13\u393f\13\u39a0"+ + "\13\u3a01\13\u3a62\13\u3ac3\13\u3b24\13\u3b85\13\u3be6\13\u3c47\13\u3ca8"+ + "\13\u3d09\13\u3d6a\13\u3dcb\13\u3e2c\13\u3e8d\13\u3eee\13\u3f4f\13\u3fb0"+ + "\13\u4011\13\u4072\13\u40d3\13\u4134\13\u4195\13\u41f6\13\u4257\13\u42b8"+ + "\13\u4319\13\u437a\13\u43db\13\u443c\13\u449d\13\u44fe\13\u455f\13\u45c0"+ + "\13\u4621\13\u4682\13\u46e3\13\u4744\13\u47a5\13\u4806\13\u4867\13\u48c8"+ + "\13\u4929\13\u498a\13\u49eb\13\u4a4c\13\u4aad\13\u4b0e\13\u4b6f\13\u4bd0"+ + "\13\u4c31\13\u4c92\13\u4cf3\13\u4d54\13\u4db5\13\u4e16\13\u4e77\13\u4ed8"+ + "\13\u4f39\13\u4f9a\13\u4ffb\13\u505c\13\u50bd\13\u511e\13\u517f\13\u51e0"+ + "\13\u5241\13\u52a2\13\u5303\13\u5364\13\u53c5\11\u0b7f\13\u5426\13\u5487"+ + "\13\u54e8\13\u5549\13\u55aa\13\u560b\13\u566c\13\u56cd\13\u572e\13\u578f"+ + "\13\u57f0\13\u5851\13\u58b2\13\u5913\13\u5974\13\u59d5\13\u5a36\13\u5a97"+ + "\13\u5af8\13\u5b59\13\u5bba\13\u5c1b\13\u5c7c\6\uf660\13\u5cdd\12\uaa05"+ + "\13\u5d3e\13\u5d9f\13\u5e00\13\u5e61\13\u5ec2\13\u5f23\13\u5f84\13\u5fe5"+ + "\13\u6046\13\u60a7\13\u6108\13\u6169\13\u61ca\13\u622b\13\u628c\13\u62ed"+ + "\13\u634e\13\u63af\13\u6410\13\u6471\13\u64d2\13\u6533\13\u6594\13\u65f5"+ + "\13\u6656\13\u66b7\13\u6718\13\u6779\13\u67da\13\u683b\13\u689c\13\u68fd"+ + "\13\u695e\13\u69bf\13\u6a20\13\u6a81\13\u6ae2\13\u6b43\13\u6ba4\13\u6c05"+ + "\13\u6c66\13\u6cc7\13\u6d28\13\u6d89\13\u6dea\13\u6e4b\13\u6eac\13\u6f0d"+ + "\13\u6f6e\13\u6fcf\13\u7030\13\u7091\13\u70f2\13\u7153\13\u71b4\13\u7215"+ + "\13\u7276\13\u72d7\13\u7338\13\u7399\13\u73fa\13\u745b\13\u74bc\13\u751d"+ + "\13\u757e\13\u75df\13\u7640\13\u76a1\13\u7702\13\u7763\13\u77c4\13\u7825"+ + "\13\u7886\13\u78e7\13\u7948\13\u79a9\13\u7a0a\13\u7a6b\13\u7acc\13\u7b2d"+ + "\13\u7b8e\13\u7bef\13\u7c50\13\u7cb1\13\u7d12\13\u7d73\13\u7dd4\13\u7e35"+ + "\13\u7e96\13\u7ef7\13\u7f58\13\u7fb9\13\u801a\13\u807b\13\u80dc\13\u813d"+ + "\13\u819e\13\u81ff\13\u8260\13\u82c1\13\u8322\13\u8383\13\u83e4\13\u8445"+ + "\13\u84a6\13\u8507\13\u8568\13\u85c9\13\u862a\13\u868b\13\u86ec\13\u874d"+ + "\13\u87ae\13\u880f\13\u8870\13\u88d1\13\u8932\13\u8993\13\u89f4\13\u8a55"+ + "\13\u8ab6\13\u8b17\13\u8b78\13\u8bd9\13\u8c3a\13\u8c9b\13\u8cfc\13\u8d5d"+ + "\13\u8dbe\5\u4a36\13\u8e1f\13\u8e80\13\u8ee1\13\u8f42\13\u8fa3\13\u9004"+ + "\13\u9065\13\u90c6\13\u9127\13\u9188\13\u91e9\13\u924a\13\u92ab\13\u930c"+ + "\13\u936d\13\u93ce\13\u942f\13\u9490\13\u94f1\13\u9552\13\u95b3\13\u9614"+ + "\13\u9675\13\u96d6\13\u9737\13\u9798\13\u97f9\13\u985a\13\u98bb\13\u991c"+ + "\13\u997d\13\u99de\13\u9a3f\13\u9aa0\13\u9b01\13\u9b62\13\u9bc3\13\u9c24"+ + "\13\u9c85\13\u9ce6\13\u9d47\13\u9da8\13\u9e09\13\u9e6a\13\u9ecb\13\u9f2c"+ + "\13\u9f8d\13\u9fee\13\ua04f\13\ua0b0\13\ua111\13\ua172\13\ua1d3\13\ua234"+ + "\13\ua295\13\ua2f6\13\ua357\13\ua3b8\13\ua419\13\ua47a\13\ua4db\13\ua53c"+ + "\13\ua59d\13\ua5fe\13\ua65f\13\ua6c0\13\ua721\13\ua782\13\ua7e3\13\ua844"+ + "\13\ua8a5\13\ua906\13\ua967\13\ua9c8\13\uaa29\13\uaa8a\13\uaaeb\13\uab4c"+ + "\13\uabad\13\uac0e\13\uac6f\13\uacd0\13\uad31\13\uad92\13\uadf3\13\uae54"+ + "\13\uaeb5\13\uaf16\13\uaf77\13\uafd8\13\ub039\13\ub09a\13\ub0fb\13\ub15c"+ + "\13\ub1bd\13\ub21e\13\ub27f\13\ub2e0\13\ub341\13\ub3a2\13\ub403\13\ub464"+ + "\13\ub4c5\13\ub526\13\ub587\13\ub5e8\13\ub649\13\ub6aa\13\ub70b\13\ub76c"+ + "\13\ub7cd\13\ub82e\13\ub88f\13\ub8f0\13\ub951\13\ub9b2\13\uba13\13\uba74"+ + "\13\ubad5\13\ubb36\13\ubb97\13\ubbf8\13\ubc59\13\ubcba\13\ubd1b\13\ubd7c"+ + "\13\ubddd\13\ube3e\13\ube9f\13\ubf00\13\ubf61\13\ubfc2\13\uc023\13\uc084"+ + "\13\uc0e5\13\uc146\13\uc1a7\13\uc208\13\uc269\13\uc2ca\13\uc32b\13\uc38c"+ + "\13\uc3ed\13\uc44e\13\uc4af\13\uc510\13\uc571\13\uc5d2\13\uc633\13\uc694"+ + "\13\uc6f5\13\uc756\13\uc7b7\13\uc818\13\uc879\13\uc8da\13\uc93b\13\uc99c"+ + "\13\uc9fd\13\uca5e\13\ucabf\13\ucb20\13\ucb81\13\ucbe2\13\ucc43\13\ucca4"+ + "\13\ucd05\13\ucd66\13\ucdc7\13\uce28\13\uce89\13\uceea\13\ucf4b\13\ucfac"+ + "\13\ud00d\13\ud06e\13\ud0cf\13\ud130\13\ud191\13\ud1f2\13\ud253\13\ud2b4"+ + "\13\ud315\13\ud376\13\ud3d7\13\ud438\13\ud499\11\udca7"; - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + private static int [] zzUnpackRowMap() { + int [] result = new int[8198]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_TRANS_PACKED_0 = - "\1\21\1\22\1\23\1\24\1\25\1\26\122\21\2\27" + - "\1\30\45\27\1\31\57\27\2\32\1\33\14\32\1\34" + - "\110\32\1\35\1\36\1\0\1\35\1\25\2\35\1\37" + - "\1\40\6\35\1\41\6\35\1\42\1\43\100\35\2\44" + - "\1\0\1\44\1\45\2\44\2\45\1\46\1\47\1\50" + - "\1\51\1\52\1\53\1\45\3\44\1\54\2\44\2\45" + - "\1\55\1\50\1\53\1\56\1\54\7\44\1\57\2\60" + - "\1\61\11\44\1\61\1\62\1\57\1\46\1\47\1\51" + - "\1\52\1\63\1\62\1\64\1\56\1\44\1\65\1\66" + - "\1\55\1\44\1\67\1\70\1\71\1\63\2\44\1\67" + - "\1\64\1\66\2\44\1\71\1\44\1\65\2\44\1\70" + - "\6\44\27\72\1\73\100\72\26\74\1\75\101\74\1\76" + - "\1\77\1\0\1\76\1\25\2\76\1\37\1\100\6\76" + - "\1\101\6\76\1\102\1\103\100\76\27\72\1\104\100\72" + - "\26\74\1\105\101\74\1\106\1\25\1\107\1\110\1\25" + - "\1\111\1\112\1\113\1\114\3\115\1\116\2\115\1\117" + - "\1\115\1\120\1\121\1\115\1\120\1\106\1\122\1\123" + - "\1\124\1\125\1\126\1\127\1\130\1\120\1\131\1\106" + - "\2\115\1\113\3\115\1\132\1\115\1\133\1\134\1\135" + - "\1\112\1\136\2\113\2\37\1\137\1\140\1\141\1\142" + - "\1\143\1\144\1\145\3\115\1\146\11\115\1\120\3\115" + - "\1\147\1\150\1\115\1\151\1\152\4\115\3\120\1\115" + - "\2\120\2\153\1\154\37\153\1\155\65\153\1\106\1\25" + - "\1\156\1\157\1\25\1\111\1\112\1\113\1\160\6\115" + - "\1\117\1\115\1\120\1\121\1\115\1\120\1\106\1\161" + - "\1\162\1\163\1\164\1\165\1\166\1\167\1\120\1\112" + - "\1\170\1\171\1\172\1\113\3\115\1\173\1\115\1\133" + - "\1\134\1\135\1\112\1\136\2\113\1\174\1\37\1\175" + - "\1\176\1\177\1\200\1\201\1\202\1\203\1\204\14\115" + - "\1\120\1\115\1\205\1\206\1\207\1\210\1\211\1\212" + - "\1\213\1\214\1\215\1\216\1\217\3\120\1\220\2\120" + - "\2\153\1\221\37\153\1\222\65\153\2\223\1\224\22\223" + - "\1\225\1\223\1\226\11\223\1\227\66\223\2\230\1\231" + - "\22\230\1\232\1\233\101\230\2\21\4\0\123\21\1\22" + - "\2\0\1\25\1\0\122\21\140\0\1\234\6\235\1\0" + - "\5\235\3\0\6\235\5\0\5\235\6\0\1\236\1\237" + - "\1\0\3\235\1\240\43\235\1\0\1\25\2\0\1\25" + - "\123\0\4\26\1\0\1\26\1\241\121\26\2\27\1\0" + - "\45\27\1\0\57\27\50\0\1\242\57\0\2\32\1\0" + - "\14\32\1\0\110\32\2\35\1\0\1\35\1\0\2\35" + - "\2\0\6\35\1\0\6\35\2\0\101\35\1\36\1\0" + - "\1\35\1\25\2\35\2\0\6\35\1\0\6\35\2\0" + - "\100\35\17\0\1\41\110\0\2\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\102\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\243\2\44\1\244" + - "\1\245\1\0\6\44\2\0\1\246\1\44\1\245\14\44" + - "\1\247\11\44\1\247\1\250\2\44\1\243\1\44\1\244" + - "\1\44\1\250\1\251\2\44\1\252\1\44\1\246\10\44" + - "\1\251\5\44\1\252\13\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\253\2\44\1\0\6\44\2\0\17\44" + - "\1\254\11\44\1\254\1\255\3\44\1\253\2\44\1\255" + - "\1\256\15\44\1\256\21\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\1\257\46\44\1\257" + - "\32\44\1\0\1\44\1\0\2\44\2\0\1\260\5\44" + - "\1\0\6\44\2\0\3\44\1\261\10\44\1\262\2\263" + - "\14\44\1\262\1\260\6\44\1\261\1\44\1\264\20\44" + - "\1\264\13\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\265\3\44\1\0\6\44\2\0\1\44\1\265\12\44" + - "\1\266\15\44\1\267\1\266\5\44\1\267\40\44\1\0" + - "\1\44\1\0\2\44\2\0\2\44\1\70\1\270\1\44" + - "\1\70\1\0\3\44\1\271\2\44\2\0\1\44\2\70" + - "\1\44\1\271\10\44\2\272\1\273\11\44\1\273\1\274" + - "\3\44\1\270\1\44\1\275\1\274\4\44\1\70\5\44" + - "\1\275\4\44\1\70\20\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\70\1\264\2\44\1\0\6\44\2\0" + - "\1\276\1\70\12\44\1\277\15\44\1\300\1\277\2\44" + - "\1\264\2\44\1\300\1\301\3\44\1\302\1\276\1\303" + - "\7\44\1\301\1\302\3\44\1\303\14\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\14\44" + - "\1\70\16\44\1\70\46\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\17\44\1\304\11\44" + - "\1\304\1\305\6\44\1\305\1\306\15\44\1\306\21\44" + - "\1\0\1\44\1\0\2\44\2\0\3\44\1\307\2\44" + - "\1\0\6\44\2\0\17\44\1\310\11\44\1\310\1\311" + - "\3\44\1\307\2\44\1\311\40\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\312\1\313\2\44\1\0\6\44" + - "\2\0\1\44\1\312\34\44\1\313\3\44\1\314\15\44" + - "\1\314\21\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\45\44\1\315\5\44\1\316\10\44" + - "\1\316\1\44\1\315\13\44\1\0\1\44\1\0\2\44" + - "\2\0\1\317\1\320\1\321\1\44\1\322\1\44\1\0" + - "\3\44\1\323\2\44\2\0\1\324\1\321\2\44\1\323" + - "\27\44\1\317\1\320\1\44\1\322\6\44\1\325\1\324" + - "\11\44\1\325\20\44\1\0\1\44\1\0\2\44\2\0" + - "\2\44\1\70\2\44\1\326\1\0\6\44\2\0\1\44" + - "\1\70\1\326\2\44\1\70\11\44\1\327\11\44\1\327" + - "\23\44\1\70\14\44\3\70\1\44\1\70\3\44\1\0" + - "\1\44\1\0\2\44\2\0\4\44\1\330\1\44\1\0" + - "\3\44\1\331\2\44\2\0\1\332\3\44\1\331\7\44" + - "\1\70\16\44\1\70\3\44\1\330\7\44\1\332\32\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\1\333\16\44\1\334\11\44\1\334\1\335\6\44" + - "\1\335\5\44\1\333\32\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\336\1\44\1\70\1\0\6\44\2\0" + - "\2\44\1\70\11\44\1\70\2\337\1\340\11\44\1\340" + - "\1\341\1\70\2\44\1\336\2\44\1\341\4\44\1\70" + - "\12\44\1\70\20\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\3\44\1\342\2\44\2\0\4\44\1\342" + - "\12\44\1\343\11\44\1\343\50\44\1\0\1\44\1\0" + - "\2\44\2\0\3\44\1\344\2\44\1\0\6\44\2\0" + - "\32\44\1\345\3\44\1\344\2\44\1\345\36\44\27\72" + - "\1\0\100\72\26\74\1\0\101\74\2\76\1\0\1\76" + - "\1\0\2\76\2\0\6\76\1\0\6\76\2\0\101\76" + - "\1\77\1\0\1\76\1\25\2\76\2\0\6\76\1\0" + - "\6\76\2\0\100\76\17\0\1\346\110\0\1\106\10\0" + - "\6\106\1\0\6\106\2\0\6\106\1\0\3\106\1\0" + - "\5\106\11\0\47\106\3\0\1\347\3\0\1\37\1\350" + - "\124\0\1\37\1\0\1\37\127\0\1\37\127\0\1\37" + - "\1\351\31\0\1\352\65\0\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\354\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\7\0\1\37\7\0\1\355" + - "\110\0\1\356\10\0\6\356\1\0\1\356\2\120\1\356" + - "\1\120\1\356\2\0\5\356\1\120\1\0\3\356\1\0" + - "\1\356\1\357\2\360\1\361\1\0\1\362\7\0\1\361" + - "\1\356\1\357\12\356\1\360\6\356\1\120\3\356\1\360" + - "\10\356\3\120\1\356\2\120\1\356\10\0\6\356\1\0" + - "\1\356\1\363\1\364\1\356\1\364\1\356\2\0\5\356" + - "\1\364\1\0\3\356\1\0\1\365\1\357\2\360\1\361" + - "\1\0\1\362\7\0\1\361\1\356\1\357\12\356\1\360" + - "\6\356\1\364\3\356\1\360\5\356\1\365\2\356\3\364" + - "\1\356\1\364\1\363\2\366\1\367\22\366\1\370\1\371" + - "\101\366\2\123\1\0\22\123\1\372\1\123\1\373\100\123" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\374\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\375" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\376\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\377\22\115\1\u0100\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0101\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0102\1\u0103\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0104\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0105\2\115\1\u0106\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0107\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0108\1\u0109\2\115" + - "\1\u010a\21\115\1\u010b\17\115\7\0\1\37\40\0\1\37" + - "\100\0\2\362\1\0\1\362\10\0\1\362\47\0\1\362" + - "\14\0\3\362\1\0\2\362\7\0\1\37\44\0\1\37" + - "\53\0\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u010c\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u010d\1\u010e\27\115\1\u010f\2\115\1\u0110" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0111\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0112\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0113\1\115\1\u0114\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u0115\21\115\1\u0116" + - "\1\u0117\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0118\1\u0119\4\115\1\u011a\17\115\1\u011b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u011c\2\115\1\0\1\106\2\115\1\0\3\115\1\u011d" + - "\1\115\11\0\3\115\1\u011e\31\115\1\u011f\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0120\1\u0121" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0122\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0123\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0124\26\115\1\u0125\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0126\1\115\1\u0127\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u010b" + - "\25\115\1\u0128\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0129\17\115\2\153\1\0\37\153\1\0" + - "\65\153\10\0\1\u012a\122\0\1\347\3\0\1\37\127\0" + - "\1\37\1\170\31\0\1\u012b\65\0\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u012c\1\u012d\1\u012e" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u012f\1\115\1\u0130\1\u0131\21\115\1\u012f\6\115\1\u0132" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0133\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0134\1\u0135\1\115\1\u0136\2\115\1\u0137\20\115" + - "\1\u0138\5\115\1\u0139\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u013a\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u013b\1\u013c\2\115\1\u013d" + - "\1\u013e\1\115\1\u013f\17\115\1\u0140\2\115\1\u0141\2\115" + - "\1\u0142\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0143\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0144\1\u0145\1\u0146\1\u0147\23\115\1\u0148\4\115" + - "\1\u0149\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0104\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u014a\1\u014b\2\115\1\u014c\1\u014d\31\115" + - "\1\u014e\7\115\2\170\1\0\125\170\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u014f" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\u0150" + - "\1\0\1\u0150\2\115\1\u0150\1\115\1\353\2\0\5\u0150" + - "\1\115\1\0\1\106\1\u0150\1\115\1\0\5\u0150\11\0" + - "\24\u0150\1\115\14\u0150\3\115\1\u0150\2\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0151\1\u0152\1\u0153" + - "\1\u0154\1\u0155\1\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0156\1\115\11\0\1\u0157\1\u0108\1\u0158\1\u0159\1\u015a" + - "\1\u015b\1\u015c\20\115\1\u015d\1\115\1\u015e\2\115\1\u015f" + - "\1\u0160\11\115\17\0\1\u0161\110\0\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0162\1\115\1\u0163" + - "\1\u0164\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0165\1\u0166\1\u0167\1\u0168\22\115\1\u0169\3\115" + - "\1\u016a\1\115\1\u016b\1\u016c\1\u016d\7\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u016e\1\u016f\1\u0170" + - "\1\u0171\1\u0172\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0173\1\u0174\1\u0175\1\115\1\u0176\21\115" + - "\1\u0177\3\115\1\u0178\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0133\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0179\1\u017a\1\115\1\u017b" + - "\1\u017c\1\u017d\21\115\1\u017e\1\u017f\6\115\1\u0180\7\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0181" + - "\1\u0182\1\u0183\1\u0184\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0185\1\u0186\1\u0187\1\u0188\1\u0189\1\u018a" + - "\1\u018b\1\u018c\16\115\1\u018d\1\u018e\1\115\1\u018f\1\u0190" + - "\5\115\1\u0191\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0192\1\u0193\4\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0194\1\115\11\0\1\u0195\1\u0196\1\u0197" + - "\1\115\1\u0198\2\115\1\u0199\17\115\1\u019a\2\115\1\u019b" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u019c\1\u019d\1\u019e\1\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u011d\1\115\11\0\3\115\1\u019f\1\u01a0" + - "\1\115\1\u01a1\21\115\1\u01a2\3\115\1\u01a3\1\u01a4\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u01a5" + - "\1\u01a6\1\115\1\u01a7\2\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u01a8\1\115\11\0\1\115\1\u01a9\2\115\1\u01aa" + - "\1\u01ab\1\115\1\u01ac\17\115\1\u01ad\1\u01ae\3\115\1\u01af" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u01b0\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u01b1\1\u01b2\3\115\1\u01b3\23\115\1\u01b4\1\u01b5" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u012f\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u01b6\2\115\1\u0136\1\115\1\u01b7\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u01b8\1\u01b9" + - "\2\115\1\u01ba\1\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u01bb\1\115\11\0\2\115\1\u01bc\1\115\1\u01bd\1\115" + - "\1\u01be\21\115\1\u01bf\1\u01c0\1\115\1\u01c1\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u01c2\1\u01c3" + - "\1\115\1\u01c4\1\u01c5\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u01c6\1\u01c7\1\u01c8\1\u01c9\1\u01ca\1\u01cb" + - "\21\115\1\u01cc\4\115\1\u0149\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u01cd\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0127\17\115" + - "\1\u01ce\1\u01cf\14\115\1\u01d0\1\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u01d1\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u01d2\1\115\11\0\1\u01d3\1\u01d4" + - "\1\115\1\u01d2\1\115\1\u01d5\1\u01d6\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u01d7\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u01d8\1\115" + - "\1\u01d9\24\115\1\u0129\1\u01da\4\115\1\u01db\1\115\1\u01dc" + - "\7\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u01dd\1\115\1\u01de\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u01df\1\u01e0\1\115\1\u01e1\1\u01e2" + - "\1\u01e3\1\115\1\u01e4\16\115\1\u01e5\1\u01e6\1\u01e7\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u01e8" + - "\1\115\1\u01e9\1\115\1\u01ea\1\u01eb\20\115\1\u010b\5\115" + - "\1\u01ec\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u01ed\1\115\1\u01ee\2\115\1\u01ef\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u01f0\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u01f1\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u01f2" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u01f3" + - "\1\u01f4\4\115\1\u01f5\20\115\1\u01f6\1\u01f7\16\115\10\0" + - "\1\u01f8\117\0\2\223\1\0\22\223\1\0\1\223\1\0" + - "\11\223\1\0\66\223\2\u01f9\1\0\125\u01f9\11\0\6\u01fa" + - "\1\0\1\u01fa\2\0\1\u01fa\4\0\5\u01fa\3\0\1\u01fa" + - "\2\0\5\u01fa\11\0\24\u01fa\1\0\14\u01fa\3\0\1\u01fa" + - "\2\0\2\230\1\0\22\230\2\0\101\230\2\u01fb\1\0" + - "\125\u01fb\11\0\6\u01fc\1\0\5\u01fc\3\0\6\u01fc\5\0" + - "\5\u01fc\11\0\47\u01fc\11\0\6\235\1\0\5\235\3\0" + - "\6\235\5\0\5\235\11\0\47\235\50\0\1\u01fd\146\0" + - "\1\u01fe\51\0\6\235\1\0\5\235\3\0\6\235\5\0" + - "\5\235\11\0\4\235\1\u01ff\42\235\17\0\1\u0200\110\0" + - "\2\44\1\0\1\44\1\0\2\44\2\0\2\44\1\u0201" + - "\3\44\1\0\6\44\2\0\1\44\1\u0201\100\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\32\44\1\u0202\6\44\1\u0202\40\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\u0203\3\44\1\0\6\44\2\0" + - "\1\44\1\u0203\42\44\1\257\16\44\1\257\16\44\1\0" + - "\1\44\1\0\2\44\2\0\4\44\1\70\1\44\1\0" + - "\3\44\1\70\2\44\2\0\4\44\1\70\32\44\1\70" + - "\42\44\1\0\1\44\1\0\2\44\2\0\1\44\1\u0204" + - "\1\u0205\3\44\1\0\6\44\2\0\1\44\1\u0205\12\44" + - "\1\u0206\16\44\1\u0206\1\44\1\u0204\44\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\45\44" + - "\1\u0207\20\44\1\u0207\13\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\1\u0208\46\44\1\u0208" + - "\32\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\32\44\1\u0209\6\44\1\u0209\40\44\1\0" + - "\1\44\1\0\2\44\2\0\5\44\1\u020a\1\0\6\44" + - "\2\0\2\44\1\u020a\77\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\3\44\1\u020b\37\44" + - "\1\u020b\36\44\1\0\1\44\1\0\2\44\2\0\4\44" + - "\1\u0204\1\44\1\0\6\44\2\0\3\44\1\u020c\33\44" + - "\1\u0204\3\44\1\u020c\36\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\14\44\1\u020d\16\44" + - "\1\u020d\11\44\1\u020e\1\u020a\12\44\1\u020a\4\44\1\u020e" + - "\13\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\14\44\1\u020a\16\44\1\u020a\46\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\u020f\2\44\1\0" + - "\6\44\2\0\36\44\1\u020f\43\44\1\0\1\44\1\0" + - "\2\44\2\0\1\70\3\44\1\u0210\1\44\1\0\6\44" + - "\2\0\34\44\1\70\2\44\1\u0210\42\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\32\44" + - "\1\u0211\6\44\1\u0211\40\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\u0212\3\44\1\0\6\44\2\0\1\44" + - "\1\u0212\100\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\50\44\1\70\14\44\1\70\14\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\17\44\1\70\11\44\1\70\10\44\1\u0213\15\44" + - "\1\u0213\21\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\32\44\1\u0214\6\44\1\u0214\40\44" + - "\1\0\1\44\1\0\2\44\2\0\2\44\1\u0215\3\44" + - "\1\0\6\44\2\0\1\44\1\u0215\100\44\1\0\1\44" + - "\1\0\2\44\2\0\5\44\1\257\1\0\6\44\2\0" + - "\2\44\1\257\42\44\1\u020a\20\44\1\u020a\13\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\42\44\1\301\15\44\1\301\21\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\42\44\1\u0216" + - "\15\44\1\u0216\21\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\13\44\1\u0217\53\44\1\u0217" + - "\12\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\3\44\1\257\2\44\2\0\4\44\1\257\75\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\17\44\1\u0218\11\44\1\u0218\50\44\1\0\1\44\1\0" + - "\2\44\2\0\5\44\1\u0219\1\0\6\44\2\0\2\44" + - "\1\u0219\77\44\1\0\1\44\1\0\2\44\2\0\3\44" + - "\1\u021a\2\44\1\0\6\44\2\0\36\44\1\u021a\3\44" + - "\1\u021b\15\44\1\u021b\21\44\1\0\1\44\1\0\2\44" + - "\2\0\1\u021c\5\44\1\0\6\44\2\0\34\44\1\u021c" + - "\45\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\46\44\1\u021d\12\44\1\u021d\20\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\42\44\1\70\15\44\1\70\21\44\1\0\1\44\1\0" + - "\2\44\2\0\1\u021e\5\44\1\0\6\44\2\0\34\44" + - "\1\u021e\45\44\1\0\1\44\1\0\2\44\2\0\1\u021f" + - "\5\44\1\0\6\44\2\0\34\44\1\u021f\45\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\53\44\1\70\10\44\1\70\15\44\1\0\1\44\1\0" + - "\2\44\2\0\1\u0220\5\44\1\0\3\44\1\345\2\44" + - "\2\0\4\44\1\345\7\44\1\262\2\u0221\1\u0222\11\44" + - "\1\u0222\1\44\1\262\1\u0220\45\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\3\44\1\u0223" + - "\37\44\1\u0223\36\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\50\44\1\u0224\14\44\1\u0224" + - "\14\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\3\44\1\u0225\2\44\2\0\4\44\1\u0225\37\44\1\u0226" + - "\16\44\1\u0226\16\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\32\44\1\u0227\6\44\1\u0227" + - "\40\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\17\44\1\u0228\11\44\1\u0228\16\44\1\u0229" + - "\14\44\1\u0229\14\44\1\0\1\44\1\0\2\44\2\0" + - "\2\44\1\u022a\3\44\1\0\6\44\2\0\1\44\1\u022a" + - "\1\44\1\u021f\36\44\1\u020b\1\u021f\14\44\1\u020b\21\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\3\44" + - "\1\u022b\2\44\2\0\4\44\1\u022b\75\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\17\44" + - "\1\u022c\11\44\1\u022c\50\44\1\0\1\44\1\0\2\44" + - "\2\0\3\44\1\u022d\2\44\1\0\6\44\2\0\36\44" + - "\1\u022d\43\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\u022e\3\44\1\0\6\44\2\0\1\44\1\u022e\100\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\u022f\1\0" + - "\6\44\2\0\2\44\1\u022f\14\44\1\u0230\11\44\1\u0230" + - "\50\44\1\0\1\44\1\0\2\44\2\0\4\44\1\u0231" + - "\1\44\1\0\6\44\2\0\37\44\1\u0231\42\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\3\44\1\345" + - "\2\44\2\0\4\44\1\345\75\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\46\44\1\u0232" + - "\12\44\1\u0232\20\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\46\44\1\u0233\12\44\1\u0233" + - "\20\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\45\44\1\u0234\20\44\1\u0234\13\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\32\44\1\u0235\6\44\1\u0235\40\44\1\0\1\44\1\0" + - "\2\44\2\0\5\44\1\u0236\1\0\6\44\2\0\2\44" + - "\1\u0236\77\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\56\44\1\u0206\16\44\1\u0206\4\44" + - "\1\0\1\44\1\0\2\44\2\0\5\44\1\u0237\1\0" + - "\6\44\2\0\2\44\1\u0237\77\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\14\44\1\u0238" + - "\16\44\1\u0238\46\44\1\0\1\44\1\0\2\44\2\0" + - "\5\44\1\u0239\1\0\6\44\2\0\2\44\1\u0239\1\u023a" + - "\37\44\1\u023a\36\44\1\0\1\44\1\0\2\44\2\0" + - "\2\44\1\u023b\1\44\1\70\1\44\1\0\6\44\2\0" + - "\1\44\1\u023b\35\44\1\70\42\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\70\3\44\1\0\6\44\2\0" + - "\1\44\1\70\30\44\1\u023c\6\44\1\u023c\11\44\1\70" + - "\10\44\1\70\15\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\3\44\1\70\37\44\1\70" + - "\36\44\1\0\1\44\1\0\2\44\2\0\5\44\1\u023d" + - "\1\0\6\44\2\0\2\44\1\u023d\11\44\1\70\16\44" + - "\1\70\46\44\1\0\1\44\1\0\2\44\2\0\5\44" + - "\1\u023e\1\0\6\44\2\0\2\44\1\u023e\77\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\46\44\1\70\12\44\1\70\20\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\44\44\1\u023f" + - "\16\44\1\u023f\16\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\46\44\1\u0240\12\44\1\u0240" + - "\20\44\1\0\1\44\1\0\2\44\2\0\2\44\1\70" + - "\3\44\1\0\6\44\2\0\1\44\1\70\76\44\11\0" + - "\1\u0241\52\0\1\u0241\43\0\2\351\1\0\125\351\42\0" + - "\1\u0242\65\0\1\106\10\0\6\106\1\0\6\106\2\0" + - "\1\u0243\5\106\1\0\3\106\1\0\5\106\11\0\50\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0244\1\115\11\0\47\115" + - "\7\0\1\37\7\0\1\113\110\0\1\356\10\0\6\356" + - "\1\0\6\356\2\0\6\356\1\0\3\356\1\0\5\356" + - "\11\0\50\356\10\0\6\356\1\0\1\356\2\u0245\1\356" + - "\1\u0245\1\356\2\0\5\356\1\u0245\1\0\3\356\1\0" + - "\5\356\1\u0246\3\0\1\u0246\4\0\24\356\1\u0245\14\356" + - "\3\u0245\1\356\2\u0245\1\356\10\0\6\356\1\0\1\356" + - "\2\362\1\356\1\362\1\356\2\0\5\356\1\362\1\0" + - "\3\356\1\0\2\356\2\360\1\361\11\0\1\361\14\356" + - "\1\360\6\356\1\362\3\356\1\360\10\356\3\362\1\356" + - "\2\362\1\356\10\0\6\356\1\0\1\356\2\363\1\356" + - "\1\363\1\356\2\0\5\356\1\363\1\0\3\356\1\0" + - "\2\356\2\360\1\361\1\0\1\362\7\0\1\361\14\356" + - "\1\360\6\356\1\363\3\356\1\360\10\356\3\363\1\356" + - "\2\363\1\356\10\0\6\356\1\0\1\356\1\363\1\364" + - "\1\356\1\364\1\356\2\0\5\356\1\364\1\0\3\356" + - "\1\0\1\356\1\u0247\2\360\1\361\1\0\1\362\7\0" + - "\1\361\1\356\1\u0247\12\356\1\360\6\356\1\364\3\356" + - "\1\360\10\356\3\364\1\356\1\364\1\363\1\356\10\0" + - "\1\356\1\u0248\4\356\1\0\1\356\4\u0248\1\356\2\0" + - "\4\356\2\u0248\1\0\3\356\1\0\2\356\3\u0248\11\0" + - "\2\u0248\2\356\1\u0248\3\356\1\u0248\4\356\1\u0248\6\356" + - "\1\u0248\3\356\1\u0248\10\356\3\u0248\1\356\2\u0248\2\u0249" + - "\1\0\23\u0249\1\u024a\101\u0249\26\0\1\u024a\101\0\2\u0249" + - "\1\0\17\u0249\1\u024b\1\u0249\1\u024c\1\366\1\367\1\366" + - "\1\u024d\4\366\1\u024b\10\u0249\1\366\36\u0249\1\u024c\14\u0249" + - "\1\u024b\2\u024c\1\u0249\1\u024b\1\u0249\2\u024e\1\0\17\u024e" + - "\1\123\1\u024e\1\123\1\u024f\2\123\1\u0250\5\123\10\u024e" + - "\1\123\36\u024e\1\123\14\u024e\3\123\1\u024e\1\123\1\u024e" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0251\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0252\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0253\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0254\30\115\1\u011d\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0255\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0256\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0257" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0258\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u011d\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0259\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u025a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u025b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u025c\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u025d\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u025e\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u025f" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0260\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u011d\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0261\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0262\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0263\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0264\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0265\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0266" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0267\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0268\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0269\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u026a\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u026b\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u026c\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u026d" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u026e\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0262\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u026f\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0270\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0271\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0272\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0273" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\2\115\1\u0274\2\115" + - "\11\0\12\115\1\u0275\34\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0276\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0277\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0278\21\115\1\u0279" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u027a\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u027b\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\12\115\1\u011d\34\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u027c\1\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u027d\1\115\11\0\2\115" + - "\1\u027e\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u027f\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0280\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0281\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0282\2\115\1\u0171\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0283" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0284" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u0285\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0286\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0287\1\u0288\1\115\1\u0289\1\u028a" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0136\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u028b\1\115\1\u028c\24\115\1\u028d\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u028e\1\115\11\0\31\115\1\u028f" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0290\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0291\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0252\1\u0292\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0293\1\u0294\1\u0295" + - "\1\u0296\1\115\1\u0297\22\115\1\u0298\2\115\1\u0299\1\u029a" + - "\2\115\1\u029b\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u029c\1\115\1\u029d\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u029e\1\u029f" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u028d\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u02a0\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u02a1\1\115\1\u02a2\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u02a3\26\115\1\u02a4" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u02a5\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u02a6\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u02a7\24\115\1\u011d\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0264\32\115\1\u02a8" + - "\1\u02a9\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u02aa\1\115\1\u02ab\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u02ac\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u02ad\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u02ae\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u02af\4\115\1\u02b0\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u02b1\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u02b2\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u02b3\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u02b4" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u02b5\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u02b6\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u011d\4\115\1\u02b7\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u02b8\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u02b9" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u02ba\1\115\1\0\5\115\11\0" + - "\41\115\1\u02bb\5\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u02bc\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u02bd\1\u02be\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u02bf\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u02c0\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u02c1" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u02c2\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u02c3\1\115\1\u02c4\1\u02c5\1\115\1\u02c6\21\115" + - "\1\u02c7\4\115\1\u02c8\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u02c9\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u02ca\4\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0156\1\115\11\0\1\u02cb" + - "\3\115\1\u02cc\22\115\1\u02cd\1\u02ce\1\u015e\15\115\1\106" + - "\10\0\1\115\1\u02cf\4\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u02d0\3\115\1\0\1\106\2\115\1\0\2\115" + - "\1\u02d1\2\115\11\0\4\115\1\u02d2\5\115\1\u02d3\1\115" + - "\1\u02d4\1\u02d5\16\115\1\u02d6\12\115\1\106\10\0\6\u0150" + - "\1\0\5\u0150\1\353\2\0\6\u0150\1\0\1\106\1\u0150" + - "\1\115\1\0\5\u0150\11\0\47\u0150\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u02d7\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u02d8\4\115\1\u02d9\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02da\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u01b7\2\115\1\u017b\2\115\1\u02db\20\115\1\u02dc\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u02dd" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u02de\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u02df\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u02e0\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0169\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u02e1\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u02e2\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u02e3\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u02e4\3\115\1\u02e5\22\115\1\u02e6\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u02e7\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u02e8" + - "\1\115\1\u02e9\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u02ea\1\115\1\u02eb\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u02ec\1\u02ed\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u02ee\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02ef\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u02f0\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u02f1\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u02f2\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u02f3\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u02f4\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02f5\1\u02f6\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u02f7\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u02f8\26\115\1\u02f9\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u02fa\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u02fb\1\u02fc\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u02fd" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u02fe\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u0283\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u01c8\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0258\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u02ff\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0300\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0301\4\115" + - "\1\u0302\1\u0303\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0304\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0305\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0306\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0136\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0307\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0308\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u011d\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0309\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u030a\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u030b\1\u030c\1\u030d" + - "\21\115\1\u028d\6\115\1\u030e\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u030f\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0310\4\115\1\u0311" + - "\21\115\1\u0312\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0313\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0314\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u0315\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0316\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0317" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u02e3\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0318\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0319\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u031a\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u031b\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u031c" + - "\2\115\1\u031d\22\115\1\u031e\4\115\1\u031f\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0320\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0321\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0322\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u02a1\2\115\1\u0323\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0324\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0325\25\115" + - "\1\u0326\1\u0327\4\115\1\u0328\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0329\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u032a\1\u032b" + - "\1\u032c\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u02dc\1\115\1\u032d\1\u032e\31\115\1\u032f\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u0330\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0331\1\u0332" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0333\1\115\1\u02e5\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0334\5\115\1\u0335\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u02ab" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0336\1\115\1\u0337\7\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u02ed\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0338\1\115\1\u0339\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u033a" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u033b" + - "\1\u033c\25\115\1\u033d\5\115\1\u033e\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u033f\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0340\1\u0341\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0342" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u0343\1\115" + - "\11\0\5\115\1\u026c\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0344\31\115\1\u0345\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0341" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0346\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0347\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0348\1\u0349\2\115\1\u034a\25\115\1\u034b\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0107" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0264" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u026e\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u034c\1\u0262\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u034d\1\u034e\3\115\1\u034f\21\115" + - "\1\u0350\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u0351\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0352\1\u0353\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0354\1\u0355\3\115\1\u0356\21\115" + - "\1\u0357\1\u02a5\3\115\1\u0358\1\u0160\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0359\2\115\1\u035a" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u02ab\2\115\1\u035b\26\115\1\u035c\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u035d\2\115" + - "\1\u035e\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u035f" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0360\3\115\1\0\1\106\1\u0361\1\115\1\0" + - "\3\115\1\u0362\1\115\11\0\1\u0363\2\115\1\u0364\1\u0365" + - "\1\u0366\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0367\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0368\1\u0369\3\115\1\0\1\106" + - "\1\u036a\1\115\1\0\3\115\1\u036b\1\115\11\0\1\u036c" + - "\1\u036d\1\u036e\1\u036f\1\u0370\1\u02f3\1\u0371\1\u0372\20\115" + - "\1\u0373\1\u0374\4\115\1\u0375\5\115\1\u0376\2\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0377\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0378\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\41\115\1\u0379\5\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u037a\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u037b\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u037c\4\115\1\u037d\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u037e" + - "\1\115\1\u037f\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0380\4\115\1\u0381\21\115\1\u0382\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u0383\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0384\2\115" + - "\1\u0385\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0386\1\u0387\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0388\1\u02dc\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0389" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u02e7\24\115\1\u038a\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u038b\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u038c\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u038d\2\115\1\u02f0" + - "\22\115\1\u01c8\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u038e\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u038f\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0390\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0391\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0392" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0393\34\115\1\u0394\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0395\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0396\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0397\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0398\1\115\1\0\5\115\11\0\1\115" + - "\1\u0399\1\115\1\u017b\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u039a\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u039b\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0264\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u039c" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u039d" + - "\26\115\1\u01c8\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u039e\1\115\1\0" + - "\5\115\11\0\44\115\1\u039f\2\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u03a0\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u03a1\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0394" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u03a2\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u03a3\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u03a4\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u03a5\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u03a6\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u03a7\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u03a8\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u03a9\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u03aa" + - "\30\115\1\u0149\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u03ab\1\u017b\31\115\1\u03ac\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u03ad" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u03ae\1\115" + - "\11\0\1\115\1\u03af\1\u03b0\1\u03b1\1\u03b2\27\115\1\u03b3" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u03b4\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u03b5\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u03b6\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u017b\30\115\1\u0149\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u03b7\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u011d\2\115\1\u03b8\23\115\1\u03b9\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u03ba\1\115\1\u03bb" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u03bc\30\115\1\u03bd\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u03be\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u03bf\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u03c0\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\41\115\1\u03c1\5\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u03c2\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u03c3" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u03c4\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u03c5\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u03c6\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u03c7\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u03c8" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02ed\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u03c9\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u03ca\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u03cb\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u03cc\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u03cd" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u03ce\2\115\1\u03cf\21\115" + - "\1\u03d0\4\115\1\u03d1\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u03d2\1\u03d3\1\u03d4\3\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u036b\1\115\11\0\1\u03d5" + - "\2\115\1\u03d6\1\u02cc\1\u03d7\1\u03d8\20\115\1\u02cd\1\u03d9" + - "\1\u015e\2\115\1\u03da\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u03db\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u03dc\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u03dd\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u03de\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u03df\1\115" + - "\1\u03e0\26\115\1\u03e1\1\115\1\u01c8\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u03e2\33\115\1\u03e3\3\115" + - "\1\u0264\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u03e4\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u03e5\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u03e6\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u03e7\30\115" + - "\1\u03e8\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u03e9\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u03ea\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u02a5\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u03eb\1\115" + - "\1\u03ec\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u03ed\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u03ee\23\115\1\u03ef\22\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u03f0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u03f1\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u03f2" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u03f3\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u03f4\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u03f5\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u03f6\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u03f7\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u03f8\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u03f9\26\115\1\u03fa" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u03fb\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u03fc\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u03fd\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u03fe\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u01a7\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u03ff\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0400\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u0401" + - "\4\115\1\u0402\11\115\11\0\6\u01fa\1\0\5\u01fa\3\0" + - "\6\u01fa\2\0\1\u01fa\2\0\5\u01fa\11\0\47\u01fa\50\0" + - "\1\u0403\147\0\1\u0404\50\0\6\235\1\0\5\235\3\0" + - "\1\235\1\u0405\4\235\5\0\5\235\11\0\47\235\2\44" + - "\1\0\1\44\1\0\2\44\2\0\3\44\1\u0406\2\44" + - "\1\0\6\44\2\0\36\44\1\u0406\43\44\1\0\1\44" + - "\1\0\2\44\2\0\1\44\1\u0226\4\44\1\0\6\44" + - "\2\0\3\44\1\70\31\44\1\u0226\5\44\1\70\36\44" + - "\1\0\1\44\1\0\2\44\2\0\3\44\1\u0407\2\44" + - "\1\0\6\44\2\0\36\44\1\u0407\3\44\1\u0408\15\44" + - "\1\u0408\21\44\1\0\1\44\1\0\2\44\2\0\5\44" + - "\1\u0409\1\0\6\44\2\0\2\44\1\u0409\77\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\53\44\1\u0226\10\44\1\u0226\15\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\17\44\1\u040a" + - "\11\44\1\u040a\50\44\1\0\1\44\1\0\2\44\2\0" + - "\4\44\1\70\1\44\1\0\6\44\2\0\37\44\1\70" + - "\42\44\1\0\1\44\1\0\2\44\2\0\2\44\1\u040b" + - "\3\44\1\0\6\44\2\0\1\44\1\u040b\100\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\14\44\1\u0234\16\44\1\u0234\46\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\17\44\1\70" + - "\11\44\1\70\50\44\1\0\1\44\1\0\2\44\2\0" + - "\5\44\1\u0226\1\0\6\44\2\0\2\44\1\u0226\77\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\53\44\1\u040c\10\44\1\u040c\15\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\50\44" + - "\1\u040d\14\44\1\u040d\14\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\45\44\1\u040e\20\44" + - "\1\u040e\13\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\3\44\1\u040f\37\44\1\u040f\36\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\1\u021f\46\44\1\u021f\32\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\44\44\1\u0226" + - "\16\44\1\u0226\16\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\32\44\1\u0410\6\44\1\u0410" + - "\40\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\50\44\1\u0233\14\44\1\u0233\14\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\u0411\2\44\1\0" + - "\6\44\2\0\36\44\1\u0411\43\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\32\44\1\u022a" + - "\6\44\1\u022a\40\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\42\44\1\u021f\15\44\1\u021f" + - "\21\44\1\0\1\44\1\0\2\44\2\0\5\44\1\u0412" + - "\1\0\6\44\2\0\2\44\1\u0412\77\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\32\44" + - "\1\342\6\44\1\342\40\44\1\0\1\44\1\0\2\44" + - "\2\0\5\44\1\u0413\1\0\6\44\2\0\2\44\1\u0413" + - "\77\44\1\0\1\44\1\0\2\44\2\0\1\44\1\u0414" + - "\4\44\1\0\6\44\2\0\35\44\1\u0414\44\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\17\44\1\u0415\11\44\1\u0415\50\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\44\44\1\70" + - "\16\44\1\70\16\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\42\44\1\u0416\15\44\1\u0416" + - "\21\44\1\0\1\44\1\0\2\44\2\0\5\44\1\70" + - "\1\0\6\44\2\0\2\44\1\70\77\44\1\0\1\44" + - "\1\0\2\44\2\0\1\44\1\243\4\44\1\0\6\44" + - "\2\0\35\44\1\243\44\44\1\0\1\44\1\0\2\44" + - "\2\0\2\44\1\u0417\3\44\1\0\6\44\2\0\1\44" + - "\1\u0417\100\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\45\44\1\u0418\20\44\1\u0418\13\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\51\44\1\70\5\44\1\70\22\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\17\44" + - "\1\u0419\11\44\1\u0419\50\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\17\44\1\u0234\11\44" + - "\1\u0234\50\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\17\44\1\345\11\44\1\345\50\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\45\44\1\u041a\20\44\1\u041a\13\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\14\44" + - "\1\u041b\16\44\1\u041b\46\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\1\u041c\46\44\1\u041c" + - "\32\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\45\44\1\70\20\44\1\70\13\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\17\44\1\342\11\44\1\342\50\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\3\44\1\u041d" + - "\37\44\1\u041d\36\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\46\44\1\u020a\12\44\1\u020a" + - "\20\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\42\44\1\u041e\15\44\1\u041e\21\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\u041f\2\44\1\0" + - "\6\44\2\0\36\44\1\u041f\43\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\32\44\1\70" + - "\6\44\1\70\40\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\14\44\1\u0420\16\44\1\u0420" + - "\46\44\1\0\1\44\1\0\2\44\2\0\3\44\1\302" + - "\2\44\1\0\6\44\2\0\36\44\1\302\43\44\1\0" + - "\1\44\1\0\2\44\2\0\2\44\1\u0421\3\44\1\0" + - "\6\44\2\0\1\44\1\u0421\100\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\46\44\1\u0422" + - "\12\44\1\u0422\20\44\1\0\1\44\1\0\2\44\2\0" + - "\3\44\1\u0413\2\44\1\0\6\44\2\0\36\44\1\u0413" + - "\11\44\1\u040d\14\44\1\u040d\14\44\1\0\1\44\1\0" + - "\2\44\2\0\4\44\1\u0210\1\44\1\0\6\44\2\0" + - "\37\44\1\u0210\42\44\1\0\1\44\1\0\2\44\2\0" + - "\5\44\1\u0423\1\0\6\44\2\0\2\44\1\u0423\77\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\17\44\1\345\11\44\1\345\1\70\6\44\1\70" + - "\40\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\1\70\46\44\1\70\32\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\51\44" + - "\1\70\1\u0424\4\44\1\70\11\44\1\u0424\10\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\14\44\1\u0425\16\44\1\u0425\46\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\32\44\1\u0426" + - "\6\44\1\u0426\40\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\32\44\1\u0427\6\44\1\u0427" + - "\40\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\50\44\1\u0428\14\44\1\u0428\14\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\17\44\1\302\11\44\1\302\46\44\12\0\1\u0429\52\0" + - "\1\u0429\52\0\1\u042a\117\0\1\106\10\0\1\106\1\u042b" + - "\4\106\1\0\1\106\4\u042b\1\106\2\0\4\106\2\u042b" + - "\1\0\3\106\1\0\2\106\3\u042b\11\0\2\u042b\2\106" + - "\1\u042b\3\106\1\u042b\4\106\1\u042b\6\106\1\u042b\3\106" + - "\1\u042b\10\106\3\u042b\1\106\2\u042b\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u042c\41\115\1\356\10\0" + - "\6\356\1\0\1\356\2\u0245\1\356\1\u0245\1\356\2\0" + - "\5\356\1\u0245\1\0\3\356\1\0\2\356\2\360\1\356" + - "\11\0\15\356\1\360\6\356\1\u0245\3\356\1\360\10\356" + - "\3\u0245\1\356\2\u0245\21\0\2\u0245\1\0\1\u0245\10\0" + - "\1\u0245\47\0\1\u0245\14\0\3\u0245\1\0\2\u0245\1\356" + - "\10\0\1\356\1\u0248\4\356\1\0\1\356\4\u0248\1\356" + - "\2\0\4\356\2\u0248\1\0\3\356\1\0\1\356\1\u0247" + - "\3\u0248\11\0\2\u0248\1\u0247\1\356\1\u0248\3\356\1\u0248" + - "\4\356\1\u0248\6\356\1\u0248\3\356\1\u0248\10\356\3\u0248" + - "\1\356\2\u0248\2\u0249\1\0\23\u0249\1\371\103\u0249\1\0" + - "\17\u0249\1\u024c\1\u0249\1\u024c\1\u0249\1\u024a\6\u0249\1\u024c" + - "\47\u0249\1\u024c\14\u0249\3\u024c\1\u0249\1\u024c\3\u0249\1\0" + - "\17\u0249\1\366\1\u0249\1\366\1\u0249\1\u024a\6\u0249\1\366" + - "\47\u0249\1\366\14\u0249\3\366\1\u0249\1\366\3\u0249\1\0" + - "\7\u0249\1\u042d\6\u0249\4\u042d\1\u0249\1\371\5\u0249\2\u042d" + - "\7\u0249\3\u042d\11\u0249\2\u042d\2\u0249\1\u042d\3\u0249\1\u042d" + - "\4\u0249\1\u042d\6\u0249\1\u042d\3\u0249\1\u042d\10\u0249\3\u042d" + - "\1\u0249\2\u042d\2\u024e\1\0\22\u024e\1\u042e\1\u024e\1\u042f" + - "\100\u024e\2\123\1\0\22\123\1\372\1\123\1\u0430\100\123" + - "\2\u024e\1\0\7\u024e\1\u0431\6\u024e\4\u0431\1\u042e\1\u024e" + - "\1\u042f\4\u024e\2\u0431\7\u024e\3\u0431\11\u024e\2\u0431\2\u024e" + - "\1\u0431\3\u024e\1\u0431\4\u024e\1\u0431\6\u024e\1\u0431\3\u024e" + - "\1\u0431\10\u024e\3\u0431\1\u024e\2\u0431\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u010e\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0432\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0433\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0434\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0435\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u011d" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0436" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u011d\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0437\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0438\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0439\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u043a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u043b\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0253\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u043c\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u043d" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u011d\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u011d\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0141\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u01c8\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u043e\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u043f\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0440\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u043a\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u010b\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0441" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u043c\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u026e\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u0442\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0280\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0256\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u043a\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0443\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u031a" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0444" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0445\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0446\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0447\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0448\24\115\1\u043f\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0441\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0449" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u044a\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u044b\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\26\115\1\u044c\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u044d\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u044e\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u044f\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0450\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u011d\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0262\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0451" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u011d\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0452\27\115\1\u0453\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\46\115\1\u0454\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0455\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0456\21\115\1\u0457\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0458\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u0459\1\115" + - "\1\u045a\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0457\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u045b\4\115\1\0\1\106\1\u045c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0331\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0341\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u045d\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u045e\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u02dc" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u045f\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0460\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0461\1\u0462\24\115\1\u0463\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0464\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0465" + - "\1\115\1\u0466\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0341\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0467\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0468\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0469\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u046a\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u046b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u046c" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u046d\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u01c8" + - "\3\115\1\u02b4\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\41\115\1\u046e\5\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u046f\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0470\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u02f3\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0471\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0472\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0473\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0474" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0475\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0433\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u0476\1\u01c8\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0477\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0478\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0479\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u01c8" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u047a\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u047b\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u02b4\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u047c\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u047d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u047e\26\115\1\u0102\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u02fc\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u047f\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u01c8\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u036b\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0480\1\115\1\0\1\106\1\u0481\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0482\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0136\1\u0483\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0484\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0485\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0474" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0486" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0487\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0488\1\u0489\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u048a\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u048b\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u048c\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u048d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u02f3\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u048e\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u048f\33\115" + - "\1\u028d\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0490\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0491\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0492\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0264\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u02f3\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0493\10\115" + - "\1\u0494\5\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0495\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0496\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u02e7\24\115\1\u0497\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u02f0\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0498\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\1\115\1\u0499\3\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u049a" + - "\17\115\1\106\10\0\3\115\1\u049b\2\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\16\115\1\u049c\30\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u01b7\25\115\1\u049d\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\10\115\1\u049e\36\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\4\115\1\u049f\11\0\47\115" + - "\1\106\10\0\3\115\1\u04a0\2\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u04a1" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u04a2\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u04a3\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u04a4\1\u02f3\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u04a5\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u04a6\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u04a7\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u01c8\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u04a8\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\40\115\1\u04a9" + - "\6\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u02e1\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u04aa\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u02fc\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u04ab\2\115\1\u02dc\22\115\1\u0474\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0341" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u02dc" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u04ac\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u04ad\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u02f6\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u04ae\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0258\26\115\1\u01c8\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u04af" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u04b0" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u04b1\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u04b2\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0388\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u04b3\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u03ff\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u04b4\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u04b5\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u01c8\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u04b6\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u04b7" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u02b4\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u04b8\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u04b9\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u04ba\1\115\11\0\3\115\1\u04bb\1\115\1\u04bc" + - "\22\115\1\u04bd\1\u04be\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u04bf\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u04c0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u04c1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u04c2\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u04c3" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u04c4\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u04c5\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u04c6\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u011d\3\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u04c7\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u04c8\24\115\1\u028d" + - "\5\115\1\u04c9\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u04ca\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u04cb\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u04cc\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u04cd\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u04ce" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u03ff" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u04cf" + - "\4\115\1\u04d0\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u04d1\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u02ab\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0264\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u02ab\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u04d2\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u04d3\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u04d4\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u04d5\1\115\1\0\3\115\1\u04d6\1\115" + - "\11\0\1\u04d7\1\u04d8\1\115\1\u04d9\1\u04da\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u04db" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u04dc\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u04dd" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u04de\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u04df\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u04e0\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u011d\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u04e1\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u04e2\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u04e3\24\115\1\u01c8" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u04e4\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\5\115\1\u04e5\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u04e6\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u04e7\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u04e8\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u04e9\1\115\1\u04ea\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u04eb" + - "\1\u04ec\1\u04ed\2\115\1\0\1\106\1\u04ee\1\115\1\0" + - "\3\115\1\u04ef\1\115\11\0\1\u04f0\1\115\1\u02f0\1\u04f1" + - "\1\u04f2\1\u04f3\1\u04f4\24\115\1\u010f\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u04f5\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u04f6" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\1\115\1\u04f7\4\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u04f8\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u04f9\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0487\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u04fa\1\u04fb\1\u04fc\1\u047a\1\u04fd" + - "\1\115\1\0\1\106\1\u04fe\1\115\1\0\3\115\1\u04ff" + - "\1\115\11\0\1\115\1\u0500\1\u0501\1\u0502\1\u0503\1\u0504" + - "\1\u0505\1\u0506\17\115\1\u0507\1\u0508\4\115\1\u0509\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u050a" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u011d\1\115" + - "\11\0\1\u050b\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u050c\1\115\1\u050d\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u050e\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u04e2\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u04fa\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u050f\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0510\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0139" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0511\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0512\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0513\1\u0514\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0515\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0516\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0517" + - "\1\115\1\0\5\115\11\0\5\115\1\u0518\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0519\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u051a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\5\115\1\u03ef\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\31\115" + - "\1\u051b\15\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u051c\1\115\1\0\5\115" + - "\11\0\27\115\1\u051d\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u051e\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u051f\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u01c8\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u0520\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0521\1\115\1\0\1\106\1\u0522\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0523\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0524\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u036e\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0525\1\115\1\0\5\115\11\0\5\115\1\u0526\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0527\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0528\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0529\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u052a\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\45\115\1\u052b\1\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0341\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u052c\1\115\1\0\5\115\11\0\2\115\1\u052d" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u052e\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u052f\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0530\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0531\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0532\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0533\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0534" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u039a" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0535\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0536\1\115\1\u0537\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0538\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u01c8\22\115\1\u03ff" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u04fa\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0539\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u053a\1\u053b\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u053c\27\115\1\u053d" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u01c8\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u04c4\26\115\1\u053e\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u053f\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0540\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0541\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u01c8\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0542\32\115" + - "\1\u010f\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0543\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u01c8\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0544\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0445\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0545\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0546" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0547\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u01c8\3\115\1\0\1\106\1\u0548\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0549\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u054a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u054b\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u054c\1\u054d\1\115\1\u054e" + - "\1\u054f\1\115\1\0\1\106\2\115\1\0\3\115\1\u0550" + - "\1\115\11\0\1\u036c\1\u0551\1\u0552\1\u0553\1\u0554\1\u0555" + - "\21\115\1\u0556\1\u0557\1\u0558\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u02ae\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\36\115\1\u0559\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u04fa\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u055a" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u055b\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u031a\1\u055c\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u055d\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u04fa\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u030e\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0474\21\115\1\u0341" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u055e\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u055f\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u0372\25\115\1\u0264\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u04b4\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0560\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0561\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0562\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0563\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0564\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0565\25\115\1\u0566\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0567" + - "\24\115\1\u0568\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0569\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u056a\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u056b\1\115\11\0\6\115\1\u056c\24\115\1\u056d" + - "\1\u056e\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u056f\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0449\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u044a\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0570\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u0571" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u02e6\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0572\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0573\2\115\1\u0574\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u03cd\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0575\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0576" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0577\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u01c8\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0578\1\115\1\0\5\115" + - "\11\0\4\115\1\u0579\1\u057a\25\115\1\u057b\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u057c\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u057d\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u057e" + - "\1\u057f\1\u0580\1\u0581\2\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0582\1\115\11\0\1\u0583\1\u0584\1\u0585\1\u0586" + - "\1\u0587\1\u0588\1\u0589\1\u058a\17\115\1\u058b\1\u058c\2\115" + - "\1\u057b\1\u058d\1\u058e\2\115\1\u058f\6\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0590\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0591\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0592\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0593\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0594\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u02ae\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0369\2\115\1\0\1\106" + - "\1\u0595\1\115\1\0\3\115\1\u0596\1\115\11\0\1\115" + - "\1\u0597\1\115\1\u0598\1\u0599\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u059a\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u059b\1\u059c\1\115" + - "\1\u059d\2\115\1\0\1\106\2\115\1\0\3\115\1\u059e" + - "\1\115\11\0\1\u059f\1\u05a0\1\115\1\u05a1\1\u05a2\1\u05a3" + - "\1\u05a4\20\115\1\u05a5\1\u05a6\1\u05a7\2\115\1\u05a8\1\u05a9" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u05aa\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0341\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u05ab\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u05ac\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u05ad\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u05ae\3\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u0156\1\115\11\0\1\u05af\1\115" + - "\1\u05b0\1\u05b1\1\u05b2\1\u05b3\26\115\1\u05b4\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u05b5\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u05b6\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u05b7\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u05b8\1\115\1\u05b9\1\u05ba\1\115\1\0\1\106\1\u05bb" + - "\1\115\1\0\3\115\1\u05bc\1\115\11\0\1\u05bd\1\115" + - "\1\u05be\1\u05bf\1\u05c0\1\u05c1\1\u05c2\21\115\1\u05c3\1\u05c4" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u05c5\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u05c6\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u05c7\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u05c8\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u05c9\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u05ca\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u05cb\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u05cc\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u05cd\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u05ce\1\115\1\u05cf\2\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u05d0\1\115\11\0\1\u05d1\3\115\1\u015a\1\u0588" + - "\21\115\1\u02cd\1\u05d2\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u05d3\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u044e\3\115\1\u05d4\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u05d5\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u05d6\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u05d7" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0546\2\115\1\u01f6\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u05d8\4\115\1\u05d9\17\115" + - "\1\u05da\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\41\115\1\u05db\5\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u05dc\1\u05dd\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u04e9\25\115\1\u05de\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0149\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u02f8" + - "\24\115\1\u05df\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u05e0\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u05e1\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u05e2\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u05e3\1\115\1\u04fc\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u05e4\1\115\1\0\5\115\11\0\36\115\1\u05e5" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u05e6\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u05e7\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u05e8\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u05e9\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0369\2\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u028e\1\115\11\0\1\u05ea" + - "\1\u01b7\2\115\1\u02e3\25\115\1\u05eb\1\115\1\u05ec\1\u05ed" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02ed\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u05ee\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u05ef\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u05f0\1\115" + - "\1\0\5\115\11\0\5\115\1\u05f1\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u05f2\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u05f3\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u05f4\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u05f5\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u05f6\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u05f7\1\u05f8\1\u05f9\1\u05fa\1\u05fb\1\115" + - "\1\0\1\106\1\u05fc\1\115\1\0\3\115\1\u05fd\1\115" + - "\11\0\1\u05fe\1\u05ff\1\u0600\1\u0601\1\u0602\1\u0603\1\u0604" + - "\1\u0605\17\115\1\u0606\1\u0607\1\u0608\1\115\1\u057b\1\u0609" + - "\1\u060a\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u060b\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u057a\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u060c\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u060d" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u04b4\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u04ef\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0498" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u060e\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u01b7\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u060f\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0169\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u02e4\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0610\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0611\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u02ee\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0610\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0612\36\115\1\u0613\7\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0614\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0615\30\115\1\u0616\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0617\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0618\1\115\1\u0619" + - "\1\u061a\1\u061b\1\u061c\1\u061d\1\u061e\17\115\1\u061f\1\u0620" + - "\3\115\1\u0621\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0622\5\115\1\u0623\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0624\22\115\1\u0625" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0626\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u01c8\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u01c8\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0627\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0628\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0629\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u062a\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u062b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u062c\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u062d\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u062e\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u062f\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0630\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0631\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0632\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0633\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0634\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u02b5\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0635\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0636" + - "\3\115\1\0\1\106\1\u0637\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0638\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0639\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u063a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u063b\4\115\1\0\1\106" + - "\1\u063c\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u063d\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u063e" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u063f\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u035b\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0640\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0641\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0642\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0643\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0644\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u01c8\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0645\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0646" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0647\17\115\67\0\1\u0648\51\0\6\235\1\0\5\235" + - "\3\0\6\235\5\0\5\235\11\0\5\235\1\u0649\41\235" + - "\2\44\1\0\1\44\1\0\2\44\2\0\4\44\1\u021f" + - "\1\44\1\0\6\44\2\0\37\44\1\u021f\42\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\51\44\1\u020a\5\44\1\u020a\22\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\3\44\1\264" + - "\37\44\1\264\36\44\1\0\1\44\1\0\2\44\2\0" + - "\3\44\1\u0413\2\44\1\0\6\44\2\0\36\44\1\u0413" + - "\43\44\1\0\1\44\1\0\2\44\2\0\1\44\1\u021f" + - "\4\44\1\0\6\44\2\0\35\44\1\u021f\44\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\u020a\4\44\1\0" + - "\6\44\2\0\35\44\1\u020a\44\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\32\44\1\u064a" + - "\6\44\1\u064a\40\44\1\0\1\44\1\0\2\44\2\0" + - "\2\44\1\u064b\3\44\1\0\6\44\2\0\1\44\1\u064b" + - "\100\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\17\44\1\u064c\11\44\1\u064c\1\u0419\6\44" + - "\1\u0419\40\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\46\44\1\u064d\12\44\1\u064d\20\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\45\44\1\u020a\20\44\1\u020a\13\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\3\44" + - "\1\u064e\37\44\1\u064e\36\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\32\44\1\u064f\6\44" + - "\1\u064f\40\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\42\44\1\337\15\44\1\337\21\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\51\44\1\u0650\5\44\1\u0650\22\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\15\44" + - "\2\u0651\63\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\1\u0419\46\44\1\u0419\32\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\32\44\1\u0652\6\44\1\u0652\40\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\3\44\1\342" + - "\37\44\1\342\36\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\17\44\1\u0653\11\44\1\u0653" + - "\50\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\46\44\1\u0654\12\44\1\u0654\20\44\1\0" + - "\1\44\1\0\2\44\2\0\2\44\1\u020a\3\44\1\0" + - "\6\44\2\0\1\44\1\u020a\100\44\1\0\1\44\1\0" + - "\2\44\2\0\5\44\1\u0655\1\0\6\44\2\0\2\44" + - "\1\u0655\77\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\3\44\1\u0656\37\44\1\u0656\36\44" + - "\1\0\1\44\1\0\2\44\2\0\1\44\1\257\4\44" + - "\1\0\6\44\2\0\35\44\1\257\44\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\17\44" + - "\1\u021f\11\44\1\u021f\50\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\17\44\1\u0657\11\44" + - "\1\u0657\50\44\1\0\1\44\1\0\2\44\2\0\3\44" + - "\1\u0658\2\44\1\0\6\44\2\0\36\44\1\u0658\43\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\1\u0659\46\44\1\u0659\32\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\42\44\1\264" + - "\15\44\1\264\21\44\1\0\1\44\1\0\2\44\2\0" + - "\3\44\1\u065a\2\44\1\0\6\44\2\0\36\44\1\u065a" + - "\43\44\1\0\1\44\1\0\2\44\2\0\5\44\1\u065b" + - "\1\0\6\44\2\0\2\44\1\u065b\11\44\1\u065c\16\44" + - "\1\u065c\14\44\1\u065d\14\44\1\u065d\14\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\17\44" + - "\1\337\11\44\1\337\46\44\13\0\1\u065e\15\0\1\u065e" + - "\76\0\1\106\10\0\1\106\1\u065f\4\106\1\0\1\106" + - "\4\u065f\1\106\2\0\4\106\2\u065f\1\0\3\106\1\0" + - "\2\106\3\u065f\11\0\2\u065f\2\106\1\u065f\3\106\1\u065f" + - "\4\106\1\u065f\6\106\1\u065f\3\106\1\u065f\10\106\3\u065f" + - "\1\106\2\u065f\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0660\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\2\u0249\1\0\7\u0249\1\u0661\6\u0249" + - "\4\u0661\1\u0249\1\371\5\u0249\2\u0661\7\u0249\3\u0661\11\u0249" + - "\2\u0661\2\u0249\1\u0661\3\u0249\1\u0661\4\u0249\1\u0661\6\u0249" + - "\1\u0661\3\u0249\1\u0661\10\u0249\3\u0661\1\u0249\2\u0661\2\u024e" + - "\1\0\22\u024e\1\u042e\104\u024e\1\0\7\u024e\1\u0662\6\u024e" + - "\4\u0662\1\u042e\1\u024e\1\u042f\4\u024e\2\u0662\7\u024e\3\u0662" + - "\11\u024e\2\u0662\2\u024e\1\u0662\3\u024e\1\u0662\4\u024e\1\u0662" + - "\6\u024e\1\u0662\3\u024e\1\u0662\10\u024e\3\u0662\1\u024e\2\u0662" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0663\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0664\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u0665\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u04bc\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0262\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\26\115\1\u011d\20\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0666\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0667\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u043a" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0668" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0669\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u031a\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u066a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u066b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u066c\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u066d\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u066e" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u066f" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u02f1\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\12\115\1\u01c8\34\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0670\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u044f\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0671\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0672\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0673\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u0674\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0675\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0262\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u025c\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0127\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u060f\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u060f\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0284\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0676\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0677\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u02dc\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u032a\1\u011d\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0678" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u02f3" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0679\1\115\1\0\5\115\11\0" + - "\2\115\1\u03ab\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u067a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u05cd\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u067b\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u01c8\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u067c\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u067d\1\115\1\0\5\115\11\0\6\115" + - "\1\u067e\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u03ff\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u067f\1\115\1\0" + - "\3\115\1\u036b\1\115\11\0\2\115\1\u0680\25\115\1\u02a5" + - "\3\115\1\u0681\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0682\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0683\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0684\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0685\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0686\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0687\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0688\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u0689\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u068a\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u068b\1\115\1\u03ab\1\115\1\u015a\22\115" + - "\1\u02cd\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u068c\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u012c\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u068d\31\115\1\u068e\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0511" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u028a\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u068f\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u01c8\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u03d0\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0690\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0691\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0692\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0341\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0630\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0693\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0694\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0695\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0696\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0697\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0698\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0699\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u069a\1\115" + - "\1\0\3\115\1\u069b\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u069c\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u069d\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u069e" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u069f\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u06a0\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u06a1\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u03a3\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u06a2" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0369\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u06a3\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u047a" + - "\2\115\1\0\1\106\1\u06a4\1\115\1\0\5\115\11\0" + - "\42\115\1\u06a5\4\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u01c8\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02ae\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u04fa\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u06a6\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u01c8\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u06a7\3\115\1\0\1\106\1\u06a8\1\115\1\0\5\115" + - "\11\0\1\u06a9\3\115\1\u06aa\1\115\1\u06ab\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u05d9\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u02f3" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u06ac\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u06ad\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u06ae\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\10\115\1\u06af\36\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u06b0\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\1\115\1\u06b1\3\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\12\115\1\u06b2\34\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u06b3\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\14\115" + - "\1\u06b4\32\115\1\106\10\0\5\115\1\u06b5\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\2\115\1\u06b6\3\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u06b7\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u06b8\3\115\1\0\1\106" + - "\1\u06b9\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u06ba\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u045c\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u06bb\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0475\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u06bc\1\115\1\u06bd\2\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u06be\1\115\11\0\1\u06bf\1\u06c0\1\u06c1" + - "\1\u06c2\1\u06c3\1\115\1\u06c4\21\115\1\u05d2\3\115\1\u06c5" + - "\1\u06c6\2\115\1\u06c7\6\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u02b2\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u06c8\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u06c9\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u06ca" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0169\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u06cb\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u06cc\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u06cd\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u04fc\3\115\1\0\1\106" + - "\1\u06ce\1\115\1\0\5\115\11\0\1\115\1\u04ef\1\115" + - "\1\u06cf\1\u04ef\1\u06d0\1\u06d1\20\115\1\u06d2\4\115\1\u0609" + - "\1\u04ef\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u01c8\1\u06d3\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u06d4\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u026e\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u02b4\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u06d5\1\u06d6" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u06d7\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u06d8\1\115\1\0\5\115" + - "\11\0\5\115\1\u06d9\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u06da\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u06db\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u06dc\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u0116\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u011d\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u06dd" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u0127\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u06de\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u06df\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u04bc\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u06e0\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u011d\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u05da\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u06e1" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u04b4" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u06e2\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u06e3" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\5\115\1\u01c8\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u06e4\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u06e5\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u06e6\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u06e7\1\115" + - "\1\0\5\115\11\0\1\u06e8\4\115\1\u06e9\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u01c8\31\115" + - "\1\u01c8\5\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u06ea\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u06eb\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u06ec\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u06ed\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u06ee\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u06ef" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u06f0" + - "\2\115\1\u06f1\1\u06f2\23\115\1\u06f3\3\115\1\u06f4\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u059c\1\115\1\u06f5\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u06f6\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u01b7\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u06f7\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u06f8\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u06f9" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u06fa\4\115\1\u0263\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u06fb\23\115\1\u06fc\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u06fd\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u06fe" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u06ff" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0700\1\115\1\0\5\115\11\0" + - "\5\115\1\u0701\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u0702\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\41\115\1\u0703\5\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0704\26\115\1\u030e\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0705" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0706\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\2\115\1\u01c8\2\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u01c8\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0707\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u06ae\22\115\1\u0708\1\u02ce\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0709\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u070a\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u070b\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0492\3\115\1\u070c\1\u070d\1\u070e\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u01c8" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u070f\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0710\2\115\1\u0711\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0712\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0713\1\115" + - "\1\u06d8\1\u0495\22\115\1\u0714\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u03ea\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0715\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0474" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u03ff\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0716\1\115\1\u0717\3\115\1\u0474\17\115\1\u01b7" + - "\5\115\1\u04fa\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0718\2\115\1\u0719\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u03ea\1\115" + - "\1\u071a\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u071b\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u071c\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0119\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u071d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u071e\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u01c8\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u071f\3\115\1\u0720" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u0141\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0721\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0722\25\115\1\u0723\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0724\1\u0725" + - "\2\115\1\0\1\106\2\115\1\0\3\115\1\u0726\1\115" + - "\11\0\1\u0727\1\u0728\1\u0729\1\115\1\u072a\1\u072b\21\115" + - "\1\u034b\5\115\1\u072c\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u072d\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u072e\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u072f" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u06f8\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0730\4\115\1\u0731\21\115\1\u0732\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0733\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0734\24\115" + - "\1\u0735\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0736\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0737\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0738\4\115\1\u0341\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u0739\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u073a\4\115\1\u073b\21\115" + - "\1\u073c\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u073d\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u073e\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u073f\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0740\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0741\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0742\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0743" + - "\32\115\1\u0479\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0744\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0479\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0745\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0746\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0747\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0748\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0169\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0749" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u074a\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u074b\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u02ae\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u074c\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u074d" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u074e\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u074f\4\115" + - "\1\u0750\21\115\1\u0751\3\115\1\u0752\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0753\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u0745\3\115" + - "\1\u0745\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u05d9\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0754\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0755\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0756\1\u0757\1\u0758\2\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0759\1\115\11\0\1\u075a" + - "\1\u075b\1\u075c\1\u075d\1\u075e\1\115\1\u075f\20\115\1\u0760" + - "\1\u0761\2\115\1\u0762\1\u0763\1\u0764\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0765\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u038b\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0766" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0767\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u072e" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0768\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0769\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u076a\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\41\115\1\u01c8\5\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u076b\3\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u076c\1\115\11\0\5\115\1\u057a" + - "\22\115\1\u076d\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u076e\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u076f\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0770\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0771\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0772\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0773\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0774\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0775\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u0776\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0777" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u0778\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0779\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u077a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u072e\4\115\1\u066d\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u077b\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u077c\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u077d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0341\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u077e" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u077f\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0780\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0781\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0782\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0783" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0784\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0785\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0786\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0787\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0788" + - "\1\115\1\u0479\30\115\1\u0789\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u078a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u078b\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\36\115\1\u0341\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u078c\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u078d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u078e" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u03ff\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u078f\24\115\1\u0790\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0791\2\115\1\u0792\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u055a" + - "\21\115\1\u0793\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0794\1\115\1\u06f9\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0795\22\115\1\u0796" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0797\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0798\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u0799\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0474\21\115\1\u079a\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u079b" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u079c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u02dc\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u079d\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u079e\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0785\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u079f\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u07a0\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u07a1\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u07a2\5\115\1\u07a3" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0793\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u07a4\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u07a5\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u07a6\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u07a7\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0670\26\115\1\u06e3\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u07a8\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0492" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u07a9" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u07aa\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u07ab\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u07ac\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u07ad\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u07ae\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u07af" + - "\1\115\1\0\5\115\11\0\1\u07b0\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u07b1\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u07b2\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u07b3\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u07b4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u07b5\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u07b6\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u07b7\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u02ac\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u07b8\1\u07b9\1\u07ba\1\u07bb" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u07bc\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u07bd\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u07be\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u07bf\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u07c0\1\u07c1\1\u07c2\1\u07c3" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u07c4\1\115" + - "\11\0\1\u07c5\1\u07c6\1\u07c7\1\u07c8\1\u07c9\1\u07ca\1\u07cb" + - "\20\115\1\u07cc\1\u05d2\3\115\1\u07cd\1\u07ce\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u07cf" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u07d0\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u07d1\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u07d2\1\u035b\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u07d3\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u07d4\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u07d5\4\115\1\u07d6\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u07d7\1\115\1\u07d8\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u07d9\32\115\1\u0594\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u07da\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u07db" + - "\25\115\1\u07dc\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u07dd\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u07de\1\u07df\24\115\1\u07e0\5\115\1\u07e1" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u07e2\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u07e3\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u07e4\2\115\1\u07e5\1\u0793\21\115\1\u028d" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u05cd\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0489\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u02ac\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u07e6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u07e7\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u07e8\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u07e9\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u07ea" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u07eb" + - "\1\115\1\0\5\115\11\0\1\u07ec\2\115\1\u07ed\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u07ee\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u07ef\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u06a9\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u07f0" + - "\2\115\1\u07f1\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u07f2\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u07f3\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u07f4\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u07f5\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u07f6\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u07f7" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u07f8\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u07f9\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u07fa\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u07fb\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u07fc\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u02e3\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u07fd\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7\3\115" + - "\1\u01c8\1\u07fe\17\115\1\u07ff\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0800\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u01a2\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u07e5" + - "\1\u0801\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0802\3\115\1\u0803\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0804\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0805\26\115\1\u0806\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0362\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0807\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0808" + - "\25\115\1\u0809\3\115\1\u01c8\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u080a\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u05d1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u080b\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u080c\1\115" + - "\1\u080d\1\u080e\1\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u080f\1\115\11\0\1\u0810\1\115\1\u0811\1\115\1\u0812" + - "\1\115\1\u0813\20\115\1\u02cd\1\u0362\3\115\1\u0814\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0815" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0816\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0817\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0818\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0819\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u081a\30\115\1\u081b\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u081c\36\115" + - "\1\u081d\7\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u081e\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u081f\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0194\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0820\26\115\1\u0821\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0822\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0823\1\115\1\u0824" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0825\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0826\1\115\1\u0827\1\u0828\1\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0829\1\115\11\0\1\u05bd" + - "\1\115\1\u082a\1\u082b\1\u082c\1\u082d\1\u082e\21\115\1\u082f" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0830\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0831\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0832\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0833\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0834\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0835" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0836" + - "\1\u0837\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0838\1\u0839\24\115\1\u083a\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u083b\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u083c\1\u0824" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u083d" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u083e\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u083f\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0524\1\u0840\24\115\1\u02a5\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0841\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0842" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0843\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0844\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0845\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0846\1\115\1\u0847\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0848\27\115\1\u0849" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0341\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u084a\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u084b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u04a8\4\115\1\u084c\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\36\115\1\u084d\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u07e6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u084e\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u084f\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0850\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0851\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0852\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0853\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u07aa\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0341\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0495\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0854" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0855" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0856\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0857\1\115\1\0\3\115\1\u0858\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02ca\1\u0859\3\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u085a\1\115\11\0\3\115\1\u085b\1\u015a\22\115\1\u02cd" + - "\1\115\1\u015e\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u085c\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u085d\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u085e\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u085f\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0860\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0861\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u0862\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0863\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0864" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0865\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0866\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0867\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0868\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0869\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u086a\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u086b\27\115\1\u086c\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u086d" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u06d5" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u086e\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u010f\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u086f\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0870\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0871\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0872\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0873\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u054b\4\115\1\u0874" + - "\24\115\1\u0141\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0875\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0721\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0876\1\115\1\u0877\1\u0878" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0879" + - "\1\u087a\1\u087b\1\u087c\1\u087d\1\u087e\1\u087f\1\u0880\17\115" + - "\1\u0881\1\u0882\4\115\1\u0883\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0884\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0885\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0492" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0886\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0887\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0888\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0889\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u088a\1\115\1\u088b" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u088c" + - "\4\115\1\u088d\1\115\1\u088e\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u06a9\1\u03ea\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u088f" + - "\21\115\1\u02f3\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0890\1\u0891\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0892\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0893" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0894" + - "\1\u0895\25\115\1\u0896\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0738\26\115\1\u0897\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0341\22\115\1\u0898" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u073a" + - "\1\u04b4\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0899\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u089a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u03ea"; + private static final String ZZ_TRANS_PACKED_0 = + "\1\40\1\41\1\42\1\43\1\44\1\45\133\40\2\46"+ + "\1\47\26\46\1\50\31\46\1\51\7\46\1\52\1\46"+ + "\1\53\43\46\2\54\1\55\14\54\1\56\121\54\1\57"+ + "\1\60\1\0\1\61\1\44\2\57\1\62\1\63\6\57"+ + "\1\64\26\57\1\65\47\57\1\66\22\57\2\67\1\0"+ + "\1\67\1\70\2\67\2\70\1\71\1\72\1\73\1\74"+ + "\1\75\1\76\1\70\1\67\1\77\1\100\3\67\1\101"+ + "\3\67\1\102\6\67\1\103\4\67\1\70\7\67\1\74"+ + "\1\104\1\76\1\73\1\100\1\105\1\106\1\77\1\71"+ + "\1\101\1\72\1\67\1\107\1\110\1\111\1\67\1\112"+ + "\1\103\1\75\1\67\1\113\1\67\1\114\1\67\1\102"+ + "\1\105\1\106\1\107\4\67\1\70\1\111\1\104\1\67"+ + "\1\112\1\114\1\113\1\110\13\67\3\115\1\116\3\115"+ + "\1\117\131\115\3\120\1\116\112\120\1\117\22\120\1\57"+ + "\1\60\1\0\1\61\1\44\2\57\1\121\1\122\6\57"+ + "\1\123\26\57\1\65\47\57\1\124\22\57\3\115\1\116"+ + "\3\115\1\125\131\115\3\120\1\116\112\120\1\125\22\120"+ + "\1\57\1\60\1\0\1\61\1\44\2\57\1\126\1\122"+ + "\6\57\1\127\26\57\1\65\47\57\1\130\22\57\3\115"+ + "\1\116\3\115\1\131\131\115\3\120\1\116\112\120\1\131"+ + "\22\120\1\132\1\44\1\133\1\134\1\44\1\135\1\136"+ + "\1\137\1\140\3\141\1\142\2\141\1\143\4\141\1\144"+ + "\1\145\1\141\1\144\1\141\1\146\1\147\1\150\2\132"+ + "\1\141\1\151\2\141\1\152\1\153\1\154\1\136\4\151"+ + "\3\65\1\155\1\156\1\141\1\157\1\160\1\161\1\162"+ + "\1\163\1\164\1\165\1\166\1\167\1\170\1\171\2\141"+ + "\1\172\1\141\1\173\1\174\1\141\1\175\2\141\1\154"+ + "\3\141\1\176\1\132\3\154\1\177\7\141\1\144\2\141"+ + "\1\200\3\144\1\141\3\144\2\201\1\202\1\203\31\201"+ + "\1\204\60\201\1\205\22\201\2\206\1\207\1\210\3\206"+ + "\1\211\25\206\1\212\103\206\2\213\1\214\1\215\33\213"+ + "\1\216\23\213\1\217\7\213\1\220\1\213\1\221\43\213"+ + "\2\222\1\223\1\224\33\222\1\225\23\222\1\226\7\222"+ + "\1\227\1\222\1\230\7\222\1\231\4\222\1\232\26\222"+ + "\2\233\1\234\1\235\57\233\1\236\7\233\1\237\1\233"+ + "\1\240\43\233\1\132\1\44\1\241\1\242\1\44\1\135"+ + "\1\136\1\243\1\244\5\141\1\245\1\143\4\141\1\144"+ + "\1\145\1\141\1\144\1\246\1\146\1\247\1\136\1\250"+ + "\1\132\1\251\1\151\2\141\1\152\1\153\1\154\1\136"+ + "\4\151\1\252\2\65\1\253\1\254\1\255\1\256\1\257"+ + "\1\260\1\261\1\262\1\263\1\264\1\265\1\266\1\267"+ + "\1\270\1\271\1\272\1\273\1\274\1\275\1\276\1\277"+ + "\1\300\1\301\1\302\1\154\1\141\1\303\1\141\1\304"+ + "\1\305\3\154\1\306\7\141\1\144\1\141\1\307\1\136"+ + "\3\144\1\310\3\144\2\311\1\312\34\311\1\313\23\311"+ + "\1\217\7\311\1\220\1\311\1\221\43\311\2\314\1\315"+ + "\4\314\1\316\25\314\1\317\1\320\102\314\2\321\1\322"+ + "\32\321\1\323\60\321\1\324\22\321\1\325\1\44\1\326"+ + "\1\327\1\44\1\325\1\154\1\330\1\331\6\332\1\65"+ + "\4\332\2\325\1\332\1\325\3\332\1\325\1\333\1\325"+ + "\1\65\3\332\1\65\1\332\1\325\1\136\2\65\3\325"+ + "\1\334\2\65\27\332\1\335\4\332\1\336\3\154\1\337"+ + "\7\332\1\325\2\332\4\325\1\332\3\325\1\340\1\44"+ + "\1\341\1\342\1\44\3\340\1\343\6\344\1\340\4\344"+ + "\2\340\1\344\1\340\3\344\4\340\1\345\2\344\2\340"+ + "\1\346\6\340\1\347\2\340\27\344\1\340\4\344\5\340"+ + "\7\344\1\340\2\344\4\340\1\344\3\340\1\350\1\44"+ + "\1\351\1\352\1\44\1\350\1\353\1\330\1\354\6\355"+ + "\1\350\4\355\2\356\1\355\1\356\1\355\1\357\1\355"+ + "\1\350\1\360\1\355\2\350\2\355\1\350\1\136\1\346"+ + "\1\136\3\350\1\361\4\350\27\355\1\350\4\355\1\350"+ + "\1\362\1\363\1\350\1\337\7\355\1\356\2\355\1\350"+ + "\3\356\1\355\3\356\2\206\1\364\1\203\3\206\1\365"+ + "\25\206\1\317\103\206\2\201\1\366\1\203\31\201\1\317"+ + "\60\201\1\367\22\201\2\213\1\370\1\203\33\213\1\371"+ + "\23\213\1\217\7\213\1\220\1\213\1\221\43\213\2\372"+ + "\1\373\32\372\1\374\1\375\72\372\1\376\7\372\2\377"+ + "\1\u0100\33\377\1\u0101\5\377\1\u0102\74\377\2\40\4\0"+ + "\134\40\1\41\2\0\1\44\1\0\133\40\151\0\1\u0103"+ + "\1\u0104\5\u0105\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105"+ + "\7\0\1\u0106\1\u0107\3\0\10\u0105\1\u0104\16\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\1\0\1\44\2\0"+ + "\1\44\134\0\4\45\1\0\1\45\1\u0108\132\45\2\46"+ + "\1\0\26\46\1\0\31\46\1\0\7\46\1\0\1\46"+ + "\1\0\43\46\31\0\1\u0109\165\0\1\u010a\1\0\1\u010b"+ + "\140\0\1\u010c\155\0\1\u010d\43\0\2\54\1\0\14\54"+ + "\1\0\121\54\2\57\1\0\1\57\1\0\2\57\2\0"+ + "\6\57\1\0\26\57\1\0\47\57\1\0\23\57\1\60"+ + "\1\0\1\57\1\44\2\57\2\0\6\57\1\0\26\57"+ + "\1\0\47\57\1\0\24\57\1\0\1\57\1\0\2\57"+ + "\2\0\6\57\1\0\26\57\1\0\3\57\1\u010e\43\57"+ + "\1\0\22\57\17\0\1\64\121\0\2\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\47\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\1\67"+ + "\1\u010f\2\67\1\u0110\1\u0111\1\0\2\67\1\u0112\7\67"+ + "\1\u0113\13\67\1\0\10\67\1\u0114\1\u0111\1\67\1\u0112"+ + "\1\67\1\u0115\3\67\1\u010f\3\67\1\u0116\3\67\1\u0110"+ + "\5\67\1\u0113\1\67\1\u0115\5\67\1\0\1\u0116\1\u0114"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0117"+ + "\2\67\1\0\2\67\1\u0118\23\67\1\0\7\67\1\u0117"+ + "\3\67\1\u0118\1\67\1\u0119\7\67\1\u011a\13\67\1\u0119"+ + "\5\67\1\0\1\u011a\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u011b\13\67\1\0\37\67"+ + "\1\u011b\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\u011c\5\67\1\0\1\67\1\u011d\24\67\1\0"+ + "\10\67\1\u011e\3\67\1\u011f\1\67\1\u011d\1\u011c\3\67"+ + "\1\u0120\14\67\1\u011f\1\67\1\u0120\4\67\1\0\1\67"+ + "\1\u011e\22\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\u0121\3\67\1\0\1\67\1\u0122\24\67\1\0\12\67"+ + "\1\u0121\2\67\1\u0123\1\u0122\22\67\1\u0123\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\114"+ + "\1\u0124\1\67\1\114\1\0\2\67\1\u0125\3\67\1\u0126"+ + "\12\67\1\114\4\67\1\0\7\67\1\u0124\1\67\2\114"+ + "\1\u0125\1\u0127\1\u0128\2\67\1\u0126\3\67\1\u0129\3\67"+ + "\1\114\7\67\1\u0127\1\u0128\5\67\1\0\6\67\1\u0129"+ + "\15\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u012a"+ + "\2\67\1\0\2\67\1\u012b\23\67\1\0\7\67\1\u012a"+ + "\3\67\1\u012b\1\67\1\u012c\23\67\1\u012c\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u012d\22\67\1\u012e\13\67\1\0"+ + "\1\67\1\u012d\3\67\1\u012e\16\67\1\0\1\67\1\0"+ + "\2\67\2\0\2\67\1\114\1\u011e\2\67\1\0\1\67"+ + "\1\u012f\10\67\1\u0130\6\67\1\u0131\4\67\1\0\7\67"+ + "\1\u011e\2\67\1\114\2\67\1\u0132\1\u012f\3\67\1\u0133"+ + "\2\67\1\u0134\2\67\1\u0131\6\67\1\u0130\1\67\1\u0132"+ + "\5\67\1\0\1\u0134\1\67\1\u0133\21\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\1\67\1\114\24\67"+ + "\1\0\16\67\1\114\30\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\3\67\1\u0135\1\67\1\114\1\0"+ + "\1\67\1\114\1\u0136\16\67\1\114\4\67\1\0\7\67"+ + "\1\u0135\1\67\1\114\1\67\1\u0136\1\u0137\1\u0138\1\114"+ + "\11\67\1\114\7\67\1\u0137\1\u0138\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0139\7\67\1\u013a\13\67\1\0\13\67\1\u0139\1\67"+ + "\1\u013b\21\67\1\u013a\1\67\1\u013b\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\2\67\1\u013c\1\u013d"+ + "\2\67\1\0\26\67\1\0\7\67\1\u013d\2\67\1\u013c"+ + "\12\67\1\u013e\21\67\1\0\1\u013e\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u013f\1\u0140\1\u0141\1\67\1\u0142"+ + "\1\67\1\0\6\67\1\u0143\3\67\1\u0144\6\67\1\u0145"+ + "\4\67\1\0\12\67\1\u0141\4\67\1\u013f\1\u0143\1\u0140"+ + "\6\67\1\u0145\1\u0142\5\67\1\u0144\7\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0146\23\67\1\0\13\67\1\u0146\1\67\1\u0147\7\67"+ + "\1\u0148\13\67\1\u0147\5\67\1\0\1\u0148\23\67\1\0"+ + "\1\67\1\0\2\67\2\0\2\67\1\114\2\67\1\u0149"+ + "\1\0\2\67\1\u014a\23\67\1\0\11\67\1\u0149\1\114"+ + "\1\u014a\33\67\1\0\7\67\1\114\3\67\3\114\1\67"+ + "\2\114\3\67\1\0\1\67\1\0\2\67\2\0\4\67"+ + "\1\u014b\1\67\1\0\1\67\1\114\4\67\1\u014c\3\67"+ + "\1\u014d\13\67\1\0\16\67\1\114\1\67\1\u014c\10\67"+ + "\1\u014b\5\67\1\u014d\7\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\2\67\1\u014e\3\67"+ + "\1\u014f\17\67\1\0\13\67\1\u014e\4\67\1\u014f\26\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u0150\2\67\1\0\26\67\1\0\7\67\1\u0150\5\67"+ + "\1\u0151\23\67\1\u0151\5\67\1\0\22\67\3\115\1\0"+ + "\3\115\1\0\131\115\52\0\1\u0152\66\0\3\120\1\0"+ + "\112\120\1\0\22\120\17\0\1\u0153\121\0\1\132\10\0"+ + "\6\132\1\0\11\132\1\0\1\132\1\0\3\132\1\0"+ + "\2\132\14\0\27\132\1\0\5\132\4\0\12\132\1\0"+ + "\7\132\3\0\1\u0154\4\0\1\u0155\35\0\1\65\3\0"+ + "\1\u0156\73\0\1\65\40\0\1\65\72\0\10\u0157\1\u0158"+ + "\24\u0157\1\u0159\1\u0157\1\u015a\6\u0157\1\u015b\72\u0157\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u015d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\17\0\1\u015e\26\0"+ + "\1\65\72\0\1\u015f\10\0\6\u015f\1\0\1\u015f\1\u0160"+ + "\1\u0161\1\u015f\2\144\1\u015f\1\144\1\u015f\1\0\1\u015f"+ + "\1\0\3\u015f\1\0\1\u015f\1\u0162\1\0\1\u0163\12\0"+ + "\4\u015f\1\u0161\1\u0162\1\u015f\1\u0160\11\u015f\1\u0162\5\u015f"+ + "\1\0\1\u015f\1\u0162\3\u015f\4\0\7\u015f\1\144\2\u015f"+ + "\1\0\3\144\1\u015f\3\144\1\u015f\10\0\6\u015f\1\0"+ + "\1\u015f\1\u0160\1\u0161\1\u015f\1\u0164\1\u0165\1\u015f\1\u0165"+ + "\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u0166\1\u0162"+ + "\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162\1\u015f\1\u0160"+ + "\11\u015f\1\u0162\3\u015f\1\u0166\1\u015f\1\0\1\u015f\1\u0162"+ + "\3\u015f\4\0\7\u015f\1\u0165\2\u015f\1\0\3\u0165\1\u015f"+ + "\2\u0165\1\u0164\31\0\1\65\14\0\1\65\72\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0167\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\46\0"+ + "\1\65\134\0\1\65\3\0\1\65\116\0\2\u0163\1\0"+ + "\1\u0163\76\0\1\u0163\3\0\3\u0163\1\0\3\u0163\46\0"+ + "\1\65\6\0\1\65\63\0\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0168\3\141\1\u0169\2\141\1\u016a"+ + "\3\141\1\u016b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u016c\11\141\1\u016d\5\141\1\u016e\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u016f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0170\1\u0171\1\u0172"+ + "\3\141\1\u0173\7\141\1\u0174\1\u0175\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0176\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0177\5\141\1\u0178\1\u0179\6\141"+ + "\1\u017a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u017b\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u017c\11\141\1\u017d\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u017e\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u017f\12\141\1\u0180\1\141\1\u0181\3\141"+ + "\1\u0182\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0183\12\141\1\u0184\4\141\1\u0185\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0186\1\u0187\5\141\1\u0188"+ + "\1\u0189\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u018a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u018b"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u018c\1\141\1\u018d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u018e\14\141\1\u018f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0190\11\141\1\u0191\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0192\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0193\2\141\1\u0194"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u017a"+ + "\7\141\1\u0195\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0196\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\2\201\2\0\31\201\1\0\60\201\1\0"+ + "\22\201\52\0\1\u0197\66\0\2\u0198\1\0\27\u0198\1\u0199"+ + "\50\u0198\1\u019a\35\u0198\2\206\2\0\3\206\1\0\25\206"+ + "\1\0\103\206\52\0\1\u019b\66\0\2\213\2\0\33\213"+ + "\1\0\23\213\1\0\7\213\1\0\1\213\1\0\43\213"+ + "\10\0\1\u019c\140\0\1\u019d\206\0\1\u019e\1\0\1\u019f"+ + "\140\0\1\u01a0\155\0\1\u01a1\43\0\2\222\2\0\33\222"+ + "\1\0\23\222\1\0\7\222\1\0\1\222\1\0\7\222"+ + "\1\0\4\222\1\0\26\222\10\0\1\u01a2\6\u01a3\1\u01a4"+ + "\4\u01a3\2\0\1\u01a3\3\0\1\u01a3\5\0\2\u01a3\14\0"+ + "\27\u01a3\1\0\4\u01a3\5\0\7\u01a3\1\0\2\u01a3\4\0"+ + "\1\u01a3\13\0\1\u01a5\206\0\1\u01a6\1\0\1\u01a7\140\0"+ + "\1\u01a8\155\0\1\u01a9\155\0\1\u01aa\104\0\1\u01ab\1\u01ac"+ + "\1\u01ad\1\u01ae\1\u01af\1\u01b0\1\u01b1\1\u01b2\1\u01b3\1\u01b4"+ + "\1\u01b5\1\u01b6\1\u01b7\3\0\1\u01b8\1\u01b9\1\u01ba\1\0"+ + "\1\u01bb\36\0\2\233\2\0\57\233\1\0\7\233\1\0"+ + "\1\233\1\0\43\233\10\0\1\u01bc\206\0\1\u01bd\1\0"+ + "\1\u01be\140\0\1\u01bf\155\0\1\u01c0\46\0\1\u0154\42\0"+ + "\1\65\102\0\1\250\26\0\1\u01c1\6\0\1\65\72\0"+ + "\1\132\10\0\2\141\1\u01c2\3\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u01c3\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01c4\1\u01c5"+ + "\1\u01c6\2\141\1\u01c7\1\141\1\u01c8\1\141\1\u01c9\1\141"+ + "\1\u01ca\3\141\1\u01c7\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\2\250\1\0\136\250\1\132\10\0"+ + "\6\u01cb\1\0\4\u01cb\2\141\1\u01cb\1\141\1\u01cb\1\0"+ + "\1\u01cb\1\0\1\132\1\u015c\1\141\1\0\2\u01cb\14\0"+ + "\27\u01cb\1\0\4\u01cb\1\132\4\0\7\u01cb\1\141\2\u01cb"+ + "\1\0\3\141\1\u01cb\3\141\17\0\1\u01cc\121\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01cd\1\u01ce"+ + "\2\141\1\u0169\2\141\1\u01cf\1\u01d0\1\u01d1\1\u01d2\1\u01d3"+ + "\4\141\1\u01d4\1\u01d5\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u01d6\1\141\1\u01d7\1\141\1\u01d8\1\141\1\u01d9"+ + "\1\141\1\u01da\1\u01db\1\u01dc\2\141\1\u01dd\1\u01de\1\141"+ + "\1\u01df\1\u01e0\1\141\1\u01e1\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u01e2\1\u01e3\1\141\1\u01e4\1\u01e5\1\141"+ + "\1\u01e6\3\141\1\u01e7\2\141\1\u01e8\1\u01e9\4\141\1\u01ea"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u01eb"+ + "\1\u01ec\1\141\1\u01ed\1\141\1\u01ee\1\141\1\u01ef\5\141"+ + "\1\u01f0\3\141\1\u01f1\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u01f2\1\141\1\u01f3\2\141\1\u01f4\1\u01f5"+ + "\1\u01f6\1\u01f7\1\u01f8\1\141\1\u01f9\1\141\1\u01fa\5\141"+ + "\1\u01fb\1\u01fc\1\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u01fd\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u01fe\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u01ff\1\u0200\1\u0201\1\u0202\1\u0203\1\u0204\1\u0178"+ + "\1\u0205\1\u0206\1\u0207\1\u0208\1\u0209\1\u020a\1\141\1\u020b"+ + "\1\u020c\2\141\1\u020d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u020e\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u020f\1\u0210\3\141\1\u0211\1\u0212\1\u0213"+ + "\1\u0214\1\u0215\1\u0216\4\141\1\u0217\1\u0218\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0219\1\141\1\u01ec\1\141"+ + "\1\u021a\1\141\1\u021b\1\141\1\u021c\1\141\1\u021d\3\141"+ + "\1\u021e\2\141\1\u021f\5\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0220\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0221\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0222\1\141\1\u0223\1\u0224\1\u0225\1\141"+ + "\1\u0226\1\u0227\1\u0228\1\141\1\u0229\1\141\1\u022a\1\u022b"+ + "\1\u022c\1\u022d\1\u022e\1\141\1\u022f\1\u0230\2\141\1\u0231"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0232\2\141\1\u0183"+ + "\1\u0233\1\141\1\u0234\3\141\1\u0235\14\141\1\0\4\141"+ + "\1\132\4\0\11\141\1\u0236\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0237\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0238\1\u0239\1\u023a"+ + "\1\u023b\1\u023c\2\141\1\u023d\2\141\1\u023e\1\u023f\4\141"+ + "\1\u0240\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0241\1\141\1\u0242\1\u0243\2\141\1\u0244\6\141\1\u018a"+ + "\2\141\1\u0245\5\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u0246\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0247\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0248\1\141\1\u0249\1\u024a\1\u024b\2\141"+ + "\1\u024c\2\141\1\u024d\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u024e\1\141\1\u024f\1\141\1\u0250\1\141\1\u0251"+ + "\10\141\1\u0252\3\141\1\u0253\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0254\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0255\1\141\1\u0256\1\141\1\u0257"+ + "\1\141\1\u0258\1\u0259\4\141\1\u025a\1\141\1\u025b\1\u025c"+ + "\1\141\1\u025d\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u025e\11\141\1\u018f\1\u025f\2\141\1\u0260\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\4\141\1\u0261"+ + "\2\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0262"+ + "\2\141\1\u01c7\1\u0263\3\141\1\u01ef\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0264\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0265\2\141\1\u0266\1\u0267\1\141"+ + "\1\u0268\1\u0269\1\u026a\1\u026b\1\u026c\1\u024c\1\u026d\1\141"+ + "\1\u026e\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u026f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0270"+ + "\2\141\1\u0271\1\141\1\u0272\1\u0273\3\141\1\u0274\1\u0275"+ + "\1\u0276\1\u0277\1\u0278\2\141\1\u0279\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u027a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u027b\3\141\1\u027c\1\u027d\1\u027e"+ + "\1\141\1\u027d\11\141\1\u027f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0280\1\u0281\4\141\1\u0282\1\141\1\u0283"+ + "\5\141\1\u017a\3\141\1\u0284\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0285\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0286\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\2\141\1\u0287\1\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\1\u0288\3\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\u0289\1\0\4\u0289"+ + "\2\132\1\u0289\1\132\1\u0289\1\0\1\u0289\1\0\2\132"+ + "\1\u0289\1\0\2\u0289\14\0\27\u0289\1\0\4\u0289\1\132"+ + "\4\0\7\u0289\1\132\2\u0289\1\0\3\132\1\u0289\4\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u028a\3\141\1\u028b"+ + "\2\141\1\u028c\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u028d\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u028e\1\141\1\u028f\1\141\1\u0290\5\141\1\u0291"+ + "\2\141\1\u0292\1\u0293\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\2\311\1\0\34\311\1\0\23\311"+ + "\1\0\7\311\1\0\1\311\1\0\43\311\10\0\1\u0294"+ + "\130\0\2\314\1\0\4\314\1\0\25\314\2\0\102\314"+ + "\2\u0295\1\0\136\u0295\11\0\6\u0296\1\0\4\u0296\2\0"+ + "\1\u0296\1\0\1\u0296\1\0\1\u0296\5\0\2\u0296\14\0"+ + "\27\u0296\1\0\4\u0296\5\0\7\u0296\1\0\2\u0296\4\0"+ + "\1\u0296\3\0\2\321\1\0\32\321\1\0\60\321\1\0"+ + "\22\321\2\u0297\1\0\136\u0297\10\0\1\u0298\41\0\1\u0156"+ + "\125\0\1\u0299\112\0\6\332\1\0\13\332\5\0\2\332"+ + "\1\0\1\332\12\0\27\332\1\0\4\332\5\0\12\332"+ + "\1\0\7\332\11\0\6\u029a\1\0\4\u029a\2\0\1\u029a"+ + "\1\0\3\u029a\4\0\3\u029a\1\0\1\u029a\12\0\27\u029a"+ + "\1\0\4\u029a\5\0\7\u029a\1\0\2\u029a\4\0\1\u029a"+ + "\56\0\1\u029b\4\0\1\u029c\1\u029d\1\u029e\1\u029f\1\u02a0"+ + "\1\u02a1\2\0\1\u02a2\1\0\1\u02a3\1\u02a4\1\u02a5\2\0"+ + "\1\u02a6\2\0\1\u02a7\47\0\6\u02a8\1\0\4\u02a8\2\0"+ + "\1\u02a8\1\0\3\u02a8\4\0\3\u02a8\1\0\1\u02a8\12\0"+ + "\27\u02a8\1\0\4\u02a8\5\0\7\u02a8\1\0\2\u02a8\4\0"+ + "\1\u02a8\14\0\6\344\1\0\13\344\5\0\2\344\14\0"+ + "\27\344\1\0\4\344\5\0\12\344\1\0\7\344\11\0"+ + "\6\344\1\0\4\344\2\0\1\344\1\0\3\344\5\0"+ + "\2\344\14\0\27\344\1\0\4\344\5\0\7\344\1\0"+ + "\2\344\4\0\1\344\13\0\7\355\1\0\4\355\2\0"+ + "\1\355\1\0\3\355\2\0\1\355\1\0\1\u0299\2\355"+ + "\14\0\27\355\1\0\4\355\2\0\1\363\2\0\7\355"+ + "\1\0\2\355\4\0\1\355\13\0\7\355\1\0\4\355"+ + "\2\0\1\355\1\0\3\355\2\0\1\355\2\0\2\355"+ + "\14\0\27\355\1\0\4\355\2\0\1\363\2\0\7\355"+ + "\1\0\2\355\4\0\1\355\27\0\2\356\1\0\1\356"+ + "\13\0\1\356\4\0\1\u02a9\5\0\1\u02aa\1\u02ab\2\0"+ + "\1\u02ac\3\0\1\u02a9\1\0\1\u02ad\7\0\1\u02ae\25\0"+ + "\1\356\3\0\3\356\1\0\3\356\10\0\7\355\1\0"+ + "\4\355\2\356\1\355\1\356\3\355\2\0\1\355\2\0"+ + "\2\355\14\0\27\355\1\0\4\355\2\0\1\363\2\0"+ + "\7\355\1\356\2\355\1\0\3\356\1\355\3\356\12\0"+ + "\1\u02af\7\0\1\u02af\1\0\4\u02af\11\0\1\u02af\20\0"+ + "\3\u02af\2\0\2\u02af\6\0\1\u02af\7\0\2\u02af\15\0"+ + "\1\u02af\3\0\3\u02af\1\0\3\u02af\56\0\1\u02b0\72\0"+ + "\1\u02b1\130\0\2\372\1\0\32\372\2\0\72\372\1\0"+ + "\7\372\105\0\1\u02b2\33\0\2\377\1\0\33\377\1\0"+ + "\5\377\1\0\74\377\105\0\1\u02b3\44\0\6\u02b4\1\0"+ + "\10\u02b4\2\0\1\u02b4\5\0\2\u02b4\14\0\27\u02b4\1\0"+ + "\4\u02b4\5\0\12\u02b4\1\0\7\u02b4\11\0\1\u0105\1\u02b5"+ + "\3\u0105\1\u02b6\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105"+ + "\14\0\2\u0105\1\u02b6\7\u0105\1\u02b5\14\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\27\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\31\0\1\u02b7\207\0\1\u02b8"+ + "\57\0\1\u02b9\206\0\1\u02ba\153\0\1\u02bb\120\0\1\u02bc"+ + "\155\0\1\u02bd\43\0\2\57\1\0\1\57\1\0\2\57"+ + "\2\0\6\57\1\0\26\57\1\0\31\57\1\u02be\15\57"+ + "\1\0\22\57\2\67\1\0\1\67\1\0\2\67\2\0"+ + "\2\67\1\u02bf\3\67\1\0\26\67\1\0\12\67\1\u02bf"+ + "\34\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\15\67\1\u02c0\23\67\1\u02c0"+ + "\5\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\2\67\1\u02c1\3\67\1\0\1\u011b\25\67\1\0\12\67"+ + "\1\u02c1\17\67\1\u011b\14\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\67\1\u02c2\1\u02c3\3\67\1\0"+ + "\1\67\1\u02c4\24\67\1\0\12\67\1\u02c3\3\67\1\u02c4"+ + "\2\67\1\u02c2\25\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\4\67\1\114\1\67\1\0\6\67\1\114"+ + "\17\67\1\0\20\67\1\114\10\67\1\114\15\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\15\67\1\u02c5\23\67\1\u02c5\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u02c6\36\67\1\0\1\67\1\u02c6"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\12\67\1\u02c7\13\67\1\0\37\67\1\u02c7\7\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\5\67\1\u02c8"+ + "\1\0\26\67\1\0\11\67\1\u02c8\35\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u02c9\16\67\1\u02c9\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\4\67\1\u02c2\1\67"+ + "\1\0\26\67\1\0\23\67\1\u02ca\5\67\1\u02c2\10\67"+ + "\1\u02ca\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02cb\17\67\1\u02c8\4\67"+ + "\1\0\10\67\1\u02cc\5\67\1\u02cb\11\67\1\u02c8\16\67"+ + "\1\0\1\67\1\u02cc\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02c8\24\67\1\0\16\67"+ + "\1\u02c8\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u02cd\2\67\1\0\26\67\1\0\7\67"+ + "\1\u02cd\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u02ce\23\67"+ + "\1\u02ce\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\22\67\1\114\24\67"+ + "\1\0\2\67\1\114\21\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u02cf\3\67\1\0\26\67\1\0\12\67"+ + "\1\u02cf\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\114\3\67\1\u02d0\1\67\1\0\26\67\1\0"+ + "\17\67\1\114\11\67\1\u02d0\15\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\114"+ + "\23\67\1\0\13\67\1\114\11\67\1\u02d1\21\67\1\0"+ + "\1\u02d1\23\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u02d2\23\67\1\u02d2\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\u02d3\3\67\1\0\26\67\1\0\12\67\1\u02d3\34\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\5\67"+ + "\1\u011b\1\0\26\67\1\0\10\67\1\u02c8\1\u011b\35\67"+ + "\1\0\1\67\1\u02c8\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\20\67\1\u02d4\5\67\1\0\34\67"+ + "\1\u02d4\12\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\25\67\1\u0134\21\67"+ + "\1\0\1\u0134\23\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\25\67\1\u02d5\21\67\1\0"+ + "\1\u02d5\23\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\6\67\1\u011b\17\67\1\0\20\67\1\u011b\26\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\2\67\1\u02d6\23\67\1\0\13\67\1\u02d6\33\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\23\67\1\u02d7\16\67\1\u02d7\4\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\22\67\1\u02d8\24\67\1\0\2\67"+ + "\1\u02d8\21\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\1\u02d9\5\67\1\u02da\17\67\1\0\20\67\1\u02da"+ + "\11\67\1\u02d9\14\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\6\67\1\u02db\17\67\1\0"+ + "\20\67\1\u02db\26\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02dc\23\67\1\0"+ + "\13\67\1\u02dc\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\3\67\1\u02dd\2\67\1\0\26\67\1\0"+ + "\7\67\1\u02dd\15\67\1\u02de\21\67\1\0\1\u02de\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u02df\1\0"+ + "\26\67\1\0\11\67\1\u02df\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\114\21\67\1\0\1\114\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u02e0\5\67\1\0\26\67\1\0"+ + "\17\67\1\u02e0\27\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\1\u02e1\5\67\1\0\26\67\1\0\17\67"+ + "\1\u02e1\27\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\21\67\1\u02e2\4\67\1\0\30\67"+ + "\1\u02e2\16\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\114\3\67\1\0\26\67\1\0\12\67"+ + "\1\114\2\67\1\u02e3\15\67\1\114\5\67\1\u02e3\5\67"+ + "\1\0\5\67\1\114\16\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02e4\1\0\1\67\1\114\24\67\1\0"+ + "\11\67\1\u02e4\4\67\1\114\30\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\23\67\1\114\16\67\1\114\4\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\5\67\1\u02e5\1\0\26\67"+ + "\1\0\11\67\1\u02e5\35\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\5\67\1\u02e6\1\0\26\67\1\0"+ + "\11\67\1\u02e6\11\67\1\u02e7\16\67\1\u02e7\4\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\1\67\1\u02e8\24\67\1\0\16\67\1\u02e8\30\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u02e9"+ + "\1\67\1\114\1\67\1\0\26\67\1\0\12\67\1\u02e9"+ + "\16\67\1\114\15\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u02ea"+ + "\23\67\1\u02ea\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02eb\23\67\1\0"+ + "\13\67\1\u02eb\6\67\1\u02ec\24\67\1\0\2\67\1\u02ec"+ + "\21\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u02ed"+ + "\3\67\1\0\26\67\1\0\12\67\1\u02ed\10\67\1\u02ee"+ + "\1\67\1\u02c9\14\67\1\u02ee\4\67\1\0\1\u02c9\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\3\67\1\u02ef\2\67"+ + "\1\0\26\67\1\0\7\67\1\u02ef\37\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\2\67\1\u02f0\3\67"+ + "\1\0\26\67\1\0\12\67\1\u02f0\34\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u02f1\1\0"+ + "\2\67\1\u02f2\23\67\1\0\11\67\1\u02f1\1\67\1\u02f2"+ + "\33\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\4\67\1\u02f3\1\67\1\0\26\67\1\0\31\67\1\u02f3"+ + "\15\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\6\67\1\u0151\17\67\1\0\20\67\1\u0151"+ + "\26\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\21\67\1\u02f4\4\67\1\0\30\67\1\u02f4"+ + "\16\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\21\67\1\u02f5\4\67\1\0\30\67\1\u02f5"+ + "\16\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\1\u02ee\5\67\1\0\26\67\1\0\17\67\1\u02ee\27\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\33\67\1\114\13\67\1\0\5\67"+ + "\1\114\16\67\1\0\1\67\1\0\2\67\2\0\1\u02f6"+ + "\5\67\1\0\1\67\1\u011d\1\u02f7\3\67\1\u0151\17\67"+ + "\1\0\13\67\1\u02f7\1\u02f8\1\67\1\u011d\1\u02f6\1\u0151"+ + "\17\67\1\u02f8\6\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\10\67\1\u02f9"+ + "\36\67\1\0\1\67\1\u02f9\22\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u02fa"+ + "\23\67\1\u02fa\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u02fb\1\0\26\67\1\0\11\67"+ + "\1\u02fb\35\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\47\67\1\0\10\67"+ + "\1\u02c4\5\67\1\u02c4\5\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02fc\1\0\26\67\1\0\11\67\1\u02fc"+ + "\35\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02fd\25\67\1\0\32\67\1\u02fd\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\114\4\67\1\0\30\67\1\114\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\u02fe\4\67\1\0\30\67\1\u02fe\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\2\67"+ + "\1\114\3\67\1\0\26\67\1\0\12\67\1\114\34\67"+ + "\1\0\22\67\100\0\1\u02ff\51\0\1\u0300\54\0\1\u0300"+ + "\152\0\1\u0301\40\0\10\u0157\1\u0302\24\u0157\1\u0159\105\u0157"+ + "\1\0\136\u0157\37\0\1\u0303\101\0\1\132\10\0\6\132"+ + "\1\0\11\132\1\0\1\u0304\1\0\3\132\1\0\2\132"+ + "\14\0\27\132\1\0\5\132\4\0\12\132\1\0\10\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0305\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\17\0"+ + "\1\151\26\0\1\65\72\0\1\u015f\10\0\6\u015f\1\0"+ + "\11\u015f\1\0\1\u015f\1\0\3\u015f\1\0\2\u015f\14\0"+ + "\27\u015f\1\0\5\u015f\4\0\12\u015f\1\0\10\u015f\10\0"+ + "\6\u015f\1\0\4\u015f\2\u0306\1\u015f\1\u0306\1\u015f\1\u0307"+ + "\1\u015f\1\0\3\u015f\1\0\2\u015f\1\u0307\13\0\27\u015f"+ + "\1\0\5\u015f\4\0\7\u015f\1\u0306\2\u015f\1\0\3\u0306"+ + "\1\u015f\3\u0306\1\u015f\10\0\6\u015f\1\0\2\u015f\1\u0161"+ + "\1\u015f\2\u0163\1\u015f\1\u0163\1\u015f\1\0\1\u015f\1\0"+ + "\3\u015f\1\0\1\u015f\1\u0162\14\0\4\u015f\1\u0161\1\u0162"+ + "\13\u015f\1\u0162\5\u015f\1\0\1\u015f\1\u0162\3\u015f\4\0"+ + "\7\u015f\1\u0163\2\u015f\1\0\3\u0163\1\u015f\3\u0163\1\u015f"+ + "\10\0\6\u015f\1\0\2\u015f\1\u0161\1\u015f\2\u0164\1\u015f"+ + "\1\u0164\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f"+ + "\1\u0162\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162\13\u015f"+ + "\1\u0162\5\u015f\1\0\1\u015f\1\u0162\3\u015f\4\0\7\u015f"+ + "\1\u0164\2\u015f\1\0\3\u0164\1\u015f\3\u0164\1\u015f\10\0"+ + "\6\u015f\1\0\1\u015f\1\u0308\1\u0161\1\u015f\1\u0164\1\u0165"+ + "\1\u015f\1\u0165\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0"+ + "\1\u015f\1\u0162\1\0\1\u0163\12\0\4\u015f\1\u0161\1\u0162"+ + "\1\u015f\1\u0308\11\u015f\1\u0162\5\u015f\1\0\1\u015f\1\u0162"+ + "\3\u015f\4\0\7\u015f\1\u0165\2\u015f\1\0\3\u0165\1\u015f"+ + "\2\u0165\1\u0164\1\u015f\10\0\1\u015f\1\u0309\4\u015f\1\0"+ + "\2\u015f\1\u0309\1\u015f\4\u0309\1\u015f\1\0\1\u015f\1\0"+ + "\3\u015f\1\0\1\u015f\1\u0309\14\0\4\u015f\3\u0309\2\u015f"+ + "\2\u0309\6\u015f\1\u0309\5\u015f\1\0\1\u015f\2\u0309\2\u015f"+ + "\4\0\7\u015f\1\u0309\2\u015f\1\0\3\u0309\1\u015f\3\u0309"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u030a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u030b"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\1\141\1\u030c\1\141\1\u030d\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u030e\5\141\1\u030f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0310\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0311\14\141\1\u0169\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0312\2\141\1\u0313\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0314\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0315\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0316\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0317\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0318\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0319\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u031a\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u031b\17\141\1\u031c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u031d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u031e\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u031f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0320\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0169\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0321\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0322\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0323\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0324\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0325\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0326\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0327\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0328\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0329\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u032a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u032b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u032c\5\141\1\u0317\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u032d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u032e\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u032f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0330\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0331\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0169\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0332\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0333\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0334\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0335\1\141\1\u0336"+ + "\1\141\1\u0337\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0338\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0339"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u033a\15\141"+ + "\1\u033b\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u033c\6\141\1\u033d\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0216\6\141\1\u033e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\3\141\1\u0169\1\132\4\0"+ + "\12\141\1\0\7\141\100\0\1\u033f\52\0\1\u0340\7\0"+ + "\1\u0340\1\0\4\u0340\11\0\1\u0340\20\0\3\u0340\2\0"+ + "\2\u0340\6\0\1\u0340\7\0\2\u0340\15\0\1\u0340\3\0"+ + "\3\u0340\1\0\3\u0340\12\0\1\u0341\7\0\1\u0341\1\0"+ + "\4\u0341\11\0\1\u0341\20\0\3\u0341\2\0\2\u0341\6\0"+ + "\1\u0341\7\0\2\u0341\15\0\1\u0341\3\0\3\u0341\1\0"+ + "\3\u0341\100\0\1\u0342\51\0\1\u0343\54\0\1\u0343\137\0"+ + "\1\u0344\153\0\1\u0345\120\0\1\u0346\155\0\1\u0347\54\0"+ + "\6\u01a3\1\u01a4\4\u01a3\2\0\1\u01a3\3\0\1\u01a3\5\0"+ + "\2\u01a3\14\0\27\u01a3\1\0\4\u01a3\5\0\7\u01a3\1\0"+ + "\2\u01a3\4\0\1\u01a3\3\0\17\u01a3\1\u01a4\121\u01a3\65\0"+ + "\1\u0348\153\0\1\u0349\120\0\1\u034a\155\0\1\u034b\123\0"+ + "\1\u034c\4\0\1\u034d\144\0\1\u034e\1\u034f\124\0\1\u0350"+ + "\3\0\1\u0351\11\0\1\u0352\137\0\1\u0353\1\u0354\4\0"+ + "\1\u0355\121\0\1\u0356\150\0\1\u0357\7\0\1\u0358\1\u0359"+ + "\113\0\1\u035a\114\0\1\u035b\32\0\1\u035c\1\0\1\u035d"+ + "\1\u035e\126\0\1\u035f\3\0\1\u0360\110\0\1\u0361\23\0"+ + "\1\u0362\1\0\1\u0363\1\0\1\u0364\152\0\1\u0365\130\0"+ + "\1\u0366\1\u0367\6\0\1\u0368\131\0\1\u0369\137\0\1\u036a"+ + "\132\0\1\u036b\144\0\1\u036c\110\0\1\u036d\26\0\1\u036e"+ + "\2\0\1\u036f\136\0\1\u0370\1\0\1\u0371\65\0\1\u0372"+ + "\54\0\1\u0372\137\0\1\u0373\153\0\1\u0374\120\0\1\u0375"+ + "\155\0\1\u0376\102\0\1\u0377\101\0\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\1\u0378\3\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\1\141\1\u0379"+ + "\4\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\1\141\1\u037a\14\0\2\141\1\u037b\7\141"+ + "\1\u037c\1\u037d\13\141\1\0\1\141\1\u037e\1\141\1\u037f"+ + "\1\132\4\0\1\141\1\u0380\10\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0381\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0382\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0383\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u01ef\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0384\2\141"+ + "\1\u0385\6\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0387\11\141\1\u0388\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0389\2\141\1\u038a\3\141\1\u038b"+ + "\1\u038c\11\141\1\u038d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\u01cb\1\0\11\u01cb"+ + "\1\0\1\u01cb\1\0\1\132\1\u015c\1\141\1\0\2\u01cb"+ + "\14\0\27\u01cb\1\0\4\u01cb\1\132\4\0\12\u01cb\1\0"+ + "\7\u01cb\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u038e\13\141\1\u038f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0390\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0391\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0392\1\141\1\u0393\1\u0394\1\u0395\1\u0396"+ + "\1\u0397\1\u0398\1\u0399\1\141\1\u039a\2\141\1\u039b\1\141"+ + "\1\u039c\1\141\1\u039d\1\u039e\2\141\1\u039f\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u03a0\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03a1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u03a2"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03a3"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u03a4\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03a5"+ + "\1\141\1\u03a6\1\141\1\u03a7\1\u03a8\2\141\1\u03a9\1\141"+ + "\1\u03aa\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u03ab\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03ac\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u03ad\6\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03ae\10\141\1\u03af\1\141\1\u03b0\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u03b1\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u03b2\1\u03b3\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u03b4\7\141\1\u03b5\2\141"+ + "\1\u03b6\11\141\1\u0269\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u03b7\6\141\1\u03b8\12\141\1\u031a\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u03b9\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u03ba\2\141\1\u03bb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03bc\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03bd\10\141"+ + "\1\u03be\7\141\1\u03bf\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03c0\16\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u03c2\22\141\1\0\4\141"+ + "\1\132\4\0\7\141\1\u03c3\2\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u03c4\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u03c5\1\u03c6"+ + "\16\141\1\u03c7\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03c8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03c9\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u03ca\22\141\1\u0169\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u03cb\5\141\1\u031a\15\141\1\u03cc\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03cd\7\141"+ + "\1\u03ce\1\u03cf\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03d0\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d1\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03d2\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u03d3\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03d4\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u03c1\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03d6\1\u0315\3\141\1\u03d7\1\u03d8\1\u03d9\1\141"+ + "\1\u03da\1\u03db\1\u03dc\2\141\1\u03dd\2\141\1\u03de\3\141"+ + "\1\u03df\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03e0"+ + "\10\141\1\u03e1\2\141\1\u03e2\1\141\1\u03e3\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0386\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u03e4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03e5\4\141\1\u03e6"+ + "\7\141\1\u03e7\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u03e8\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u03e9\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03ea\1\u03eb\1\141\1\u03ec\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u03ed\1\141\1\u03ee\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u03ef\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03f0\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03f1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0330\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03f2\3\141"+ + "\1\u03f3\12\141\1\u03f4\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0269\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0331\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u03f5\1\141\1\u03f6\1\141\1\u03f7\15\141\1\u03f8"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u03f9"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03fa"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03fb"+ + "\1\u03fc\2\141\1\u03fd\4\141\1\u03fe\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0392\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u03ff\1\u0262\3\141\1\u021c"+ + "\5\141\1\u0400\3\141\1\u0401\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0402\3\141\1\u0403\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0404\13\141\1\u01fa\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0405\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0406\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0407\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0408\1\141"+ + "\1\u0409\5\141\1\u040a\3\141\1\u040b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u040c\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u040e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u040f\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0410\16\141\1\u0411\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0412\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0413\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0414\2\141"+ + "\1\u0415\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0416\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0417\3\141\1\u0418\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0419\4\141\1\u01ef\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u041a\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u041b\7\141\1\u041c\1\141\1\u041d\3\141"+ + "\1\u0386\6\141\1\u041e\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u041f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0420\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0421\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0169\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0422\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0423\12\141\1\u0424\1\u0425\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0426\3\141\1\u0427"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0428"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0429"+ + "\3\141\1\u042a\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0408\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u042b\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u042c\3\141\1\u042d\1\u042e\1\u042f\1\141\1\u0430"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0431"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0432"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0433"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0434"+ + "\12\141\1\u03cf\12\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u0435\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0436\1\141\1\u0437\2\141\1\u0438\7\141"+ + "\1\u0439\2\141\1\u043a\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u03e4\3\141\1\u043b\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u043c\1\u043d\1\u043e\1\u0400"+ + "\2\141\1\u043f\1\u0440\3\141\1\u0441\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0442\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0443\1\141\1\u0444\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0445\2\141"+ + "\1\u040a\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0446\6\141\1\u0447\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0448\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0449\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u044a\2\141\1\u044b\1\141\1\u044c\7\141"+ + "\1\u044d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u044e"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u044f\6\141\1\u0450\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0327\4\141\1\u0451\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0452\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0414\1\u0453\2\141\1\u0454\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0455\6\141"+ + "\1\u0456\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u044f\3\141\1\u0457\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0458\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0459\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u045a\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u045b\4\141\1\u045c\1\141\1\u045d\1\141"+ + "\1\u045e\6\141\1\u045f\1\u0460\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0461\1\u0462\1\u0204\4\141\1\u0463"+ + "\3\141\1\u0464\1\u020c\1\141\1\u0465\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0466\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0467\1\141\1\u0468\3\141"+ + "\1\u0469\10\141\1\u046a\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u031a\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0176\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u032c"+ + "\4\141\1\u046b\1\u0317\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u046c\3\141\1\u046d\1\141\1\u046e\7\141\1\u046f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0470"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0471\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0472\1\u0200"+ + "\1\141\1\u0473\1\u0474\1\141\1\u0475\4\141\1\u0476\2\141"+ + "\1\u0477\2\141\1\u03c1\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0478\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0479\6\141\1\u03cf\3\141\1\u047a\5\141"+ + "\1\u047b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u047c\5\141\1\u047d\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u047e\6\141\1\u047f\10\141\1\u0480\1\u0481"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0482"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0483"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0484"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0485\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0486\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0487\1\141\1\u0488"+ + "\1\u0489\1\u048a\1\u0396\2\141\1\u048b\1\141\1\u0463\1\u048c"+ + "\2\141\1\u0464\1\u020c\1\141\1\u048d\1\u048e\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u048f\5\141\1\u0331"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0169"+ + "\5\141\1\u0490\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0491\1\u0492\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0493\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u0494\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0495\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0496\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0497\1\u0498\15\141\1\u0499\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u049a\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u049b\1\u049c\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u049d\2\141"+ + "\1\u049e\13\141\1\u049f\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04a0\3\141\1\u04a1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u04a2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u04a3\1\141\1\u021c"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u04a4"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04a5"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u04a6"+ + "\12\141\1\u0269\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u04a7\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u04a8\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u04a9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\3\141\1\u04aa\3\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u04ab\1\141\1\u049f\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04ac\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u04ad\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u04ae\1\141\1\u04af\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u04b0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u04b1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04b2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u04b3\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\1\u04b4\6\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u031a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u04b5\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u04b6\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04b7\1\u0169\3\141\1\u04b8\5\141"+ + "\1\u04b9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u04ba\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u04bb\1\u04bc\1\u04bd\1\u04be\1\u04bf\1\u04c0\1\u04c1\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04c2\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u04c3\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u04c4\5\141"+ + "\1\u04c5\1\u021c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u021c\2\141\1\u024c\1\u04c6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u04c7\2\141\1\u024c\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u04c8\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u04c9\1\u04ca"+ + "\7\141\1\u04cb\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04cc\6\141\1\u04cd\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04ce\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04cf\3\141\1\u04d0\11\141\1\u04d1\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u04d2\11\141"+ + "\1\u04d3\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u04d4\1\u04d5\4\141\1\u04d6\1\141\1\u0400\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u040d\4\141\1\u04d7"+ + "\1\141\1\u04d8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u04d9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u04da\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u04db\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u04dc\6\141\1\u0269\2\141\1\u0411\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u04dd\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u04de\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04df\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u04e0\3\141\1\u04e1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u04e2\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u04e3\3\141\1\u04e4"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0414"+ + "\12\141\1\u04e5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u04e6\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u04e7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04e8\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u04e9\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04ea\3\141\1\u04eb\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u04ec\11\141\1\u04ed\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u04ee\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\1\141\1\u04ef\7\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\1\141\1\u04f0\7\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\u0289\1\0\11\u0289\1\0\1\u0289\1\0\1\132\1\u04f1"+ + "\1\u0289\1\0\2\u0289\14\0\27\u0289\1\0\4\u0289\1\132"+ + "\4\0\12\u0289\1\0\7\u0289\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u04f2\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u04f3\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04f4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u04f5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u04f6\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u04f7\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u04f8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u04f9\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u04fa\1\u04fb\16\141\1\u04fc\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0276\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\11\0\6\u0296\1\0"+ + "\11\u0296\1\0\1\u0296\5\0\2\u0296\14\0\27\u0296\1\0"+ + "\4\u0296\5\0\12\u0296\1\0\7\u0296\11\0\1\u04fd\54\0"+ + "\1\u04fd\63\0\6\u029a\1\0\13\u029a\5\0\2\u029a\1\0"+ + "\1\u029a\12\0\27\u029a\1\0\4\u029a\5\0\12\u029a\1\0"+ + "\7\u029a\63\0\1\u04fe\1\u04ff\2\0\1\u0500\135\0\1\u0501"+ + "\150\0\1\u0502\123\0\1\u0503\12\0\1\u0504\124\0\1\u0505"+ + "\15\0\1\u0506\134\0\1\u0507\126\0\1\u0508\5\0\1\u0509"+ + "\147\0\1\u050a\125\0\1\u050b\13\0\1\u050c\140\0\1\u050d"+ + "\136\0\1\u050e\124\0\1\u050f\140\0\1\u0510\73\0\6\u02a8"+ + "\1\0\13\u02a8\5\0\2\u02a8\1\0\1\u02a8\12\0\27\u02a8"+ + "\1\0\4\u02a8\5\0\12\u02a8\1\0\7\u02a8\72\0\1\u02a9"+ + "\125\0\1\u02a9\6\0\1\u02a9\131\0\1\u02a9\23\0\1\u02a9"+ + "\114\0\1\u02a9\141\0\1\u02a9\7\0\1\u02a9\12\0\1\u02a9"+ + "\114\0\1\u0511\72\0\2\u0105\1\u0512\3\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\3\u0105\1\u0512\23\u0105"+ + "\1\0\4\u0105\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105"+ + "\1\0\1\u0513\7\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\23\u0105\1\u0513\3\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\31\0\1\u0514\202\0\1\u0515\127\0\1\u02bb\131\0"+ + "\1\u0516\165\0\1\u0517\103\0\1\u0518\75\0\2\57\1\0"+ + "\1\57\1\0\2\57\2\0\6\57\1\0\26\57\1\0"+ + "\24\57\1\u0519\22\57\1\0\22\57\2\67\1\0\1\67"+ + "\1\0\2\67\2\0\3\67\1\u051a\2\67\1\0\26\67"+ + "\1\0\7\67\1\u051a\37\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\67\1\u02d9\4\67\1\0\26\67"+ + "\1\0\21\67\1\u02d9\1\67\1\114\16\67\1\114\4\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u051b\2\67\1\0\26\67\1\0\7\67\1\u051b\15\67"+ + "\1\u051c\21\67\1\0\1\u051c\23\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u051d\1\0\26\67\1\0\11\67"+ + "\1\u051d\35\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\33\67\1\u02d9\13\67"+ + "\1\0\5\67\1\u02d9\16\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u051e\23\67\1\0\13\67"+ + "\1\u051e\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u02f9\24\67\1\0\16\67"+ + "\1\u02f9\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\4\67\1\114\1\67\1\0\26\67\1\0\31\67"+ + "\1\114\15\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u051f\3\67\1\0\26\67\1\0\12\67"+ + "\1\u051f\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\114\23\67\1\0\13\67"+ + "\1\114\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\5\67\1\u02d9\1\0\26\67\1\0\11\67\1\u02d9"+ + "\35\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\33\67\1\u0520\13\67\1\0"+ + "\5\67\1\u0520\16\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\22\67\1\u0521\24\67\1\0"+ + "\2\67\1\u0521\21\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\u0522\36\67\1\0"+ + "\1\67\1\u0522\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\23\67\1\u0523\16\67\1\u0523"+ + "\4\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02d9\25\67\1\0\32\67\1\u02d9\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u0524\23\67\1\u0524\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\12\67\1\u02ee\13\67\1\0\37\67\1\u02ee\7\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\22\67\1\u02f5\24\67\1\0\2\67"+ + "\1\u02f5\21\67\1\0\1\67\1\0\2\67\2\0\3\67"+ + "\1\u0525\2\67\1\0\26\67\1\0\7\67\1\u0525\37\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\15\67\1\u02ed\23\67\1\u02ed\5\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\5\67"+ + "\1\u0526\1\0\26\67\1\0\11\67\1\u0526\35\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\25\67\1\u02ee\21\67\1\0\1\u02ee\23\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\15\67\1\u014f\23\67\1\u014f\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\27\67\1\114\17\67\1\0\3\67\1\114\20\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0527\23\67\1\0\13\67\1\u0527\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u0151\23\67\1\0\13\67\1\u0151\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u02f9\23\67\1\0\13\67\1\u02f9\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\2\67"+ + "\1\u014f\23\67\1\0\13\67\1\u014f\33\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u0528\16\67\1\u0528\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\1\67\1\u0529\4\67"+ + "\1\0\26\67\1\0\21\67\1\u0529\25\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u052a\1\0"+ + "\26\67\1\0\11\67\1\u052a\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\u052b"+ + "\23\67\1\0\13\67\1\u052b\33\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\u052c\21\67\1\0\1\u052c\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\1\114\25\67\1\0"+ + "\32\67\1\114\14\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\1\67\1\u052d\24\67\1\0"+ + "\16\67\1\u052d\30\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u052e"+ + "\23\67\1\u052e\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\15\67\1\u052f"+ + "\23\67\1\u052f\5\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0151\23\67\1\0"+ + "\13\67\1\u0151\1\67\1\114\23\67\1\114\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\12\67\1\114\13\67\1\0\37\67\1\114\7\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\5\67\1\u0530"+ + "\1\0\26\67\1\0\11\67\1\u0530\35\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\27\67\1\114\5\67\1\u0531\11\67\1\0\3\67"+ + "\1\114\1\u0531\17\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\u0532\36\67\1\0"+ + "\1\67\1\u0532\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\67\1\u0533\24\67\1\0\16\67\1\u0533"+ + "\30\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\12\67\1\u0534\13\67\1\0\37\67\1\u0534"+ + "\7\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\10\67\1\114\36\67\1\0"+ + "\1\67\1\114\22\67\1\0\1\67\1\0\2\67\2\0"+ + "\5\67\1\114\1\0\26\67\1\0\11\67\1\114\35\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\21\67\1\u02c8\4\67\1\0\30\67\1\u02c8\16\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\25\67\1\u0535\21\67\1\0\1\u0535"+ + "\23\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0536"+ + "\2\67\1\0\26\67\1\0\7\67\1\u0536\37\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\15\67\1\114\23\67\1\114\5\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\1\67\1\u0537\24\67\1\0\16\67\1\u0537\30\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u0131"+ + "\2\67\1\0\26\67\1\0\7\67\1\u0131\37\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u0538"+ + "\3\67\1\0\26\67\1\0\12\67\1\u0538\34\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\1\67\1\u010f"+ + "\4\67\1\0\26\67\1\0\21\67\1\u010f\25\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u0539\36\67\1\0\1\67\1\u0539"+ + "\22\67\1\0\1\67\1\0\2\67\2\0\2\67\1\u053a"+ + "\3\67\1\0\26\67\1\0\12\67\1\u053a\34\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\21\67\1\u053b\4\67\1\0\30\67\1\u053b\16\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\3\67\1\u052a"+ + "\2\67\1\0\26\67\1\0\7\67\1\u052a\12\67\1\u0521"+ + "\24\67\1\0\2\67\1\u0521\21\67\1\0\1\67\1\0"+ + "\2\67\2\0\4\67\1\u02d0\1\67\1\0\26\67\1\0"+ + "\31\67\1\u02d0\15\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\22\67\1\u053c"+ + "\24\67\1\0\2\67\1\u053c\21\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0131\23\67\1\0"+ + "\13\67\1\u0131\33\67\1\0\22\67\73\0\1\u053d\57\0"+ + "\1\u053e\55\0\1\u053e\143\0\1\u053f\123\0\2\u0302\11\0"+ + "\1\u0302\57\0\1\u0540\130\0\1\132\10\0\1\132\1\u0541"+ + "\4\132\1\0\2\132\1\u0541\1\132\4\u0541\1\132\1\0"+ + "\1\132\1\0\3\132\1\0\1\132\1\u0541\14\0\4\132"+ + "\3\u0541\2\132\2\u0541\6\132\1\u0541\5\132\1\0\1\132"+ + "\2\u0541\2\132\4\0\7\132\1\u0541\2\132\1\0\3\u0541"+ + "\1\132\3\u0541\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0542\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\u015f\10\0\6\u015f\1\0\4\u015f\2\u0306\1\u015f"+ + "\1\u0306\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f"+ + "\1\u0162\14\0\5\u015f\1\u0162\13\u015f\1\u0162\5\u015f\1\0"+ + "\1\u015f\1\u0162\3\u015f\4\0\7\u015f\1\u0306\2\u015f\1\0"+ + "\3\u0306\1\u015f\3\u0306\24\0\2\u0306\1\0\1\u0306\76\0"+ + "\1\u0306\3\0\3\u0306\1\0\3\u0306\1\u015f\10\0\1\u015f"+ + "\1\u0309\4\u015f\1\0\1\u015f\1\u0308\1\u0309\1\u015f\4\u0309"+ + "\1\u015f\1\0\1\u015f\1\0\3\u015f\1\0\1\u015f\1\u0309"+ + "\14\0\4\u015f\3\u0309\1\u0308\1\u015f\2\u0309\6\u015f\1\u0309"+ + "\5\u015f\1\0\1\u015f\2\u0309\2\u015f\4\0\7\u015f\1\u0309"+ + "\2\u015f\1\0\3\u0309\1\u015f\3\u0309\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0172\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0543\6\141\1\u0544\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0545\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0546\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0547\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0548\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0549\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u054a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0169\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u054b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u054c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u054d\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u054e\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0169\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u01ea\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0169\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0269\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u054f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0544\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0550\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0551\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0310\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0552\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0553\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0554\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u017a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0555\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0552\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u032c\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0556\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0557\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0558\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0554\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0333\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0312\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0554\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0559\5\141\1\u0426\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0169\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0169\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u055a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0169\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0317\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u055b\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u055c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u055d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u055e\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0555\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u055f\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0560\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0561\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0562\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0563\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\73\0\1\u0564\57\0\1\u0565\7\0"+ + "\1\u0565\1\0\4\u0565\11\0\1\u0565\20\0\3\u0565\2\0"+ + "\2\u0565\6\0\1\u0565\7\0\2\u0565\15\0\1\u0565\3\0"+ + "\3\u0565\1\0\3\u0565\12\0\1\u0566\7\0\1\u0566\1\0"+ + "\4\u0566\11\0\1\u0566\20\0\3\u0566\2\0\2\u0566\6\0"+ + "\1\u0566\7\0\2\u0566\15\0\1\u0566\3\0\3\u0566\1\0"+ + "\3\u0566\73\0\1\u0567\57\0\1\u0568\55\0\1\u0568\132\0"+ + "\1\u0345\131\0\1\u0569\165\0\1\u056a\103\0\1\u056b\157\0"+ + "\1\u0349\131\0\1\u056c\165\0\1\u056d\103\0\1\u056e\127\0"+ + "\1\u056f\164\0\1\u0570\154\0\1\u0571\134\0\1\u0572\3\0"+ + "\1\u0573\151\0\1\u0574\114\0\1\u0575\1\u0576\157\0\1\u0577"+ + "\117\0\1\u0578\2\0\1\u0579\156\0\1\u057a\141\0\1\u057b"+ + "\120\0\1\u057c\3\0\1\u057d\17\0\1\u057e\66\0\1\u057f"+ + "\170\0\1\u0580\136\0\1\u0581\3\0\1\u0582\13\0\1\u0583"+ + "\121\0\1\u0584\3\0\1\u0364\133\0\1\u0585\10\0\1\u0586"+ + "\125\0\1\u0587\150\0\1\u0588\142\0\1\u0589\140\0\1\u058a"+ + "\1\0\1\u058b\140\0\1\u058c\125\0\1\u058d\153\0\1\u058e"+ + "\132\0\1\u058f\136\0\1\u0590\137\0\1\u0591\144\0\1\u0592"+ + "\137\0\1\u0593\146\0\1\u0594\5\0\1\u0595\134\0\1\u0596"+ + "\123\0\1\u0597\153\0\1\u0598\131\0\1\u0599\2\0\1\u059a"+ + "\11\0\1\u059b\127\0\1\u059c\127\0\1\u059d\15\0\1\u059e"+ + "\125\0\1\u059f\140\0\1\u05a0\140\0\1\u05a1\71\0\1\u05a2"+ + "\55\0\1\u05a2\132\0\1\u0374\131\0\1\u05a3\165\0\1\u05a4"+ + "\103\0\1\u05a5\75\0\1\132\10\0\6\141\1\0\2\141"+ + "\1\u0549\6\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\1\141"+ + "\1\u05a6\7\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\3\141\1\u05a7\2\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u05a8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0262\7\141\1\u05a9\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05aa\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\3\141"+ + "\1\u05ab\2\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\1\u05ac"+ + "\3\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\2\141\1\u05ad"+ + "\1\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\2\141\1\u05ae\6\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0400\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u05af\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05b0\14\141\1\u05b1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u05b2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05b3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0443"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u044f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u05b4\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u05b5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u05b6\1\u05b7"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05b8\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05b9\15\141\1\u05ba"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05bb"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05ba"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05bc"+ + "\6\141\1\u05bd\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u05be\6\141\1\u05bf\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0269\1\141\1\u05c0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u05c1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u05c2\2\141\1\u05c3\1\u0395"+ + "\1\u05c4\1\u05c5\1\u05c6\1\u05c7\1\u05c8\1\u05c9\1\141\1\u05ca"+ + "\1\141\1\u05cb\1\u05cc\1\141\1\u05cd\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05ce\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u05cf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u05d0\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03c6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u05d1\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u05d2\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d3\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0426\1\141\1\u05d4\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d5\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u041e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u05d6\11\141\1\u05d7\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d8\15\141\1\u044f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u05d1"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u031a"+ + "\13\141\1\u039b\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05d9\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05da\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u05db\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u05dc\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u05dd\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u05de"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0269\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u05df\17\141\1\u0174\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u05e0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0269\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0548\1\141\1\u05e1\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05e2\3\141"+ + "\1\u05e3\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u05e4\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u05e5\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u05e6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05e7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u05e8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u05e9\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u05ea\4\141\1\u05eb\2\141\1\u05ec\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u05ed\3\141\1\u05ee\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05ef\6\141"+ + "\1\u05f0\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0269\4\141\1\u0269\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05f1\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u05f2\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u05f3\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u05f4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u05f5"+ + "\2\141\1\u05f6\1\u05f7\2\141\1\u05f8\1\u05f9\1\141\1\u05fa"+ + "\1\u05fb\1\141\1\u05fc\1\u05fd\2\141\1\u05fe\1\u05ff\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0600\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0601\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0602\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0603\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0604\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0605\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0606\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u05d8\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0607\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u03c8\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u0608\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0609\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u03d4\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u060a\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0396\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0549\7\141\1\u060b\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0269\11\141\1\u060c\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u060d\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u060e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u060f\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0269\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0611\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0612\11\141"+ + "\1\u018c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u03ee\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0613\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0269\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0614"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0615"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0616"+ + "\1\u0617\10\141\1\u0618\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0619\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u061a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u061b\1\141\1\u044f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u061c\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u061d\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u061e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u061f\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0620\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0621\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0622\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u03d4"+ + "\5\141\1\u0269\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0623\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\u0624\6\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0392\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0625\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0626\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0627\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0628\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0629\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u062a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u062b\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u03d4\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u062c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u062d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u062e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u062f\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0630\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0631\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0632\4\141\1\u0633\2\141\1\u0634"+ + "\6\141\1\u0635\1\141\1\u0636\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0637\2\141\1\u0638\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0639\1\u063a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u063b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u063c\5\141"+ + "\1\u063d\6\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u063e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u063f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0640\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0641\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0642\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0331\12\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0643\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0269\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0644\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0645\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0646\1\141\1\u0392\5\141\1\u0647\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0648\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0406\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u03ee\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0649\3\141\1\u0400\3\141\1\u05d8"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u044f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0400"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u064a"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u064b"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u064c"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u03ec\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u064d\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u064e\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u064f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u04f9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d9\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0650\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0651\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u04d6\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0652\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0653\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0654\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0655\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u04f9\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u03cf\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0656\3\141\1\u0657\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0658\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u031a\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u03cf\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0659\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u065a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u065b\1\u065c\1\u065d"+ + "\1\141\1\u065e\1\141\1\u065f\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0660\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0661\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0662\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0169\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0663\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0664\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0665\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0666\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0667\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0668\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0669\11\141\1\u0269\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\5\141\1\u066a\1\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u066b\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u066c\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u066d\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u066e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u066f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0670\21\141\1\u0671\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0672\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0673\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0674\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0675\1\141\1\u0676\1\u0677\1\u0678"+ + "\1\u0679\1\141\1\u0411\1\u067a\1\141\1\u067b\1\141\1\u067c"+ + "\5\141\1\u067d\1\141\1\u0174\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u067e\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u067f\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\1\141\1\u0680"+ + "\4\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0681\1\141\1\u0682\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0683\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0684\1\0\1\u05d1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0685\1\u0686\1\u0687\1\u0688"+ + "\1\141\1\u0689\1\u068a\1\u068b\1\u068c\1\u068d\1\u068e\1\141"+ + "\1\u0610\1\u068f\1\u0690\2\141\1\u0691\1\u0692\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0693\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0694\1\u0169\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0695\1\141\1\u0696"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0697"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0668"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u05d1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0698"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0699\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u069a\4\141"+ + "\1\u01eb\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u069b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u069c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u069d\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u069e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u069f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u06a0\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\5\141"+ + "\1\u03c3\1\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u06a1\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u06a2\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0269\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u06a3\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u06a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u06a5\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u06a6\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u06a7\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06a8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u06a9\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0398\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u06aa\4\141\1\u06ab\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06ac\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06ad\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u06ae\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u06af\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b0\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u06b1\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u031a\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0392\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0392\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u06b2\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u06b3\13\141\1\u0386\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u06b4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u06b6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u06b7\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u06b8\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u06b9\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0411\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06ba\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u06bb\3\141"+ + "\1\u06bc\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u06bd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u06be\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\4\141\1\u06bf"+ + "\2\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u044f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u06c0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u06c1\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u06c2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u06c3\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06c4\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06c5\3\141\1\u06c6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u06c7\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u06c8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u06c9\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u04a4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u06ca\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u06cb\10\141\1\u06cc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u05d1\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u04f9\2\141\1\u0269"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06cd"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u06ce"+ + "\20\141\1\u0639\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u06cf\5\141\1\u06d0\3\141\1\u06d1\7\141\1\u06d2"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0269"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u06d3\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u06d4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0679\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06d5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u05d9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u06d6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u06d7\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06d8\1\0\1\u06d9\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06da\1\u06db\1\u06dc\1\u06dd"+ + "\1\u06de\1\u06df\1\u06e0\1\u06e1\1\u06e2\1\u06e3\1\u06e4\1\u06e5"+ + "\1\u06e6\1\u06e7\1\u06e8\1\u06e9\1\141\1\u06ea\1\u06eb\1\141"+ + "\1\u06ec\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u06ed\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06ba"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06ef"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0262"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06f0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06f1"+ + "\1\141\1\u01fa\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0409\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u06f2\22\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u06f3\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u06ef\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u06f4\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0415\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06f5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u06f6\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u06f7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u06f8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u01ef\1\141\1\u06f9\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u06fa\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u05d8\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u06fb\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06fc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u06fd\1\141\1\u06fe"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0693"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06ff"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0700"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0701"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0702"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0703"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0704"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0705"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0706\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0707\1\u0708\1\141\1\u0709\1\141\1\u070a\1\141\1\u0393"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u03c6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u070b\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u070c\1\u070d"+ + "\1\141\1\u070e\1\u070f\1\u0710\1\u0711\1\141\1\u0712\1\141"+ + "\1\u0713\1\u0714\1\u0715\1\141\1\u0716\1\u0717\1\141\1\u0718"+ + "\1\u0719\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u071a\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u044f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u071b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u071c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u071d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u071e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u071f\1\141\1\u0720"+ + "\1\141\1\u0721\1\u0204\1\141\1\u0722\1\u0723\1\141\1\u0724"+ + "\1\u0725\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0726\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0727\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0728\2\141\1\u0729\1\u072a\1\u072b\1\141\1\u072c\1\u072d"+ + "\1\u072e\1\u072f\1\141\1\u0730\2\141\1\u0731\1\141\1\u0732"+ + "\1\u0733\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0734\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0735\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0736"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0737"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0738"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0739"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u073a"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u073b"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u073c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u073d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u073e\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u03f3\11\141"+ + "\1\u073f\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0740\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0741"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0742\5\141"+ + "\1\u055b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0743\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0744\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0745\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0746"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u05e2\3\141"+ + "\1\u0747\1\141\1\u0291\3\141\1\u0748\1\u0749\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u074a\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u074b\1\141\1\u074c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0681\7\141"+ + "\1\u074d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u074e"+ + "\2\141\1\u074f\1\u0750\1\u0751\4\141\1\u0208\1\141\1\u0752"+ + "\1\141\1\u0464\2\141\1\u0753\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0754\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u024c\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0755\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0756\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0757"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0758\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0759\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u075a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0687\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u075b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u075c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0269\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u075d\7\141\1\u055f\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u075e\5\141\1\u075f\6\141"+ + "\1\u0760\1\141\1\u0761\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0560\7\141\1\u0762\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u040b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0763\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0485\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0764\3\141\1\u0765\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0766\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0767\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0768\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0769\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u074e\1\u076a\1\u076b"+ + "\1\u076c\1\u076d\1\u076e\1\u076f\1\u0770\1\u0771\1\141\1\u0772"+ + "\1\u0773\1\u0774\1\u0775\1\u0776\2\141\1\u0777\1\u0778\1\141"+ + "\1\u06ec\1\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u077a"+ + "\6\141\1\132\10\0\6\141\1\0\10\141\1\u077b\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u06ee\11\141\1\u077c\11\141\1\u06ec\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u077d\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u077e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u077f\2\141\1\u0780\1\u0387\1\u0262\3\141"+ + "\1\u0408\1\u0781\1\u0393\6\141\1\u0782\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0783\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0784\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0785\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0414\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0786\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0787\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0788\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0789\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u078a\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u078b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u078c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u078d\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u078e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u078f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0790\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0791\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0792\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u047b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0793\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0794\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\u0378\5\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\1\141\1\u0169\7\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\132"+ + "\1\0\11\132\1\0\1\u0795\1\0\3\132\1\0\2\132"+ + "\14\0\27\132\1\0\5\132\4\0\12\132\1\0\10\132"+ + "\10\0\6\141\1\0\10\141\1\u0796\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0797\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0798\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0799\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u079a\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u079b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u079c\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0269\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u079d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u079e\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u079f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\16\0\1\u07a0\41\0\1\u07a0"+ + "\136\0\1\u07a1\145\0\1\u07a2\137\0\1\u07a3\137\0\1\u07a4"+ + "\153\0\1\u050c\144\0\1\u07a5\124\0\1\u07a6\135\0\1\u07a7"+ + "\147\0\1\u07a8\130\0\1\u07a9\152\0\1\u07aa\134\0\1\u07ab"+ + "\3\0\1\u07ac\130\0\1\u07ad\151\0\1\u07ae\125\0\1\u07af"+ + "\162\0\1\u07b0\123\0\1\u07b1\141\0\1\u0504\140\0\1\u07b2"+ + "\152\0\1\u07b3\51\0\3\u0105\1\u07b4\2\u0105\1\0\10\u0105"+ + "\2\0\1\u0105\5\0\2\u0105\14\0\1\u07b4\26\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\11\0\6\u0105\1\0"+ + "\1\u0105\1\u07b5\6\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\7\u0105\1\u07b5\17\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\100\0\1\u07b6\50\0\1\u07b7\203\0\1\u0516\12\0"+ + "\1\u02bb\57\0\2\u07b8\1\0\7\u0518\1\0\10\u0518\2\u07b8"+ + "\1\u0518\1\0\1\u07b8\1\0\1\u0518\1\u07b8\2\u0518\2\u07b8"+ + "\1\0\2\u07b8\1\0\5\u07b8\1\0\27\u0518\1\0\4\u0518"+ + "\5\u07b8\12\u0518\1\0\7\u0518\2\57\1\0\1\57\1\0"+ + "\2\57\2\0\6\57\1\0\26\57\1\0\31\57\1\u07b9"+ + "\15\57\1\0\22\57\2\67\1\0\1\67\1\0\2\67"+ + "\2\0\4\67\1\u02ee\1\67\1\0\26\67\1\0\31\67"+ + "\1\u02ee\15\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\27\67\1\u02c8\17\67"+ + "\1\0\3\67\1\u02c8\20\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\23\67\1\u011e\16\67"+ + "\1\u011e\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u052a\2\67\1\0\26\67\1\0\7\67"+ + "\1\u052a\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u02ee\4\67\1\0\26\67\1\0\21\67"+ + "\1\u02ee\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u02c8\4\67\1\0\26\67\1\0\21\67"+ + "\1\u02c8\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u07ba\23\67"+ + "\1\u07ba\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u07bb\3\67\1\0\26\67\1\0\12\67"+ + "\1\u07bb\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07bc\23\67\1\0\13\67"+ + "\1\u07bc\1\67\1\u0527\23\67\1\u0527\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\21\67"+ + "\1\u07bd\4\67\1\0\30\67\1\u07bd\16\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\10\67\1\u02c8\36\67\1\0\1\67\1\u02c8\22\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u07be\16\67\1\u07be\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\15\67\1\u07bf\23\67\1\u07bf\5\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\23\67\1\u014f\16\67\1\u014f\4\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\5\67\1\u07c0\1\0"+ + "\26\67\1\0\11\67\1\u07c0\35\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\27\67\1\u07c1\17\67\1\0\3\67\1\u07c1\20\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\25\67\1\u0137\21\67\1\0\1\u0137\23\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\14\67"+ + "\1\u07c2\23\67\1\u07c2\6\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\12\67\1\u0527\13\67"+ + "\1\0\37\67\1\u0527\7\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\6\67\1\0\26\67\1\0\25\67"+ + "\1\u011e\21\67\1\0\1\u011e\23\67\1\0\1\67\1\0"+ + "\2\67\2\0\3\67\1\u07c3\2\67\1\0\26\67\1\0"+ + "\7\67\1\u07c3\37\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\5\67\1\u07c4\1\0\1\67\1\u07c5\24\67"+ + "\1\0\11\67\1\u07c4\4\67\1\u07c5\3\67\1\u07c6\24\67"+ + "\1\0\2\67\1\u07c6\21\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u07c7\2\67\1\0\26\67\1\0\7\67"+ + "\1\u07c7\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u07c8\13\67\1\0\37\67"+ + "\1\u07c8\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07c9\23\67\1\0\13\67"+ + "\1\u07c9\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\21\67\1\u07ca\4\67\1\0\30\67"+ + "\1\u07ca\16\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u02c8\3\67\1\0\26\67\1\0\12\67"+ + "\1\u02c8\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\23\67\1\u07cb\16\67"+ + "\1\u07cb\4\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u011b\4\67\1\0\26\67\1\0\21\67"+ + "\1\u011b\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u02ee\23\67\1\0\13\67"+ + "\1\u02ee\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u07cc\23\67\1\0\13\67"+ + "\1\u07cc\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\15\67\1\u07cd\23\67"+ + "\1\u07cd\5\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u0137\23\67\1\0\13\67"+ + "\1\u0137\33\67\1\0\22\67\100\0\1\u07ce\53\0\1\u07cf"+ + "\45\0\1\u07cf\157\0\1\u07d0\40\0\1\132\10\0\1\132"+ + "\1\u07d1\4\132\1\0\2\132\1\u07d1\1\132\4\u07d1\1\132"+ + "\1\0\1\132\1\0\3\132\1\0\1\132\1\u07d1\14\0"+ + "\4\132\3\u07d1\2\132\2\u07d1\6\132\1\u07d1\5\132\1\0"+ + "\1\132\2\u07d1\2\132\4\0\7\132\1\u07d1\2\132\1\0"+ + "\3\u07d1\1\132\3\u07d1\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u07d2\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u07d3\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0426\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0412\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\3\141\1\u0269\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07d4\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u07d5\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u07d6\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u07d7\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0632\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07d8\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u07d9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u07da\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u07db\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0554\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u07dc\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u07dd\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u07de\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u0169\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u07df\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u07e0"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0317"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u07e1\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0317\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u07e2\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u032b\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u055c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u07e3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u07e4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u07e5\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u018f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\100\0\1\u07e6"+ + "\140\0\1\u07e7\53\0\1\u07e8\45\0\1\u07e8\67\0\1\u07e9"+ + "\203\0\1\u0569\12\0\1\u0345\57\0\2\u07ea\1\0\7\u056b"+ + "\1\0\10\u056b\2\u07ea\1\u056b\1\0\1\u07ea\1\0\1\u056b"+ + "\1\u07ea\2\u056b\2\u07ea\1\0\2\u07ea\1\0\5\u07ea\1\0"+ + "\27\u056b\1\0\4\u056b\5\u07ea\12\u056b\1\0\7\u056b\10\0"+ + "\1\u07eb\203\0\1\u056c\12\0\1\u0349\57\0\2\u07ec\1\0"+ + "\7\u056e\1\0\10\u056e\2\u07ec\1\u056e\1\0\1\u07ec\1\0"+ + "\1\u056e\1\u07ec\2\u056e\2\u07ec\1\0\2\u07ec\1\0\5\u07ec"+ + "\1\0\27\u056e\1\0\4\u056e\5\u07ec\12\u056e\1\0\7\u056e"+ + "\60\0\1\u07ed\152\0\1\u07ee\142\0\1\u07ef\124\0\1\u07f0"+ + "\142\0\1\u07f1\134\0\1\u07f2\3\0\1\u0578\145\0\1\u07f3"+ + "\144\0\1\u07f4\77\0\1\u07f5\174\0\1\u0590\146\0\1\u07f6"+ + "\140\0\1\u0590\126\0\1\u07f7\110\0\1\u07f8\205\0\1\u07f9"+ + "\73\0\1\u07fa\165\0\1\u0590\153\0\1\u07fb\130\0\1\u07fc"+ + "\135\0\1\u07fd\155\0\1\u07fe\126\0\1\u0578\151\0\1\u07ff"+ + "\124\0\1\u0800\145\0\1\u0578\134\0\1\u0801\142\0\1\u0802"+ + "\140\0\1\u0803\154\0\1\u0590\141\0\1\u0578\120\0\1\u0804"+ + "\151\0\1\u0364\130\0\1\u0805\141\0\1\u0579\144\0\1\u0806"+ + "\141\0\1\u0807\140\0\1\u0808\153\0\1\u0809\126\0\1\u080a"+ + "\133\0\1\u080b\155\0\1\u0590\125\0\1\u080c\144\0\1\u0590"+ + "\131\0\1\u080d\144\0\1\u0805\155\0\1\u080e\116\0\1\u080f"+ + "\17\0\1\u0810\124\0\1\u057f\142\0\1\u0811\130\0\1\u0812"+ + "\75\0\1\u0813\45\0\1\u0813\67\0\1\u0814\203\0\1\u05a3"+ + "\12\0\1\u0374\57\0\2\u0815\1\0\7\u05a5\1\0\10\u05a5"+ + "\2\u0815\1\u05a5\1\0\1\u0815\1\0\1\u05a5\1\u0815\2\u05a5"+ + "\2\u0815\1\0\2\u0815\1\0\5\u0815\1\0\27\u05a5\1\0"+ + "\4\u05a5\5\u0815"; - private static final String ZZ_TRANS_PACKED_1 = - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u089b" + - "\31\115\1\u089c\3\115\1\u089d\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u089e\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u089f\1\115" + - "\1\u068c\2\115\1\0\1\106\2\115\1\0\3\115\1\u04c4" + - "\1\115\11\0\1\115\1\u08a0\1\u08a1\1\u08a2\1\u08a3\1\u08a4" + - "\1\u08a5\1\u08a6\17\115\1\u0474\1\u08a7\3\115\1\u08a8\1\u02c8" + - "\1\u08a9\5\115\1\u08aa\2\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02f3\27\115\1\u080e\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u04c8\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u08ab\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u071b\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u08ac\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u015e\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02a1\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0614\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u08ad\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u08ae\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u08af\1\115" + - "\1\u08b0\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u08b1\3\115\1\u08b2\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u08b3\1\115\1\u08b4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u08b5\5\115\1\u08b6" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u08b7\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u08b8\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u08b9\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u08ba\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u08bb\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u08bc\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u08bd\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u08be\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u08bf\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u08c0" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u08c1\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u08c2\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u08c3\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u08c4\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u08c5\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u08c6\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u08c7\30\115" + - "\1\u08c8\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u08c9\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u08ca\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u08cb\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u04ef\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u04fc\3\115\1\0\1\106" + - "\1\u08cc\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u08cd\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u02b4\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u08ce\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u08cf" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0362\3\115\1\0\1\106\1\u08d0\1\115\1\0" + - "\5\115\11\0\6\115\1\u08d1\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u08d2\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u08d3\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u08d4\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u08d5\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u08d6" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u08d7\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u08d8\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u08d9\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u08da\2\115\1\u08db\2\115\1\u08dc\25\115\1\u08dd" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u08de\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u08df\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02ca\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u08e0\3\115\1\u015a\22\115\1\u02cd\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u08e1\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u08e2\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u08e3\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u06ba" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u08e4\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u08e5\5\115\1\0\1\106\2\115\1\0\3\115\1\u08e6" + - "\1\115\11\0\34\115\1\u08e7\7\115\1\u08e8\2\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u08e9\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u08ea\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\11\0\6\235\1\0\5\235\3\0\6\235\5\0" + - "\5\235\11\0\6\235\1\u08eb\40\235\2\44\1\0\1\44" + - "\1\0\2\44\2\0\1\70\5\44\1\0\6\44\2\0" + - "\34\44\1\70\45\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\42\44\1\u08ec\15\44\1\u08ec" + - "\21\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\3\44\1\u021f\37\44\1\u021f\36\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\17\44\1\u08ed\11\44\1\u08ed\50\44\1\0\1\44\1\0" + - "\2\44\2\0\5\44\1\u08ee\1\0\6\44\2\0\2\44" + - "\1\u08ee\77\44\1\0\1\44\1\0\2\44\2\0\2\44" + - "\1\u08ef\3\44\1\0\6\44\2\0\1\44\1\u08ef\100\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\52\44\1\u08f0\16\44\1\u08f0\10\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\42\44" + - "\1\u064c\15\44\1\u064c\21\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\45\44\1\u08f1\20\44" + - "\1\u08f1\13\44\1\0\1\44\1\0\2\44\2\0\1\u0420" + - "\5\44\1\0\6\44\2\0\34\44\1\u0420\45\44\1\0" + - "\1\44\1\0\2\44\2\0\1\u08f2\5\44\1\0\6\44" + - "\2\0\34\44\1\u08f2\45\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\44\44\1\u022a\16\44" + - "\1\u022a\16\44\1\0\1\44\1\0\2\44\2\0\1\u064a" + - "\5\44\1\0\6\44\2\0\34\44\1\u064a\45\44\1\0" + - "\1\44\1\0\2\44\2\0\1\44\1\u08f3\4\44\1\0" + - "\6\44\2\0\35\44\1\u08f3\44\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\17\44\1\u020a" + - "\11\44\1\u020a\50\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\14\44\1\u064a\16\44\1\u064a" + - "\46\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\17\44\1\u08f4\11\44\1\u08f4\50\44\1\0" + - "\1\44\1\0\2\44\2\0\3\44\1\304\2\44\1\0" + - "\6\44\2\0\36\44\1\304\43\44\1\0\1\44\1\0" + - "\2\44\2\0\2\44\1\u08f5\3\44\1\0\6\44\2\0" + - "\1\44\1\u08f5\76\44\14\0\1\u08f6\51\0\1\u08f6\41\0" + - "\1\106\10\0\1\106\1\u08f7\4\106\1\0\1\106\4\u08f7" + - "\1\106\2\0\4\106\2\u08f7\1\0\3\106\1\0\2\106" + - "\3\u08f7\11\0\2\u08f7\2\106\1\u08f7\3\106\1\u08f7\4\106" + - "\1\u08f7\6\106\1\u08f7\3\106\1\u08f7\10\106\3\u08f7\1\106" + - "\2\u08f7\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u02ff\41\115\2\u0249\1\0\7\u0249\1\u08f8\6\u0249\4\u08f8" + - "\1\u0249\1\371\5\u0249\2\u08f8\7\u0249\3\u08f8\11\u0249\2\u08f8" + - "\2\u0249\1\u08f8\3\u0249\1\u08f8\4\u0249\1\u08f8\6\u0249\1\u08f8" + - "\3\u0249\1\u08f8\10\u0249\3\u08f8\1\u0249\2\u08f8\2\u024e\1\0" + - "\7\u024e\1\u08f9\6\u024e\4\u08f9\1\u042e\1\u024e\1\u042f\4\u024e" + - "\2\u08f9\7\u024e\3\u08f9\11\u024e\2\u08f9\2\u024e\1\u08f9\3\u024e" + - "\1\u08f9\4\u024e\1\u08f9\6\u024e\1\u08f9\3\u024e\1\u08f9\10\u024e" + - "\3\u08f9\1\u024e\2\u08f9\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u011d\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u08fa\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u08fb\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u08fc\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u04c3\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u0256" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u08fd\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u011d\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u08fe\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u08ff\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0900\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0901\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0902\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0903" + - "\42\115\1\106\10\0\3\115\1\u072e\2\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\2\115" + - "\1\u0904\2\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0262\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u0269\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u031a\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0905\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\26\115\1\u0906" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0907\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0908\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0820\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u071b\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0909\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u090a\3\115\1\u07e5\33\115\1\u058f\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u090b\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u090c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u090d" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\37\115" + - "\1\u02b5\7\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u090e\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u090f\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0910\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0911\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0912\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0913\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0914" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0915\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0916\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0917\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u038b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0918\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0919\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u091a\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u072e\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u091b\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u045f\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u091c\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u091d\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u091e\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u091f\1\u0920\1\u0921\1\u0922\1\u0923\1\u0924\1\u0925\21\115" + - "\1\u0926\1\u0927\2\115\1\u0928\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0929\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u092a\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u092b\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u08cf" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u092c" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u067a\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u092d\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u047a\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u092e\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0900\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u092f" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0930\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u06cf" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0931\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u04fc\1\u047a\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0702\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0932\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0933\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\43\115\1\u0454\3\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u0160" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0934" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u067a\1\u0935\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u06ab\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u01c8\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0936\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0937\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0362\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0718\23\115\1\u0474\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0938\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0497\17\115\1\106" + - "\10\0\1\u0939\5\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u06f9" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\4\115\1\u06b6\11\0\47\115" + - "\1\106\10\0\1\115\1\u093a\4\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u093b\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\4\115\1\u093c" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\23\115\1\u093d\23\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u093e\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u093f\3\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0940\1\115\11\0\2\115\1\u0941\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0942" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0943\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u0944\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u0459\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0945\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u02ac\1\u0946\33\115\1\u0139" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0947\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u03ab\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0948\25\115\1\u0479\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u0594\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0949" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u094a\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u094b\2\115\1\u094c\1\115\1\u094d\24\115\1\u094e\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7" + - "\4\115\1\u094f\17\115\1\u038a\1\u0950\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0341\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u06d3\27\115" + - "\1\u02f3\15\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0951\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u0139\1\115\1\u0952\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u053e\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0953" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0954" + - "\1\115\1\0\5\115\11\0\1\115\1\u01b7\1\115\1\u0955" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u010f\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u02cd\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0700\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0956\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u05d1\5\115\1\u0957\25\115\1\u0958\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u088d\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u04c8\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0959\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0894\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u0898\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0492\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0169\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u01c8\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u095a\1\115\1\0\5\115\11\0\4\115\1\u04c8" + - "\1\u057a\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u05ce\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u06d8\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u095b\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u095c\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u02ef\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u095d\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u095e\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u095f" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0960\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0961" + - "\24\115\1\u0256\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0962\1\u0963\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0964\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u02b4\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0965\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0966" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0967\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0479\30\115\1\u0479\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u055e\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0968\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0969\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u096a" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u096b" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u096c" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u096d\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u096e\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u05a7\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u096f\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0970\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0971\1\u0972\24\115" + - "\1\u0973\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0974\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0975\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0976\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u04d8\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u03f9\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0977\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0978\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0979\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u06fa" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u08a9\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u097a\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u097b\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u097c\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u097d\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u097e\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u097f\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u04fa\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0980\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u03ea\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0981\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0982\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0983\1\u0984\1\u0985\1\u0986\1\u080e" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u0987\1\115" + - "\11\0\1\u0988\1\u02c3\1\u03ab\1\u0989\1\u098a\1\115\1\u098b" + - "\21\115\1\u098c\3\115\1\u098d\1\u098e\10\115\1\u098f\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0990\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0991\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0992\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u0993" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0474\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u070e\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u071b\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0994\1\115\1\u03ea" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0995\23\115\1\u01c8\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0996\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0716\33\115\1\u04fa\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0997\26\115" + - "\1\u0998\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u08b6\1\u0999\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u099a\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u099b\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u099c\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u03ff\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0474\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u099d\1\115\1\0\5\115\11\0" + - "\3\115\1\u06fb\1\u099e\22\115\1\u071b\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u02dc\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u099f\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u09a0" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u09a1\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u09a2\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u09a3\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u09a4\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u09a5\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u09a6\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u09a7\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u09a8" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u09a9\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u09aa\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\36\115\1\u09ab\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u09ac\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u09ad\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u09ae\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u09af\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u09b0\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u09b1\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0341\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u09b2\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u09b3\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u09b4\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u048f\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u09b5" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u07b0\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u08a9\24\115\1\u09b6\5\115\1\u09b7\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u09b8\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u09b9\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u09ba\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0474\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u090b\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u09bb\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u03ff\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u09bc\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u09bd\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u09be" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u09bf\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u09c0" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u09c1" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u09c2\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u09c3\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0362\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u09c4\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u09c5\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u09c6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u09c7\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u09c8\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0369" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u01c8\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u09c9\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u09ca\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u09cb\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u09cc\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u09cd\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u09cc\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u09cd\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u09ce\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u09cf\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u09d0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u09d1\26\115\1\u09d2\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u09d3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u09d4\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u09d5\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u09d6\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u09d7\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u09d8\23\115\1\u09d9\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u09da\25\115" + - "\1\u09db\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u09dc\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u09dd\3\115\1\u048f\2\115\1\u09de\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u09df" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u09e0\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u09e1\1\115\1\u09e2\24\115\1\u09e3\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u09e4\1\115" + - "\1\u09e5\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u09e6\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u09e7\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u09e8\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u09e9\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u09ea\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0809\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u09eb\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u09ec\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u09ed\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u09ee\2\115\1\u09ef" + - "\1\u09f0\1\u099f\25\115\1\u057b\1\u09f1\1\u09f2\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u09f3\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u09f4\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u09f5\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u09f6\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u09f7\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u09f8\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u09f9\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u09fa\1\115\1\0" + - "\5\115\11\0\26\115\1\u09fb\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u09fc\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u04c8\2\115" + - "\1\0\1\106\1\u06d0\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0524" + - "\25\115\1\u02a5\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u09fd\1\u09fe\1\u07c2\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u09ff\1\u0a00" + - "\1\u0a01\1\u0a02\1\u099f\22\115\1\u0a03\2\115\1\u0a04\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0a05\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u03ff" + - "\21\115\1\u0948\1\u0a06\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0a07\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0a08\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u02f0\4\115\1\0" + - "\1\106\1\u0a09\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0a0a\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0a0b\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u072e" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0a0c\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0a0d\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u0a0e\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0a0f\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0a10\2\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u0a11\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0a12" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0a13\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0a14\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0a15\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0527\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0916\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0a16\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0a17\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0a18\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0a19\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0a1a\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a1b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0a1c\1\115\1\u09ca\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0264\32\115\1\u0a1d\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0a1e\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0264" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u02e3\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u02f1\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u02b4\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0a1f\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0a20\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0a21\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a22" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0a23\3\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0274\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\44\115\1\u07b7\2\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0a24\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0a25\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0a26\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0a27\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u06d0\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0a1a\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0a28\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0a29\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0a2a\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0a2b\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0a2c\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0a2d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0a2e\1\u0a2f\1\u0a30\1\u0a31" + - "\1\u0a32\1\115\1\0\1\106\2\115\1\0\3\115\1\u0a33" + - "\1\115\11\0\1\u0a34\1\u0a35\1\u0a36\1\u0a37\1\u0a38\1\115" + - "\1\u0978\1\u0a39\17\115\1\u02cd\1\u0a3a\3\115\1\u0a3b\1\u0a3c" + - "\2\115\1\u0a3d\5\115\1\u0a3e\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0a3f\1\u0a40\3\115\1\0" + - "\1\106\1\u0a41\1\115\1\0\3\115\1\u0a42\1\115\11\0" + - "\1\u0a43\1\u0a44\1\u0a45\1\u0a46\1\u0a47\1\u0a48\1\u0a49\21\115" + - "\1\u0a4a\1\u07b1\2\115\1\u0a4b\1\115\1\u0a4c\2\115\1\u0571" + - "\2\115\1\u0a4d\2\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0a4e\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0a4f\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u01c8\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u02b4\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0a50\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0a51\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0a52\30\115\1\u0a53\1\u0a54\2\115\1\u0a55\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0474\1\115\1\0\3\115\1\u01c8\1\115" + - "\11\0\1\u0a56\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0a57\1\u0a58\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u015a\22\115\1\u02cd" + - "\4\115\1\u0a59\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u071b\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u0490\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0a5a" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0a5b\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0a5c\1\115\1\0\5\115\11\0\26\115\1\u0a5d\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0a5e" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0a5f\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u05da" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0a60\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0a61\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0a62\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0a63\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0a64\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0a65\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0362\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0a66\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0a67\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0a68" + - "\26\115\1\u09d2\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u09d3\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0a69\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0a6a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0a6b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0a6c\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0a6d\1\u0a6e" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0a6f\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0a70\21\115\1\u0a71\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0a72\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0a73\1\u0a74\2\115" + - "\1\u048f\2\115\1\u0a75\16\115\1\u07c2\20\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0a76\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a77\2\115" + - "\1\u0a78\21\115\1\u0a79\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0a7a\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0a7b\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0a7c\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0a7d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0a7e\25\115" + - "\1\u0a7f\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0a80\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0a81\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u03d0\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0a82\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0a83\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0a84\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0a85\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0a86\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0a87" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0a88\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0a89\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0a8a\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0a8b\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0a8c\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0a8d\1\u0a8e\4\115" + - "\1\0\1\106\1\u0a8f\1\115\1\0\5\115\11\0\1\u086b" + - "\3\115\1\u0a90\1\u0a91\21\115\1\u02cd\1\115\1\u015e\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0a92\1\u0a93\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u07b7\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0a94\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0a95\21\115\1\u02f6\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0a96\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0a97\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0a98\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0a99\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0a9a\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0a9b\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u038a\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a9c" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0a9d\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0a9e\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u03f9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u0a9f\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0aa0\27\115\1\u0aa1\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0aa2\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0aa3\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0aa4" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0aa5\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0aa6\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0aa7\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0aa8\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0aa9\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0aaa\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0aab\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0aac" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0aad\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u0842\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0aae\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0aaf\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u02c0\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0ab0\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ab1\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ab2\3\115" + - "\1\u0ab3\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0ab4\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0362\1\115\11\0\3\115\1\u0ab5\1\u0ab6\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0ab7\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0ab8\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\44\115" + - "\1\u0ab9\2\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0aba\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0abb\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0abc\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0abd\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u045a\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0abe\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0abf\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0ac0\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0ac1\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0ac2\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u02a1\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0ac3\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0ac4\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0594\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0ac5\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7\24\115" + - "\1\u0ac6\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0a2b\1\u0824\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0ac7\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u0ac8\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0ac9\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0aca\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u028d\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0acb\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0acc" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0acd\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0ace\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0acf\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0ad0\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0ad1\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0ad2\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02a3\26\115" + - "\1\u02a4\15\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0ad3\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u0ad4\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0ad5\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0ad6\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0820\26\115\1\u0ac1\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0ad7" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ad8" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0ad9\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0ada\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0adb\4\115\1\u0adc\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0add\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ade" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0adf" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0838\1\u02e7\24\115\1\u0ae0\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0ae1\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0ae2\2\115\1\u07e5" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ae3" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ae4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0ae5\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u08a9\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0ae6\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0ae7\32\115\1\u0ae8\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0ae9\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0aea" + - "\1\u0aeb\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u0aec\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0aed\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0aee\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0aef\32\115\1\u0af0\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0af1" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02f6\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0af2\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0af3\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0af4\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u071b\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0af5\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0af6" + - "\1\u0af7\1\u0af8\1\u0af9\1\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0afa\1\115\11\0\1\u0afb\1\u0afc\1\u0afd\1\u0afe" + - "\1\u0aff\1\115\1\u0b00\21\115\1\u0b01\3\115\1\u0b02\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0b03\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0b04" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0495\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u04c8\2\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u036b\1\115\11\0\30\115\1\u0b05\4\115\1\u0b06" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0b07\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0b08\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u0b09\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0b0a\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0b0b\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\36\115\1\u0b0c\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0b0d\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0b0e\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0b0f\1\115\1\0\5\115\11\0\34\115\1\u0b10" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b11" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0b12\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0b13\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0b14\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0262\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0b15\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u03d6\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0b16\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0b17" + - "\3\115\1\0\1\106\2\115\1\0\3\115\1\u0b18\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0b19\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u02da\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0b1a\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0b1b\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u02e3" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u02e4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u06ca" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0b1c\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0b1d\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0b1e\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0b1f\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0b20\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0b21\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0b22\1\115\1\u0b23" + - "\2\115\1\u0b24\21\115\1\u0b25\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0b26\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0b27\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0b28\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0b29" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u02b2\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0a17\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0b2a\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0b2b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0b2c\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0490\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0b2d\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0b2e\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u03fc\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0b2f\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0b30\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0b31\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0b32\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0b33\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0b34\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0b35\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0b36" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0b37" + - "\33\115\1\u0b38\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0b39\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0b3a\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0b3b\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0b3c\5\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u0b3d\1\115\11\0\2\115\1\u0b3e" + - "\24\115\1\u09ae\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0b3f\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0b40\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0b41\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0b42\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0b43" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b44\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b45\1\u0b46" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0b47\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0b48\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0b49\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0b4a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0630\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0b4b\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b4c\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0b4d\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0611\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0b4e\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\37\115\1\u02b4\7\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0b4f\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0b50\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0b51\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0b52\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u06e3" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0b53\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0b54\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0b55\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0b56\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0b57\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b58\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b59" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0739\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u090b\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0950\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0b5a\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u045a\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u06d0\1\u045a\25\115" + - "\1\u045a\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0474\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u04ef\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0b5b\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u02f3\1\u071b\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u02f3" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b5c" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u048e\1\115\1\u0b5d\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0b5e\3\115\1\u0b5f\1\u030a\32\115\1\u0b60" + - "\6\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0b61\24\115\1\u045f\5\115\1\u04fa\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0b62\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0b63" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b64" + - "\26\115\1\u0b65\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0b66\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0b67\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0b68\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0474\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0b69\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u03d0" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u06d5\1\u01c8\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0b6a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0b6b\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0b6c\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0b6d\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0b6e\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b6f\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0b70\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0b71\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0b72\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u053e\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0b73\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0b74\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0b75\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0b76\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0b77" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0b78\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0b79\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0b6d\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u01da\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0b7a\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0b7b\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0b7c\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u0b7d" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0744\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0b7e\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0b7f\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0b80\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0b81\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0b82\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0b83\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0b84\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0b85\1\u0b86" + - "\1\u0b87\2\115\1\0\1\106\2\115\1\0\3\115\1\u0b88" + - "\1\115\11\0\1\u0b89\1\u0b8a\1\u0b8b\1\u0b8c\1\u0b8d\1\u0b8e" + - "\1\u06cb\20\115\1\u02cd\1\u0b8f\1\u0b90\15\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0b91\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b92\22\115" + - "\1\u0b93\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u0b94\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0b95\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0b96\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0b97\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u054c\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0b98\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u0b99\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0b9a" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0b9b\1\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0b9c\1\115\11\0\1\u0b9d" + - "\2\115\1\u0b9e\1\u0b9f\1\115\1\u0ba0\25\115\1\u09ef\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0ba1" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u06e3\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0ba2\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u06ca\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0ba3\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0ba4\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0ba5\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0ba6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0ba7\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0ba8\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u07b8\30\115\1\u057b" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u0ba9\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0baa\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0bab\4\115\1\u0bac\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0b9c\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0908\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0459\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0bad\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u056b\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0bae\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0baf\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0bb0\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0bb1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0bb2\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0bb3" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\11\0\6\235\1\0\5\235\3\0\2\235\1\u0bb4\3\235" + - "\5\0\5\235\11\0\47\235\2\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\1\u0207\46\44" + - "\1\u0207\32\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\13\44\1\70\53\44\1\70\12\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\17\44\1\u0bb5\11\44\1\u0bb5\50\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\17\44" + - "\1\u0230\11\44\1\u0230\50\44\1\0\1\44\1\0\2\44" + - "\2\0\6\44\1\0\6\44\2\0\1\u0bb6\46\44\1\u0bb6" + - "\32\44\1\0\1\44\1\0\2\44\2\0\6\44\1\0" + - "\6\44\2\0\17\44\1\u064a\11\44\1\u064a\50\44\1\0" + - "\1\44\1\0\2\44\2\0\6\44\1\0\6\44\2\0" + - "\42\44\1\251\15\44\1\251\21\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\42\44\1\u0234" + - "\15\44\1\u0234\21\44\1\0\1\44\1\0\2\44\2\0" + - "\6\44\1\0\6\44\2\0\45\44\1\u0bb7\20\44\1\u0bb7" + - "\13\44\1\0\1\44\1\0\2\44\2\0\3\44\1\342" + - "\2\44\1\0\6\44\2\0\36\44\1\342\41\44\15\0" + - "\1\u0bb8\51\0\1\u0bb8\40\0\1\106\10\0\1\106\1\115" + - "\4\106\1\0\1\106\4\115\1\106\2\0\4\106\2\115" + - "\1\0\3\106\1\0\2\106\3\115\11\0\2\115\2\106" + - "\1\115\3\106\1\115\4\106\1\115\6\106\1\115\3\106" + - "\1\115\10\106\3\115\1\106\2\115\2\u0249\1\0\7\u0249" + - "\1\366\6\u0249\4\366\1\u0249\1\371\5\u0249\2\366\7\u0249" + - "\3\366\11\u0249\2\366\2\u0249\1\366\3\u0249\1\366\4\u0249" + - "\1\366\6\u0249\1\366\3\u0249\1\366\10\u0249\3\366\1\u0249" + - "\2\366\2\u024e\1\0\7\u024e\1\123\6\u024e\4\123\1\u042e" + - "\1\u024e\1\u042f\4\u024e\2\123\7\u024e\3\123\11\u024e\2\123" + - "\2\u024e\1\123\3\u024e\1\123\4\u024e\1\123\6\u024e\1\123" + - "\3\u024e\1\123\10\u024e\3\123\1\u024e\2\123\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0bb9\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u043a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0663\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u031a" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0bba\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0262\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0bbb\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0257\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0bbc\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0bbd\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0791\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0bbe\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u06d0\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\44\115\1\u02f3\2\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0832\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0bbf\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0bc0\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u02fc\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0bc1\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0bc2\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u09c4\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0bc3\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0bc4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0bc5\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0bc6\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0bc7\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0bc8\1\115\1\0\5\115\11\0\1\115\1\u0bc9\2\115" + - "\1\u097d\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0bca\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0bcb\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0bcc\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0bcd\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0bce\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0bcf\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0bd0\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0bd1\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0bd2\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0bd3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0bd4\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0bd5\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0bd6\1\u0bd7\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0bd8\24\115\1\u0bd9\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0bda\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0bdb" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0bdc\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0bdd\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0bde\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0bdf\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0be0\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u047a\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u0be1\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u071b\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0be2" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u012f" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u03cd\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0be3\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0be4\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0be5\2\115\1\u0be6\1\u0be7" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u0be8\1\115" + - "\11\0\2\115\1\u0be9\1\u0bea\1\u0beb\2\115\1\u0bec\20\115" + - "\1\u0bed\2\115\1\u057b\1\115\1\u0bee\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0bef\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0bf0\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u02a9" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0bf1" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0bf2\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0691\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0bf3\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\1\u06b6\5\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\5\115\1\u0bf4" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0bf5\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\1\u0bf6" + - "\5\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\11\115\1\u0bf7\35\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u011d\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u0bf8\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0884\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0bf9\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0bfa" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0bfb\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0bfc" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0bfd\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u0bfe\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0bff\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0341\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0c00\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u01f6\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0c01\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0c02\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u02b4" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\37\115" + - "\1\u02b4\7\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0c03\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u02a5\4\115\1\u0160\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u04fa\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0c04\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u045f" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0c05\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c06\4\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0c07\1\115\11\0\1\115\1\u0c08\25\115\1\u0556\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0c09" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u03d6\1\u0473\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0c0a\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0c0a\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0c0b\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0c0c\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0524\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u071b\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0c0d\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u05d8\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u0c0e" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0c0f\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u049a\1\115\1\0\5\115\11\0" + - "\3\115\1\u0c10\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0c11\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0c12\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0c13\5\115\1\u0c14\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0c15\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0c16" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0af0\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0c17\1\u0c18\4\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0c19\1\115\11\0\3\115\1\u0c1a\1\u0c1b\1\u0c1c" + - "\1\u0c1d\17\115\1\u0c1e\1\115\1\u0c1f\1\u0c20\1\115\1\u0c21" + - "\1\115\1\u0c22\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0c23\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0c24\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0c25\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0c26\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0c27\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0c28\1\115\1\0" + - "\5\115\11\0\4\115\1\u097d\23\115\1\u0c29\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0c2a\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0c2b" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0c2c" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0c2d\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u055a\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0c2e\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0c2f\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0c30\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0c31\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0462\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0793\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0c32" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0c33\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u0c34\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u04df\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u0c35\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0c36\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0c37\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0c38\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0c39" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0c3a\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0c3b\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0c3c\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0c3d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\42\115\1\u0c3e\4\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0c3f\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0c40\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0c41" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c42\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0c43\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0c44\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0c45\1\u0c46\25\115\1\u028d" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u02e7\24\115\1\u0c47\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0c48\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0c49\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u07e6\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0c4a\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0c4b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\46\115\1\u0c4c" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0c4d\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0c4e\1\115\1\0\5\115\11\0" + - "\5\115\1\u0c4f\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0c50\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u05cd\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0c51\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0c52\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0711\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0c53" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0c54\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u033a\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0c55\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0c56\1\115\1\0" + - "\5\115\11\0\35\115\1\u0c57\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0c58\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0c59\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u06fb\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u053e" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0c5a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u01c8" + - "\4\115\1\u0362\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0c5b\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u09b3\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0c5c\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0c5d\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u067b" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u0c5e" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0c5f\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0c60\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0c61\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0c62\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0c63\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0c64\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0c65" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0c66" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u03e1\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u095b\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0c67\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0c68\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0c69\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0978\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0c6a\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0c6b\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0c6c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0c6d" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u0c6e\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0c6f\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0c70\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0c71\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0c72\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u080c\1\115\1\u0c73\2\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0c74\1\115\11\0" + - "\1\u0c75\1\u0584\1\115\1\u0c76\1\u0c77\23\115\1\u0c78\7\115" + - "\1\u058f\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0c79\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0c7a\32\115\1\u0c7b\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\40\115\1\u0c7c\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\40\115\1\u058f\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0c7d" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c7e\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u0c7f\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0c80\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0c81\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u06bf\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0c82\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0c83\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0c84" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0c85\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02ca\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u06cf\1\u015a\22\115\1\u02cd\1\u05d2\1\u015e" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0c86\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0c87\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0c88\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u03d0\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0c89\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0c8a\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\36\115\1\u0c8b\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0c8c" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u0c8d" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0c8e\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0c8f\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u0c90\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0c91\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0c92\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0c93\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0c94\25\115" + - "\1\u0c95\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0c96\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0c97\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0c98\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0c99\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0c9a\1\u0c9b\2\115" + - "\1\u0c9c\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0c9d\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0c9e\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0c9f\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0ca0\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0ca1\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0ca2\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0ca3\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u045a\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0ca4\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0ca5\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0ca6\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u0594\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0ca7\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u02e7\24\115\1\u0ca8\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0ca9\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0caa\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0cab\3\115" + - "\1\0\1\106\1\u0cac\1\115\1\0\5\115\11\0\1\u0cad" + - "\1\u0cae\2\115\1\u0caf\1\115\1\u0cb0\21\115\1\u0cb1\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0cb2" + - "\22\115\1\u0cb3\4\115\1\u0cb4\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0907" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0cb5\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u0cb6\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0cb7\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0cb8\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u05d1" + - "\4\115\1\u0cb9\1\u0cba\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0cbb\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0cbc" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0cbd\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0cbe\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u090b\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u02f3\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0cbf\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0cc0\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u02ae\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0cc1\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u07e6\26\115\1\u0cc2\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u045a\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0a52\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0cc3\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u04b4\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0cc4\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0cc5\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0877\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0cc6\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0cc7\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0cc8" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0983" + - "\3\115\1\u080e\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0cc9\2\115\1\u0cca\33\115\1\u058f\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ccb" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0ccc\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0ccd\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0cce\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u035b\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0ccf\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0462\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0cd0" + - "\1\115\1\0\1\106\1\u0cd1\1\115\1\0\5\115\11\0" + - "\1\115\1\u0cd2\2\115\1\u0cd3\23\115\1\u0cd4\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0cd5\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0739\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0cd6\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0cd7\1\u0cd8\1\u0cd9\1\u0cda\1\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0cdb\1\115\11\0\1\u0cdc" + - "\1\u0cdd\1\115\1\u0cde\1\u0cdf\1\115\1\u0ce0\21\115\1\u0ce1" + - "\1\u0ce2\2\115\1\u0ce3\1\u0ce4\2\115\1\u058f\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0a24\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0ce5" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u01c8\25\115\1\u0a1a\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0ce6\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0ce7\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0ce8\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0ce9\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0cea\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a1a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ceb" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u02ae\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0cec\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u079f\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0ced\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0cee\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0cef\30\115\1\u0cf0\1\u0cf1\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0c80\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02f6\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u035b" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0cf2\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0cf3\1\u0cf4\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u02f3\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0cf5\1\115\11\0\1\u0cf6" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0cf7\1\115\1\u0cf8\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0cf9\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0cfa\3\115\1\u0cfb\21\115\1\u0cfc" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0cfd" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0cfe\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0cff\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0d00\3\115\1\u0d01\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d02\1\115" + - "\1\u0d03\1\115\1\u0d04\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0d05\1\115\1\u0cc0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0d06\3\115\1\u0d07" + - "\22\115\1\u028d\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0d08\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0d09\4\115\1\u0d0a\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d0b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d0c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d0d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d0e" + - "\1\115\1\u0d0f\1\115\1\u0d10\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0d11\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u053e\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0d12\26\115\1\u09d2" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0d13\1\u0d14\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u0bf8\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0d15\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0d16\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0d17" + - "\21\115\1\u0d18\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0d19\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u06a9\1\115\1\u0d1a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0d1b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0d1c\3\115\1\u0cc2\21\115\1\u0d1d\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0d1e\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d1f\1\u0d20" + - "\30\115\1\u01c8\3\115\1\u01c8\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0d21\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0d22\17\115" + - "\1\u0d23\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0d24\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0d25\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u038b\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d26\1\115" + - "\1\u0d27\23\115\1\u0d28\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0d29\1\u0d2a\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0d2b\3\115\1\u0169\22\115" + - "\1\u0d2c\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u045f\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u068c\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u04c8\2\115\1\0\1\106" + - "\1\u0d2d\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0d2e\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0d2f\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u08b6\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0331" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d30" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0d31\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0d32\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0d33\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0a83\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0d34\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0d35\1\u099f\1\u0d36\24\115\1\u057b\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u06d0\1\115\1\0\5\115\11\0\3\115" + - "\1\u01c8\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0d37\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0718\1\115\1\u0d38\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0d39\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0d3a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0d3b\1\115\11\0" + - "\1\u06bf\1\u0d3c\1\115\1\u0d3d\25\115\1\u0d3e\2\115\1\u0d3f" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u0d40\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0d41\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0d42\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0d43\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0d44\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0d45\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0977\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u02ac\1\115" + - "\1\u0d46\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0d47\2\115\1\u0d48\1\u0d49\1\u0d4a\20\115\1\u0d4b\5\115" + - "\1\u0d4c\1\u0d4d\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0cd5\1\u0341\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\31\115\1\u01c8\15\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u0d4e\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0d4f" + - "\1\u0d50\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0d51\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0d52\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0d53\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0d54\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0d55\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0d56" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d57" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0d58\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0d59\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u02b4\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0d5a\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0a7f\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u04fa\21\115\1\u0d5b" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0d5c\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0d5d\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0d5e\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0d5f\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0d60\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0d61\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0d62\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u0d56\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u07d2\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0d63\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0d64\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u02b4\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0699\4\115\1\0\1\106\1\u0d65" + - "\1\115\1\0\3\115\1\u0d66\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0d67\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0d68\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0d69" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0d6a\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0d6b\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0d6c\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0d6d\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0d6e\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0345\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0d6f\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0a8d\1\u0d70\1\u03d4\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u086b\2\115" + - "\1\u03d6\1\u0a90\1\u0a91\21\115\1\u02cd\1\115\1\u015e\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0d71\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u02e7\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0b2c\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0d72\1\115" + - "\1\0\5\115\11\0\4\115\1\u0d73\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0744\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0d74\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d75\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0d76\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u0a99\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u0d77\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0d78\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u028d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0d79" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0d7a\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u04b4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0d7b\1\115\1\0\5\115\11\0\2\115\1\u0d7c\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d7d" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0d7e\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0d7f\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0d80\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u02f7\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0d81\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0d82\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0d83\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0d84\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0d85\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0d86" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0d87" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0d88\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0d89\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0457\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0842\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0d8a\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0d8b\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0d8c\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0d8d" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0d8e" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0d8f\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0d90\3\115\1\u0d91\23\115\1\u0c00\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0d92\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0b03\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0d93\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0d94\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u035b\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0d95\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0d96\3\115\1\u0d97\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0d98\1\u0d99\1\u0369\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d9a\1\115" + - "\1\u0d9b\1\u0d9c\1\115\1\u0d9d\20\115\1\u0d9e\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0d9f\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0da0" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0da1\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u02a3\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0da2\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0da3\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0da4\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u0ae8\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0da5\32\115\1\u0da6" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0da7\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u081d\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0da8\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0da9\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u03ff\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0daa\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0dab\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0dac\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0dad\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0dae\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0daf\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u05d1\2\115\1\u0479\30\115\1\u0479\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0db0\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0db1\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0db2\23\115" + - "\1\u0db3\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0462\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0db4\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0db5\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\31\115\1\u0db6\15\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0db7\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0db8\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0db9" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0dba\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0dbb\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0dbc\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0dbd\1\u0dbe\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0577\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u0af0\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0dbf" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02f6\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0dc0\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0dc1\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0dc2\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0dc3\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0dc4\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0dc5\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0dc6\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0dc7\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u0dc8\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0dc9\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0dca\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0dcb\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0dcc\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0dcd\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0dce\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u053e\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0dcf\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0dd0" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0dd1\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0dd2\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0dd3\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0dd4\26\115\1\u0ac1\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0dd5\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0ad7\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0dd6\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0dd7" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c40\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0dd8\4\115\1\u0dd9\21\115\1\u0dda\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u07fa" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\36\115" + - "\1\u0ddb\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u016e\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0ddc\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0ddd\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0dde\5\115\1\u0ddf\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0de0\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0de1" + - "\24\115\1\u0de2\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0de3\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u07e5\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0de4\25\115\1\u01c8" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0de5" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0de6\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0de7\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0de8\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u045f\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0511\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0de9\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0dea\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0deb\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u07d2\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0dec" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0b0c" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0611\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u0ded\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0dee\30\115\1\u0def\7\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0df0\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0df1\1\115\1\0\5\115\11\0\30\115\1\u01c8" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0df2" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0c29\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u06f8\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0df3\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0df4\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0df5\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0df6\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0c31\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0df7\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0df8" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0df9\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0dfa\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0dfb\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0dfc\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0dfd\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u04fa\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0dfe\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0dff\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0e00\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e01\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0e02" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0362\2\115\1\0" + - "\1\106\1\u049a\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0e03\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0e04\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0e05\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0e06\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0136\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0e07\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0e08\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0e09\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0e0a\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0e0b\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e0c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e0d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0e0e" + - "\34\115\1\u0e0f\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u095b\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0e10\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e11\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0e12\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e13\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0e14\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0e15\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0e16\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0c85\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0e17\3\115\1\u0e18\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0e19\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e1a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u0e1b" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0e1c\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\44\115\1\u0e1d\2\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0e1e\1\115\11\0\4\115\1\u0e1f\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e20\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u0e21\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0489" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e22" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0e23\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0e24\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0e25\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0e26\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0e27\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u0e28\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0e29\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0e2a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0e2b\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0e2c\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0e2d\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0e2e\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u071b\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u03b7\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0e2f\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u06f8\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0e30\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u0160\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0e31\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u0e32\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u06ca\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0a3e\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0e33\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e34" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0a3e\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u06ca\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0341\25\115\1\u0a99\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0e35\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e36" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u02a4" + - "\22\115\1\u0e37\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0e38\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0e39\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0e3a\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0e3b\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e3c" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e3d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u0e3e" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0e3f\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0e40\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0e41\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0e42\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u070d\1\u0e43\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u02f0" + - "\1\115\1\u0948\1\u0e44\1\u070e\22\115\1\u0608\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0e45\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0e46" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e47" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u0e48\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0e49\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0e4a\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0e4b\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e4c\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0cc2\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u0e4d\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0e4e\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\40\115\1\u0e4f\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0e50" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0e51\30\115\1\u0e52\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0b83\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0e53\1\u02f3\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e53" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0e54\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e55\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u0e56" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e57" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e58" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u0e59\2\115\1\u0cff\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0e5a\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0e5b\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e5c\1\u0e5d" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0e5e\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u02e7\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0e5f\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0e60\1\u0e61\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e62\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0e63\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0e64\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0e65\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0e66\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0473\21\115" + - "\1\u0e67\5\115\1\u0e68\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0e69\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0e6a\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0745\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0e6b\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e6c" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u03ab\1\u0e6d\30\115\1\u0479\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0e6e\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e6f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0ca6" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e70\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0d71\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0e71\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0e72\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0e73\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0ba2\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e74\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0e75" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0e76\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e77\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0e78" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0e79\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e7a" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0e7b\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0e7c\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0e7d\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0e7e\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0e7f\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0e80\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0e81\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u0e82\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0e83\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u02ac\37\115\2\44" + - "\1\0\1\44\1\0\2\44\2\0\6\44\1\0\6\44" + - "\2\0\13\44\1\u021f\53\44\1\u021f\12\44\1\0\1\44" + - "\1\0\2\44\2\0\6\44\1\0\6\44\2\0\42\44" + - "\1\253\15\44\1\253\21\44\1\0\1\44\1\0\2\44" + - "\2\0\4\44\1\u0e84\1\44\1\0\6\44\2\0\37\44" + - "\1\u0e84\40\44\16\0\1\u0e85\13\0\1\u0e85\75\0\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u031a" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0e86\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0262\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0e87\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0171\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0e88\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0e89\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0e8a\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0e8b\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0e8c\25\115\1\u01c8" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0e8d\4\115\1\u0e8e\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0e8f\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u036b\1\115\11\0\3\115\1\u06b0\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0e90\1\115\1\0\5\115\11\0\4\115\1\u097d" + - "\23\115\1\u0c29\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0e91\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0728\2\115\1\u097d\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0e92" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0e93\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0e94\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u02b4\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0e95\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0e96\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0679\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u01f6\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0e97" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0e98\2\115\1\u0e99\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0e9a\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0e9b\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0e9c\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0e9d\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0e9e\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0e9f\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0ea0\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0ea1\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0ea2"; + private static final String ZZ_TRANS_PACKED_1 = + "\12\u05a5\1\0\7\u05a5\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\2\141\1\u0816\1\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\2\141\1\u0817\3\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0818\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0819\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u081a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\1\141"+ + "\1\u081b\7\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\3\141\1\u081c\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\1\141\1\u081d\10\141"+ + "\1\0\7\141\1\132\10\0\5\141\1\u081e\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0383\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u06f1"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u06f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0820\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u04c5\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0754\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0821\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0822\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0823"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0824"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0400"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0169"+ + "\1\u043e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0825\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0826\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u07d3"+ + "\11\141\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0828\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0829\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u082a\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u082b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u082c\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u082d\6\141\1\u082e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u082f\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u05d2\15\141\1\u0830\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0831\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0832\7\141\1\u0833\3\141\1\u0834"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0835"+ + "\6\141\1\u0836\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0837\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0838\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u04f9\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0839\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u083a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u05d8\15\141\1\u083b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u044f\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u083c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u083d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0269\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0400\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u083e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u083f\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0840\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0841\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0842\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0269\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03d4\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0843\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0844\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0845\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0846\2\141\1\u0847\1\141\1\u060f\2\141\1\u0848\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0849\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u084a\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u084b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0840\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u084c\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u084d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u084e\15\141\1\u084f\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0830\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0850\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0687\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0679\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0851\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u03e4\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u05ea\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0852\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0853\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0854\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0855\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0856\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0857\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0858\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0859\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u085a\4\141\1\u085b"+ + "\2\141\1\u085c\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u085d\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u085e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u085f\10\141\1\u0860\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0861\5\141\1\u0862\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0863\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0864\1\141\1\u0865\15\141"+ + "\1\u0866\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0867\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0868\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0869\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u086a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u086b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u086c\2\141"+ + "\1\u086d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u086e\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u086f\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0870"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0871\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0872\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0873\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03a8"+ + "\17\141\1\u0874\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u03d4\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0875\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0876\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0877"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0878\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0480"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0879"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087a"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u087b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u044f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0606"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u087c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u087d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087e"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0269"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u087f"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0880\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u0881\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u04f9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0882\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0396\1\141\1\u0883\3\141\1\u0884\5\141\1\u03c1"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0885"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0886"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0887"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0888"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0889"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u088a"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u088b"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u088c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u088d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u088e\2\141"+ + "\1\u04c5\2\141\1\u0208\3\141\1\u0464\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u01c6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u088f\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u069a\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u038d\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0890\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0891\3\141\1\u0892\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0169\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0893\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0894\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0895\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0896\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0632\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0897\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0898\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0899\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u089a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0169\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u089b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0181\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u018f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u089c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u089d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0749\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u089e\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d9\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\5\141\1\u0269"+ + "\1\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u089f\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u08a0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a1\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u08a3\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u08a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08a5\1\u0679\1\u0687\3\141\1\u0679\1\141\1\u08a6"+ + "\1\141\1\u0679\1\u06e5\2\141\1\u08a7\3\141\1\u08a8\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u060b\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u08a9\1\141"+ + "\1\u08aa\1\u08ab\1\u08ac\1\u08ad\1\u08ae\1\u08af\1\141\1\u08b0"+ + "\1\u08b1\1\u08b2\4\141\1\u0753\1\u08b3\3\141\1\u08b4\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08b5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u05b2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u08b6\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u08b7\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u08b8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u01fa\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u08b9\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08ba\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08bb\1\141\1\u08bc\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03d2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u032c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0269\1\141\1\u08bd"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08be"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u08bf"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u08c0\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08c1"+ + "\3\141\1\u08c2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0269\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u0269\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u08c3\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u08c4\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u08c5\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08c6\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08c7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u070e\10\141\1\u08c8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u08c9\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u08ca\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0262\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u08cb\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0832\4\141\1\u08cc\5\141\1\u0318\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08cd\5\141"+ + "\1\u08ce\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u08cf\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u08d0\3\141\1\u08d1\1\u08d2\1\u08d3\1\u08d4\5\141\1\u08d5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08d6"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08d7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u08d8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08d9"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u08da"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u08db"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u08dc"+ + "\7\141\1\u041e\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08dd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\5\141\1\u0269"+ + "\3\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0269\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\u08de\6\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u08df\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u08e0\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u08e1"+ + "\3\141\1\u08e2\2\141\1\u0465\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u08e3\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08e4\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08e5\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u01fa\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u08e6\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0894\2\141\1\u08e7\4\141\1\u08e8\6\141\1\u08e9"+ + "\2\141\1\u06b7\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u08ea\11\141\1\u08eb\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0269\12\141\1\u08ec\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08ed\3\141\1\u06b5\5\141"+ + "\1\u08ee\7\141\1\u08ef\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u08f0\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03c0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05d8\17\141\1\u04f9\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u05d1\4\141\1\u08f1\1\141"+ + "\1\u08f2\4\141\1\u05d8\1\u0262\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u08f3\3\141\1\u08f4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03c0\6\141\1\u08f5"+ + "\4\141\1\u08f6\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08f7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0187\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u08f8\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u08f9\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u08fa\2\141\1\u08fb\4\141\1\u060f\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u08fc\1\u08fd\1\u08fe\1\141"+ + "\1\u08ff\1\u0900\1\u0901\1\u0902\2\141\1\u0903\1\141\1\u0904"+ + "\1\141\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0905\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0906\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u01ea\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0907\5\141\1\u0908\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0909\12\141\1\u090a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u090b\7\141\1\u08cb\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u090c\3\141\1\u090d"+ + "\11\141\1\u090e\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u090f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0910\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0911\7\141\1\u0912\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0913\6\141\1\u0914\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u044f\3\141\1\u0915\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0916\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0917\3\141\1\u0918"+ + "\11\141\1\u0919\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u091a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u091b\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u091c\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u091d\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u091e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u091f\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0920"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u060f"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0921"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0922"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0923"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u03c6"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0924"+ + "\2\141\1\u0925\4\141\1\u0926\5\141\1\u0927\1\u0928\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0929\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u092a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u092b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0748\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u092c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u092d\1\u092e\1\u092f"+ + "\1\u0930\1\u0931\1\u0932\1\u0933\1\u0934\1\141\1\u0935\1\u0936"+ + "\1\u0937\1\141\1\u0938\2\141\1\u0939\1\u093a\1\141\1\u093b"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u093c\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0921\1\141\1\u0921"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u093d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u093e\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u093f\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0940\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u04ce\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0941\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0942\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0943\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0944"+ + "\1\141\1\u0945\5\141\1\u0946\7\141\1\u0947\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0748\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0948\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0949\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\1\141\1\u094a"+ + "\5\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0269\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u03c6\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u05d1\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0269\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u094b\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0392\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u094c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u094d\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u08e1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u090a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u094e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u094f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0950"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\u0269\6\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u06ee\1\141\1\u0951"+ + "\2\141\1\u0952\13\141\1\u0953\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0954\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0955\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0956\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0957\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0958\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0959\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u095a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u095b\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u095c\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u095d\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u095e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u095f\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0960\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u044f\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u07e0"+ + "\3\141\1\u090a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0961\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0962\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0963\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0964\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0965\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0966\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0967\1\u045b\1\141\1\u0968\1\141\1\u0639\1\u0969\1\u096a"+ + "\1\u096b\1\141\1\u096c\1\u096d\1\u088f\1\u096e\1\u05d8\2\141"+ + "\1\u096f\1\u0970\2\141\1\u0971\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0972\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0973\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0974\1\u0975\1\141\1\u0976"+ + "\1\u0977\1\141\1\u0978\1\u0979\1\u097a\1\u097b\1\u097c\1\141"+ + "\1\u097d\1\u097e\1\u097f\2\141\1\u0980\1\u0981\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0982\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0983\1\u0984\11\141"+ + "\1\u0985\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u03c0\1\141\1\u0986\16\141\1\u0987\1\141\1\u0988\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0989\3\141\1\u05ce"+ + "\16\141\1\u01ea\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u098a\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u098b\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u098c\4\141\1\u06b5\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u098d\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u098e\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u098f\4\141\1\u0990\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0991\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0992\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0993\1\141\1\u0994\1\141\1\u0995"+ + "\10\141\1\u0996\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0910\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03c0"+ + "\1\u0945\11\141\1\u0997\1\141\1\u0392\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0998\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0999\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0915\11\141\1\u099a\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u099b\2\141"+ + "\1\u044f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u099c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0918"+ + "\1\141\1\u05d9\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u099d\1\u099e\1\141\1\u099f\7\141\1\u09a0\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09a1\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u09a2\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u09a3\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0392\10\141"+ + "\1\u09a4\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u09a5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u020c\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u08f6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u09a6\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u09a7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u09a8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u09a9\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u09aa\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09ab\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09ac\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09ad\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0393\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u09ae\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u04ae\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u09af\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u09b0"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u09b1\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u09b2\3\141\1\u09b3\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u09b4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09b5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09b6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0945\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u09b7\3\141\1\u09b8\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u09b9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u09ba\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u09bb\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u09bc\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u09bd\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u09be\4\141\1\u01d4\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u09bf\7\141\1\u09c0\5\141"+ + "\1\u0269\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u09c1\15\141\1\u09c2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c3\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c4\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0408\1\141\1\u09c5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\5\141\1\u09c6\1\u09c7"+ + "\3\141\1\u0269\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09c8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09c9\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u09ca\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u09cb\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u03a8\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u09cc\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09cd\11\141\1\u09ce\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u09cf\11\141\1\u09d0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u09d1\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u09d2\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u09d3\1\u09d4\1\u09d5\1\141\1\u09d6\1\141\1\u09a4"+ + "\1\u09d7\1\u09d8\1\u09d9\1\141\1\u0464\2\141\1\u03a8\1\u09da"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u023a"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u09dc"+ + "\10\141\1\u09dd\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09de\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u09df\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u09e0"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u09e1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u09e2"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09e3"+ + "\22\141\1\0\4\141\1\132\4\0\11\141\1\u09e4\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u09e5\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u09e6"+ + "\2\141\1\u09e7\1\u072a\1\u09e8\1\141\1\u09e9\1\u09ea\1\u09eb"+ + "\1\u09ec\1\141\1\u09ed\4\141\1\u09ee\1\u09ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u09f0\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u09f1\11\141\1\u09f2"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u09f3"+ + "\21\141\1\u09f4\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u09f5\1\u09f6\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u09f7\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u09f8\1\141\1\u09f9\1\141\1\u09fa\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u09fb\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u09fc\1\u09fd\6\141"+ + "\1\u09fe\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u09ff"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a00\2\141\1\u0a01\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0a02\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a03\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a04\1\u0a01\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0a05\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a06\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0a07\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u06ab\1\u0a08\10\141\1\u03c1\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0a09\3\141\1\u0a0a"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a0b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0a0c"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0a0d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0a0e\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0750\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0a0f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0a10\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0a11\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a12\1\u0461"+ + "\1\141\1\u0a13\2\141\1\u0a14\1\141\1\u0208\3\141\1\u0464"+ + "\1\u020c\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a15\2\141\1\u0a16\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0a17\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0a18\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0a19\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0a1a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0a1b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a1c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a1d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u044f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u06b7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a1e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0a1f"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a20\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0a21\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a22\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0a23\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a24"+ + "\3\141\1\u064e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a25\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a26\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u044f\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0a27\1\u0a28\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0a29\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0a2a\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0a2b\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a2c\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0a2d\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u06b5\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0a2e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0a2f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a1d"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0a30\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a31\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0a32\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0a33\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a34\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0a35\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a36\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a37\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a38\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0a39\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a3a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0a3b\5\141"+ + "\1\u0a3c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a3d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u047b\1\u0a3e\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a3f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0a40\4\141\1\u0a41\3\141\1\u0a42\10\141\1\u0705"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a43\2\141"+ + "\1\u0a44\1\u0a45\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0a46\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0a47\7\141\1\u0a48\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0a49\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0a4a\4\141\1\u0a4b\1\u0a4c\6\141"+ + "\1\u0a4d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0a4e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a4f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0754\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u06fe\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a26\4\141"+ + "\1\u03ce\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a50"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0830"+ + "\5\141\1\u0a51\3\141\1\u09d0\3\141\1\u0386\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0a52\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0a53\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u03ce\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0a54\6\141\1\u0a55\1\u0a56\1\141\1\u0a57"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a58"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0a59"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a5a\1\u0a5b"+ + "\1\u0a5c\1\u0a5d\1\u0a5e\1\u0a5f\1\u0a60\1\u0a61\1\u0a62\1\u0a63"+ + "\1\u0a64\1\u0a65\1\u0a66\1\141\1\u0a67\2\141\1\u0753\1\u0a68"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a69"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a6a"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a6b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0a6c"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0174\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0a6d\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0a6e\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0a6f\14\141\1\u0a70\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0a71\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08bb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0a72\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0a73\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0a74\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a75\3\141"+ + "\1\u0a76\2\141\1\u0a77\6\141\1\u0a78\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0a79\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0a7a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u0a7b\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0a7c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a7d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0a7e\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0a7f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a80\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\1\132\1\u0a81\4\132\1\0"+ + "\2\132\1\u0a81\1\132\4\u0a81\1\132\1\0\1\132\1\0"+ + "\3\132\1\0\1\132\1\u0a81\14\0\4\132\3\u0a81\2\132"+ + "\2\u0a81\6\132\1\u0a81\5\132\1\0\1\132\2\u0a81\2\132"+ + "\4\0\7\132\1\u0a81\2\132\1\0\3\u0a81\1\132\3\u0a81"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0461"+ + "\1\u0a82\5\141\1\u0208\3\141\1\u0464\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0a83\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a84\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a85\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u08b6\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0a86\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0a87"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0a88\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0a89"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a8a\5\141\1\u0a8b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\3\141\1\u0a8c\3\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u0a8d\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\20\0\1\u0a8e\60\0"+ + "\1\u0a8e\120\0\1\u0a8f\137\0\1\u07b0\143\0\1\u0a90\146\0"+ + "\1\u0a91\127\0\1\u0a92\147\0\1\u0a93\137\0\1\u07ab\104\0"+ + "\1\u0a94\164\0\1\u0a95\160\0\1\u07af\122\0\1\u0a96\151\0"+ + "\1\u07af\137\0\1\u0a97\101\0\1\u0a98\171\0\1\u0a99\157\0"+ + "\1\u0a96\115\0\1\u0a9a\156\0\1\u0a9b\55\0\4\u0105\1\u0a9c"+ + "\1\u0105\1\0\10\u0105\2\0\1\u0105\5\0\2\u0105\14\0"+ + "\22\u0105\1\u0a9c\4\u0105\1\0\4\u0105\5\0\12\u0105\1\0"+ + "\7\u0105\11\0\6\u0105\1\0\2\u0105\1\u0a9d\5\u0105\2\0"+ + "\1\u0105\5\0\2\u0105\14\0\4\u0105\1\u0a9d\22\u0105\1\0"+ + "\4\u0105\5\0\12\u0105\1\0\7\u0105\10\0\1\u0518\130\0"+ + "\2\67\1\0\1\67\1\0\2\67\2\0\1\114\5\67"+ + "\1\0\26\67\1\0\17\67\1\114\27\67\1\0\24\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\26\67"+ + "\1\0\25\67\1\u0a9e\21\67\1\0\1\u0a9e\23\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\26\67\1\0"+ + "\23\67\1\u02ee\16\67\1\u02ee\4\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\6\67\1\0\2\67\1\u0a9f"+ + "\23\67\1\0\13\67\1\u0a9f\33\67\1\0\24\67\1\0"+ + "\1\67\1\0\2\67\2\0\5\67\1\u0aa0\1\0\26\67"+ + "\1\0\11\67\1\u0aa0\35\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\2\67\1\u0aa1\3\67\1\0\26\67"+ + "\1\0\12\67\1\u0aa1\34\67\1\0\24\67\1\0\1\67"+ + "\1\0\2\67\2\0\1\u0aa2\5\67\1\0\26\67\1\0"+ + "\17\67\1\u0aa2\27\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\35\67\1\u0aa3"+ + "\11\67\1\0\4\67\1\u0aa3\17\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\25\67\1\u07bc"+ + "\21\67\1\0\1\u07bc\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\1\67\1\u07ba\24\67\1\0\16\67"+ + "\1\u07ba\30\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u0aa4\23\67\1\0\13\67"+ + "\1\u0aa4\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u0146\2\67\1\0\26\67\1\0\7\67"+ + "\1\u0146\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\2\67\1\u0aa5\3\67\1\0\26\67\1\0\12\67"+ + "\1\u0aa5\34\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\67\1\u0aa6\4\67\1\0\26\67\1\0\21\67"+ + "\1\u0aa6\25\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\2\67\1\u02c8\23\67\1\0\13\67"+ + "\1\u02c8\33\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\1\u0537\5\67\1\0\26\67\1\0\17\67\1\u0537"+ + "\27\67\1\0\24\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\1\u02ed\25\67\1\0\32\67\1\u02ed\14\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\1\u07ba"+ + "\5\67\1\0\26\67\1\0\17\67\1\u07ba\27\67\1\0"+ + "\24\67\1\0\1\67\1\0\2\67\2\0\6\67\1\0"+ + "\26\67\1\0\10\67\1\u0aa7\36\67\1\0\1\67\1\u0aa7"+ + "\20\67\14\0\1\u0aa8\41\0\1\u0aa8\62\0\1\132\10\0"+ + "\1\132\1\u0aa9\4\132\1\0\2\132\1\u0aa9\1\132\4\u0aa9"+ + "\1\132\1\0\1\132\1\0\3\132\1\0\1\132\1\u0aa9"+ + "\14\0\4\132\3\u0aa9\2\132\2\u0aa9\6\132\1\u0aa9\5\132"+ + "\1\0\1\132\2\u0aa9\2\132\4\0\7\132\1\u0aa9\2\132"+ + "\1\0\3\u0aa9\1\132\3\u0aa9\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u03e9\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0aaa\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0aab\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0aac\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0aad\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0637\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0312\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0aae\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0629\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0aaf\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0169\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0ab0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0ab1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0ab2\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0426\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0324\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0ab3\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\3\141\1\u090a\2\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\1\141\1\u0ab4\2\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0317\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\14\0\1\u0ab5\41\0\1\u0ab5\72\0"+ + "\1\u056b\140\0\1\u056e\224\0\1\u0ab6\142\0\1\u0ab7\123\0"+ + "\1\u0364\143\0\1\u0362\135\0\1\u0590\151\0\1\u0590\130\0"+ + "\1\u0ab8\152\0\1\u0598\131\0\1\u0364\150\0\1\u0578\142\0"+ + "\1\u0ab9\122\0\1\u0aba\153\0\1\u0abb\122\0\1\u0abc\142\0"+ + "\1\u0590\141\0\1\u0abd\157\0\1\u07f5\121\0\1\u0abe\153\0"+ + "\1\u07f1\126\0\1\u0abf\137\0\1\u0ac0\145\0\1\u0578\144\0"+ + "\1\u0ac1\132\0\1\u0ac2\132\0\1\u059a\151\0\1\u0ac3\137\0"+ + "\1\u0ac4\132\0\1\u0ac5\141\0\1\u0ac6\143\0\1\u0ac7\142\0"+ + "\1\u0ac8\104\0\1\u0ac9\170\0\1\u0aca\142\0\1\u0acb\136\0"+ + "\1\u0acc\140\0\1\u0acd\134\0\1\u0ace\146\0\1\u0acf\70\0"+ + "\1\u0ad0\41\0\1\u0ad0\72\0\1\u05a5\130\0\1\132\10\0"+ + "\1\u0ad1\5\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0ad2\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0832\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0ad3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0ad4\2\141\1\u0ad5\1\141\1\u0ad6"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\2\141\1\u0817\6\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\1\141\1\u0ad7\4\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\2\141\1\u0ad8\6\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\6\141\1\u0ad9\3\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u09f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u08f6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0adb"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0adc\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0add\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0ade\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0adf\1\141"+ + "\1\u0ae0\1\u0ae1\1\u0ae2\1\u0ae3\1\u0ae4\1\u0ae5\1\u0ae6\1\141"+ + "\1\u0ae7\1\u0ae8\3\141\1\u0a53\1\141\1\u0ae9\1\u0aea\2\141"+ + "\1\u0aeb\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u077a\2\141\1\u0aec\3\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0aed\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0aee\1\u0aef\1\u0af0\1\u0af1\1\u0af2"+ + "\1\u0af3\1\u0af4\1\u0af5\1\u0af6\1\u0af7\1\u0af8\1\u0af9\1\u0afa"+ + "\1\u0464\2\141\1\u0afb\1\u0afc\3\141\1\u0afd\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u0afe\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u03d4\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0aff\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b00\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0b01\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b02\2\141\1\u030c"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b03"+ + "\1\141\1\u0b04\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u03d4\4\141\1\u0412\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0408\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b05\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0b06\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0afc\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b07\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b08\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b09\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u031a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0b0a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0b0b\5\141\1\u031a\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0a3a\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0b0c\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0b0d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0b0e\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0b0f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0b10\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u08a5\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u06bb\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b0e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b11\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0b12\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b13"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b14\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b15\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0b16\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b17\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0b18\6\141\1\u0b19\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0b1a\5\141\1\u0b1b\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0b1c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0b1d\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b1e\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0b1f\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b20\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0b21\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0b22\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0b23\7\141\1\u0b24\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b25\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0b26\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u0b27\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0b28\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0b29\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0920\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0b2a\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b2b\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0b2c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0b2d\1\141\1\u0b2e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b2f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b30\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0b31\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b32\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0b33\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0b34\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b35\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0b36\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0b37\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b38\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u06ce\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0b39\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0245\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0b3c\7\141\1\u0b33"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b3d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b3e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0b3f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b40\1\141"+ + "\1\u0b41\1\u0b42\1\u0b43\1\u0b44\1\u0b45\1\u0b46\1\u0b47\1\141"+ + "\1\u0b48\1\141\1\u0b49\1\141\1\u0464\1\u0b4a\1\141\1\u0b4b"+ + "\1\u08b9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b4c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b4d"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b4e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u05c1\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0b4f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u0b50\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0b51\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b52\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b53\2\141\1\u0b54\1\u0b55\1\141\1\u0b56"+ + "\1\u0b57\1\u0b58\1\141\1\u0b59\1\u0b5a\3\141\1\u0b5b\1\141"+ + "\1\u0b5c\1\u0b5d\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b5e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0614\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b5f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0b60\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b61\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b62"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b63\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b64\5\141\1\u09d0\13\141\1\u0779\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b65\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0b66\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b67\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u03c8"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0b68\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0b69\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0b6a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b6b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0b6c\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0b6d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b6e\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0b6f\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0b1d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0b70\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u04ce\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u090a\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0b71"+ + "\2\141\1\u0b72\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0b73\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b74\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\11\141\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u074f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0894"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0b75\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b76\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0b77\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b78"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b79"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0410"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0b7a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b7b\1\141"+ + "\1\u0b7c\1\u0b7d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0b7e\10\141\1\u0312\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0b7f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0b80\1\u0b81\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b82\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u08d8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0b83"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0750\6\141\1\u0b84\6\141\1\u0b85\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0993\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u099b\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b86\1\u099e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u01eb\1\u0b87\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u01eb\2\141\1\u03ce"+ + "\1\141\1\u0b88\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u0705\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u060f\6\141\1\u0b89\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0b8a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0b8b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0b8c\3\141\1\u0b8d\3\141\1\u0b8e\12\141"+ + "\1\u0b8f\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u040d\5\141\1\u0b90\1\u04d8\2\141\1\u0b91\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b92\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u04c5\1\141\1\u0b93"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u044f\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u08bd"+ + "\10\141\1\u0392\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u06ce\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0b94"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u05b6"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0b95\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0262\1\141\1\u0b96\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u0174\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0464\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0b97\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0269\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u06b5\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u01fa\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b98\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u060f\2\141\1\u060f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0b99\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u05d6\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0b9a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0b9b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b9c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u0b9d\6\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0b9e\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0b9f\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u04ec\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u065d\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0ba0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0ba1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08cc\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0971\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ba2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0717\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ba3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ba4\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ba5\2\141\1\u0ba6\1\u0ba7\6\141\1\u0ba8\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ba9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0baa\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0bab\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0bac\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0bad\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0bae\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0baf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0bb0\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0bb1\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03c0\1\141\1\u0bb2\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u05d1\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0bb3\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0bb4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0bb5\1\u0bb6\1\u0bb7"+ + "\1\u0bb8\1\u0bb9\1\u045c\1\u04c5\1\u0bba\1\u09a4\1\u0bbb\1\u0bbc"+ + "\1\u0bbd\4\141\1\u0bbe\1\u0bbf\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u0bc0\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u06b9\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0bc1\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0bc2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0bc3\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0bc4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0bc5\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bc6\11\141\1\u0bc7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0bc8\4\141\1\u0866"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0bc9"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u05d8"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0bca\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u08cd\1\141\1\u0bcb\3\141\1\u08f6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0bcc\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03c0\4\141\1\u0bcd\10\141"+ + "\1\u0269\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u08ef\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u05d8\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u08f6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0bce\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0bcf\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u04f9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0bd0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u05d1\4\141\1\u08f1\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0400\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0bd1\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0bd2\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0bd3\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0bd4\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0bd5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0bd6\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0bd7\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0bd8\21\141\1\u0bd9\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0bda\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0bdb\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0bdc\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0bdd\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0bde\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0bdf\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0be0\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0be1\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0be2\14\141\1\u0be3\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0be4\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u044f\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0be5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0be6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0be7\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u06b3\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0be8\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0be9\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0bea\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0beb\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0a34\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0bec\5\141\1\u0971\6\141\1\u0bed\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0bee\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u05d8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0bef\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0b65\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u04f9\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0bf0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u08a6\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0bf1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0bf2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0bf3\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0bf4\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0bf5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u03a8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0bf6\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0bf7\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0bf9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bfa\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0bfa\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0bfb"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0bfc\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0b04"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0bfd"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0bfe\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u09c0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0bff"+ + "\1\u0c00\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c01\11\141\1\u0c02\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0c03\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0c04\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0c05\6\141\1\u0c06\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c07\7\141\1\u0c08\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c09\1\141"+ + "\1\u0c0a\5\141\1\u06b3\2\141\1\u0c0b\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0c0c\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c0d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c0e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c0f\10\141\1\u0c10\5\141"+ + "\1\u0c11\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c12\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c13"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c14\2\141\1\u0c15\6\141\1\u0c16\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0c17\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c18\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0c19\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c1a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0269\1\141\1\u0393\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0c1b\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c1c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c1d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c1e\1\u081f\16\141\1\u0947"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c1f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0269"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0c20"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c21"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c22"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c23"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\2\141\1\u05af\4\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0200"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08ea"+ + "\3\141\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0c24\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0bc5\1\u0c25\2\141\1\u0c26\3\141\1\u0c27"+ + "\1\141\1\u0c28\1\u0c29\10\141\1\u06ec\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c2a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0c2b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0c2c\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0c2d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0c2e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0c2f\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0c30\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0c31\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0c32"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0c33\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u06ab\11\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u08a5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0bc5\1\141\1\u0c34\1\u0c35"+ + "\2\141\1\u0c36\1\u0c37\1\u0c38\1\141\1\u0c39\1\141\1\u0a66"+ + "\4\141\1\u0c3a\2\141\1\u0c3b\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0c3c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0c3d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0411\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u04f9\15\141\1\u0b89\2\141\1\u0c3e\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c3f\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c40\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0c41\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u090a\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0c42\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0c43\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0c44\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0c45\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0679\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0c46\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c47\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u08f6\2\141\1\u0392\4\141"+ + "\1\u0392\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c48\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u06b2"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u041a"+ + "\1\141\1\u0c49\1\141\1\u0c4a\5\141\1\u0c4b\13\141\1\u0c4c"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05d1\5\141"+ + "\1\u0c4d\6\141\1\u0614\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0c4e\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0c4f\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0c50\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0c51\1\u0c52\11\141\1\u0c53\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c54\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04f5\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0c55\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0c56\1\141\1\u0c57\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c58\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0c59\15\141"+ + "\1\u0c5a\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0c5b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0c5c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c5d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0c5e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c5f"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0c60\1\141\1\u0c61\6\141\1\u0bdd\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0c62\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c63\1\141\1\u0c64\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0c65\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c66\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c67\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0c68\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0c69\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c6a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0c6b\1\141"+ + "\1\u0827\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0c6c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08a5"+ + "\12\141\1\u05b7\6\141\1\u05b7\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u05d8\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0c6d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0c6e\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c6f\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0c70\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c71\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c72\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0606\1\141\1\u0c73\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0c74\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0c75\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0c76\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u03d4\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u06f4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0c77\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0c78\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0c79\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0b91\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0c7a\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0c7b\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0916\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0b65\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0c7c\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0c7d\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0c7e\7\141\1\u0c7f\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0c80\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c81\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u03a8\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0480\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03e4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08bb\1\141\1\u0269\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0c82\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0872\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u081f\4\141\1\u0c83"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0610"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0aab"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0c84"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0c85"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0c86\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0c87\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\11\141\1\u0610"+ + "\7\141\1\u08db\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0c88\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0c89\14\141\1\u0c8a\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0c8b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0c8c\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0c8d\5\141\1\u0c8e\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0c8f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0c90\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c91\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0c92\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0c93\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0c94\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0c95\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0c96\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0c97\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u03a8\2\141\1\u0c98\1\141\1\u0c99"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u05b7"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0c9a"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c9b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0496\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c9c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c9d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0c9e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0c9f\5\141\1\u0ca0"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0ca1"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ca2"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0a05"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ca3"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u0ca4\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0ca5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0ca6"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0ca7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0ca8"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u04d8"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ca9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0caa\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0cab\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0cac\21\141"+ + "\1\u0705\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0cad\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0cae\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u040d\6\141\1\u0caf\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0cb0\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0cb1\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0b20\1\u0a01\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cb2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u0cb3\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0cb4\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0cb5\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0cb6\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0cb7\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0386\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cb8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cb9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0cba\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0cbb\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0cbc\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u09f1\11\141\1\u0cab\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cbd\2\141\1\u0cbe\1\u0cbf\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0cc0\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0cc1\1\141\1\u0cc2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cc3\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u09fc\1\u040d"+ + "\6\141\1\u0cc4\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cc6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cc7\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0cc8\3\141\1\u09d0\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0cc9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0cca\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u03e6\7\141\1\u03e7\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0971\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ccb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ccc\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ccd\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0cce\4\141\1\u0ccf"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cd0"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0cd1"+ + "\1\u0cd2\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0cd3\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0cd4\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0cd5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0cd6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0cd7\5\141\1\u0cd8\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cd9\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u0cda\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0cdb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0cdc\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0cdd\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03ec\4\141\1\u0cde\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0cdf\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ce0\1\u0ce1\1\u0ce2\1\u0ce3\1\u0ce4\1\u0ce5"+ + "\1\u0ce6\1\u0ce7\1\u0ce8\1\u0ce9\1\u0cea\4\141\1\u0ceb\1\u0cec"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u08f6"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ced"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cee\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u06b7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0cef\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0cf0\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cf1\1\141"+ + "\1\u0cf2\10\141\1\u0cf3\1\u0cf4\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cf5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cf6\3\141\1\u0396\6\141\1\u063d\4\141"+ + "\1\u0cf7\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0cf8\2\141\1\u0cf9\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0cfa\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u03ff\6\141\1\u0cfb\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u0cfc\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0408\1\141\1\u0409\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0cfd\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0cfe\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0cff\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141"; - private static final String ZZ_TRANS_PACKED_2 = - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ea3" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0ea4\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0ea5\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0ea6\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0ea7\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0ea8\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0ea9\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0eaa\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u01d5\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0cf8" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0eab" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0eac\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0ead\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0eae\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0eaf\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0eb0\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0eb1\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0eb2\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0eb3" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0eb4" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0eb5\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0eb6\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0eb7\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0eb8\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u07b0\46\115\1\106\10\0\3\115\1\u0eb9" + - "\2\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0eba\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\4\115\1\u0ebb\1\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\15\115\1\u06b6\31\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u095b" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0ebc\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0ebd\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0ebe\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0ebf\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0ec0" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u03ab\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u06be\1\115\11\0\4\115\1\u0ec1" + - "\1\115\1\u0948\25\115\1\u0479\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u06a9\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0ec2\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0ec3\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u04fc\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ec4\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0a69" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0ec5\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0782\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0ec6\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0ec7\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ec8\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0ec9\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0eca\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0ecb" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ecc" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0ecd\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u0ece\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0ecf\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0ed0\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u02ac\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0ed1\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0ed2\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u02e1\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0ed3\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0ed4\22\115\1\u0ed5\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0ed6\1\u02a1\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0703\2\115\1\u0ed7" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u045f\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0eaf\1\115\1\u0a58\3\115\1\u0ed8\1\u0ed9\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0eda\17\115" + - "\1\u0edb\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0edc\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u02e1\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02f3\25\115\1\u04fa\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0edd\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0ede\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0edf" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0ee0\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0ee1\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0ee2\1\u04fa\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u095b\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u058b\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0b06\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0ee3" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0be3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u092d\1\u097d\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0e7d\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0ee4\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0ee5" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u02dc\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0ee6\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ee7" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0ee8" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0ee9\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0eea" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u095b\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0eeb\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0eec\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0eed\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0eee\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u02b4\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0eef\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0569\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ef0\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0ef1\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u080e\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u047a\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02f3\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\5\115\1\u0ef2\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0ef3\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u04f6\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0ef4\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0ef5" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u0ef6" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0ef7\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0ef8\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0ef9\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0efa\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0efb\2\115\1\u0577" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0efc\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0efd\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\41\115\1\u0efe\5\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0eff\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0f00\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\24\115\1\u0f01\22\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0f02\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u05ce\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u0f03\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0f04\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0f05\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0739\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u0739\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02e3\1\115\1\u07d2" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\5\115\1\u0f06\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0f07\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0f08\4\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0f09\1\115\11\0\3\115\1\u0f0a\1\u0f0b\24\115" + - "\1\u0f0c\2\115\1\u0f0d\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0f06\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0490\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0f0e\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u0a04\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0f0f" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u06f9" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u0c9b\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0f10\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0f11\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0f12\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0f13\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0f14\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0f15\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0f16\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0527\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0f17\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0f18\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0d4b\1\115\11\0" + - "\35\115\1\u0f19\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0502\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u02b4\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0f1a\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0f1b\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0f1c\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0341" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0a66\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u083f\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0f1d\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u048e\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0f1e\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0c40\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0f1f\4\115\1\u0f20" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0f21\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0f22\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f23\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0ae0\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0f24\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0f25\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0f26\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0a74\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0f27\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0f28\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u048b\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u0f29" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u02f3" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0f2a\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0f2b\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0f2c\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u02b2\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0f2d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0f2e\2\115\1\u080e\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0f2f" + - "\1\u0f30\1\u0f31\1\u0f32\24\115\1\u015e\2\115\1\u0f33\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0f34" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0f35\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0f36\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0f37\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u045a\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0f38\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0f39\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0f3a" + - "\24\115\1\u0f3b\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0f3c\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u0f3d\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0f3e\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0f3f\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u02e3\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0f40\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u0f41\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0f42\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u0f43\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0f44\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0c9c\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0f45\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0f46\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0f47" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0f48\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0f49\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u0f4a\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0f4b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u02b5\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0f4c\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u0b2c\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u0f4d\1\115\1\0\1\106\2\115\1\0\3\115\1\u0f4e" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0f3e\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0f26\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0f4f\1\115\11\0\7\115\1\u0f50\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0f51\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0f52\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0f53\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u03cd\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0f54\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0f55\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0f56\3\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0e89\1\115\11\0\1\u0f57" + - "\1\u0728\2\115\1\u0f58\1\115\1\u0f59\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0f5a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0f5b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0f5c\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u055d\1\u0f5d\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0f5e\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0f5f\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0f60\4\115\1\u0d0a" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0f61\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0f62\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u09f5\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0f63\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f64\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0f65\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0f66\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0f67\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0f68" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f69\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0f6a\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0136\24\115\1\u0f6b\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u0f6c\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0f6d\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0f6e\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u072e" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0f6f\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u02b4\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u089d\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f70\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0f71\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u0f72\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0f73\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0f74\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0f75\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u02e7\24\115\1\u038a" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0f76\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0f77\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0f78\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u0f79\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u04fa\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0f7a\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0cd0\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0f7b" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0f7c" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0e7d\25\115\1\u0f7d\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0f7e\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0f7f" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0a16\26\115\1\u0f80\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0f81" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0f82\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0f83\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0f84\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0f85\1\u0f86\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0f87\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f88\4\115" + - "\1\u0f89\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0f8a\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\36\115\1\u0833\10\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u07da\1\115\11\0\30\115\1\u0f8b\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f8c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7" + - "\24\115\1\u0f8d\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0f8e\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0f8f\2\115\1\u07e5\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0eb3\2\115\1\u01da\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f90\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0f91\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0f92\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0f93\25\115\1\u0f94\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0f95" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0f96\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u0f97\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0f98\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0474\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0f99" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u0739\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0a1a\1\u0a24\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0f9a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0f9b" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0f9c\1\115\1\u0f9d\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0771\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0771\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0f9e\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0f9f\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0fa0\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0fa1\24\115\1\u05d2" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0fa2\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0fa3\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u02cd\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0fa4\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u02ca\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0fa5\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0fa6" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0fa7\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0fa8\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0fa9\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0c50\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u0faa\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0fab\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0fac\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0fad\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u048e" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0fae" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0faf\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0fb0\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0ef9\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0fb1\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0fb2\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0fb3\26\115\1\u02f6\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0457\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0fb4" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0fb5\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0fb6\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0fb7\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0fb8\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u0fb9\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0fba\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0fbb\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0fbc" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0d16\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u0fbd\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0369\1\115\1\u0fbe\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0fbf\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0fc0\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0fc1\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0fc2\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0fc3\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u0fc4\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0d50\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0fc5\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0fc6\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u0fc7\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0fc8\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0fc9\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0fca" + - "\3\115\1\u0fcb\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0fcc\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0fcd\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0fce\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0369\1\115" + - "\1\u0fbe\1\115\1\0\1\106\2\115\1\0\3\115\1\u0fcf" + - "\1\115\11\0\1\u0fd0\1\115\1\u0fd1\1\u0fd2\1\u0fd3\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0fd4" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0fd5\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u0fd6\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0fd7\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0fd8\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0fd9\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0fda\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0fdb" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u04b4" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0fdc\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0fdd\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0fde\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0fdf\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0fe0\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0264\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0fe1\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0fe2" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u01c8" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u071a" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0fe3\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0fe4\4\115\1\u0fe5\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0fe6\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0fe7\1\u0fe8\1\115\1\u0fe9" + - "\1\115\1\u0fea\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0fe4\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0feb\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u0fec\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0fed\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0fee\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0fef\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0611\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0ff0\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u09b1\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0ff1\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0ff2\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0ff3\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ff4\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0ff5\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u01b7" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ff6" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u0ff7\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0ff8\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0ff9\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0ffa\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0ffb\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0ffc" + - "\1\115\1\0\5\115\11\0\6\115\1\u067e\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ffd\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0ffe\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0fff\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1000" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1001\21\115\1\u1002\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1003\4\115\1\0\1\106" + - "\1\u1004\1\115\1\0\3\115\1\u1005\1\115\11\0\2\115" + - "\1\u1006\1\115\1\u0f3e\1\115\1\u1007\21\115\1\u0c16\3\115" + - "\1\u1008\1\u1009\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u100a\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u100b\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u02ae\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u100c\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u02e3" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u100d\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u100e\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u100f\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1010\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1011\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1012\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1013\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0699\4\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u0d66\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1014\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u067a\4\115\1\0\1\106\1\u045c\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1015\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u1016\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1017\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1018\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u1019" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u101a\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u101b\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u101c\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u101d\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u03d0\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u101e\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u101f\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1020\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1021\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1022\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1023\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1024\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1025\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1026\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u067a\1\115\1\u1027\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u045a\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1028\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1029\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u102a\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u102b" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u102c" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u102d\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u102e\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u102f\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1030\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u07ab\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1031\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1032\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1033\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u1034\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1035\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u1036\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1037\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u0f46\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u1038\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1039\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u103a\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u01b7\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u103b\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u103c" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u103d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0f46\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u103e\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u103f\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1040\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1041\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1042\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1043\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u1044\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1045\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u1046\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u1047\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u1048\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1049\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u104a\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0699\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0db1" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u104b\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u104c\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u104d\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u104e\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u06aa\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0156\1\115\11\0\4\115\1\u05b2\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u104f\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u1050" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1051\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u0156" + - "\1\115\11\0\2\115\1\u1052\1\u1053\1\u1054\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1055" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u1056" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0510\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0341\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1057\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0de0\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0f7c\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1058\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0ff0\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0d65\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1059\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u105a\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u105b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u105c" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u105d\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u105e\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u105f\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u1060\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0aeb\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1061\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1062\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1063\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1064\1\u0db2\23\115" + - "\1\u1065\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u1066\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1067\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u01c8\2\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u0169\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1068\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1069\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u106a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u106b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0264" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0dc5" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u106c\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0133\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u106d\1\115\1\u06cf\30\115\1\u106e" + - "\1\u106f\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1070\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u1071\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1072\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1073\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1074" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1075\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u1076\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u1077\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1078\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1079\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u107a\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u107b\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0301\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u107c\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u107d\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0ec2\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u107e\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u107f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1080\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0577\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1081\32\115\1\u0af0\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0efc\4\115\1\u1082\21\115\1\u1083" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1084\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1085\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0f7d\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1086\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u1087\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u0511\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1088\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1089\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u108a\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u108b" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u108c\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u108d\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u108e\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u108f\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u03d0\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1090\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1091\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1092\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1093" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1094" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0264\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0844\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1095\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1096\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1097\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1098\3\115" + - "\1\u057b\2\115\1\u1099\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u109a\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u109b\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u109c\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u109d\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u109e" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u109f\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u10a0\1\115\1\u10a1\22\115\1\u10a2\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u10a3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u10a4\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u10a5\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u10a6\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u10a7\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u10a8\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0b57\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u02b4\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u106f\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u10a9\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u10aa\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u10ab" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u10ac\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\31\115" + - "\1\u0f71\15\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u10ad\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10ae\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u10af\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u10b0\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u10b1\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u10b2\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u10b3\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u10b4\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u10b5" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u10b6" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u10b7\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u10b8\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10b9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u10ba\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u10bb\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u10bc\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u10bd\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u03ea" + - "\1\u047a\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u10be" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0b42" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0890\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u10bf\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10c0\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u10c1\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u10c2\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0b4d\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u10c3\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u10c4\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u10c5\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u10c6" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u071b\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u10c7\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10c8\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u10c9\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u10ca\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u10cb\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u10cc\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u03ab\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u10cd\1\115\1\0\5\115\11\0\1\u10ce" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u10cf\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u0873\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u10d0\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u10d1\1\115" + - "\1\0\5\115\11\0\5\115\1\u06d9\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u10d2\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u0b30\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u10d3\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u10d4" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u10d5" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0f37\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u10d6\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u10d7\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u10d8\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10d9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10da\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u10db\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u10dc\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u10dd\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u10de\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u10df\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u10e0\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u10e1\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u10e2\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u10e3\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u10e4\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u10e5\1\115\1\u10e6" + - "\1\115\1\u10e7\22\115\1\u10e8\1\u10e9\3\115\1\u10ea\1\u10eb" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u10ec\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u02cd\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u10ed\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u10ee\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u10ef\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u10f0\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u10f1\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u10f2" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u10f3\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u10f4\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u10f5\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u10f6\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u10f7\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u10f8\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u10f9\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u10fa\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u10fb\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u10fc" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u06ad" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u10fd\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u10fe\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u10ff\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1100\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1101\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1102\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1103\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u055b\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0341\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1104\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02b4\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1105" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1106" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1107\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u1108\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u1109\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u110a\2\115\1\u110b\1\115\1\u110c\1\u110d" + - "\21\115\1\u110e\3\115\1\u110f\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1110\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1111\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1112\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1113\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1114" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1115\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u1116\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1117\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1118\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u02b2\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u1119\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0acb\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u02e1\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\31\115\1\u03d6" + - "\15\115\2\44\1\0\1\44\1\0\2\44\2\0\6\44" + - "\1\0\6\44\2\0\14\44\1\u111a\16\44\1\u111a\44\44" + - "\17\0\1\u111b\110\0\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u111c\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0256\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u111d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u06f6\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u111e\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u0d7d\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u111f\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1120\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1121\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0727\4\115\1\u072b" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u04c8\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u097d\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u06f5\2\115\1\0\1\106" + - "\1\u1122\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1123\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1124\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u1125" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1126" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u1127\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1128\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1129\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u112a\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u112b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u112c\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u112d\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0cbc\1\115\1\0\5\115\11\0\27\115\1\u034b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u112d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u112e" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u112f\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u0375\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1130\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u1131\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1132\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1133\1\115\1\0\5\115\11\0\27\115\1\u034b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1134" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1135\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1136\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0978\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1137\34\115\1\u1138\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u1139\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u035b" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u113a\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u113b\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0ef9\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u113c\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u113d\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u113e\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u113f\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1140" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1141\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u0a99\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1142\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u03ff\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\11\115\1\u1143\35\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u05da\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\10\115\1\u1144\36\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1145\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1146\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1147\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1148\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0973" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0b14\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u07e5\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u1149\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u114a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0c00\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u02ae\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u114b\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u114c\4\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u114d\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u114e\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u114f\5\115\1\u1150\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1151\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1152\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1153\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1154\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0d7d\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1155" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1156\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1157\1\115\1\u1158\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1159\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u115a\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u115b\2\115" + - "\1\u0f6b\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u115c\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u0a58\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u115d\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u055a\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u115e\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u115f\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1160" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1161\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u1162\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u1163\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1164\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1165\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1166\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1167" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1168" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u1169\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u116a\2\115\1\u116b\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u116c\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u116d\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u116e\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u116f\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1170" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1171" + - "\4\115\1\u1172\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u01f6\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u02f3\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0c8b\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1173\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1174\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1175\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1176\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0ef3\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0362\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0474\11\115\1\u1177\5\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1178\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1179\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u117a\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u02b2" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u117b" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u117c\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u056c\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u117d\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u117e\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u117f\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1180\1\115" + - "\1\0\5\115\11\0\5\115\1\u0a2c\41\115\1\106\10\0" + - "\6\115\1\0\1\115\1\u1181\3\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1182\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1183" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1029\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u071b\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\45\115\1\u01c8\1\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u02a4\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1184\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1185\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1186\26\115\1\u1187\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1188\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1189\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u118a" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u071b\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u09b6\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u118b\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u118c\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1050\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u118d\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u118e\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u118f\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1190\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1191" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1192" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1193\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1194\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1195\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u0d7d\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1196\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1197\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1198\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1199" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u119a\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u119b\2\115" + - "\1\u119c\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u119d\1\115\1\u0ec3\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u119e\1\u119f\1\115\1\u047a" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0452" + - "\2\115\1\u11a0\1\u11a1\1\u11a2\22\115\1\u11a3\1\u11a4\2\115" + - "\1\u11a5\1\u11a6\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u02f6\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u07ab\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u11a7\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u11a8\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u095b\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0a83\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u11a9\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u0ce9\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u11aa\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u11ab\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0d02\3\115\1\u11ac\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ff2" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u11ad" + - "\6\115\1\u11ae\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u11af\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u11b0\24\115\1\u038a\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u11b1\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u11b2\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u0f46\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u08ab\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u0608\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u11b3\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u11b4\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u11b5\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0263\22\115" + - "\1\u11b6\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u11b7\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u11b8\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u11b9\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u06fc\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0f43\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0c8d\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u047a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u072e\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u11ba\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u069b" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u02b5\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u11bb\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u11bc\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u11bd\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u11be\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u11bf\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0d2c\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u11c0\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u11c1\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u11c2\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u047a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u11c3\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u11c4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u11c5\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0362" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0474\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u034b\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u11c6\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u11c7\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u11c8\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u11c9\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u11ca\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u11cb" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u055d\1\u11cc\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u11cd\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u11ce\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u11cf\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u11d0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u11d1\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u11d2\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u11d3" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u11d4\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u11d5\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u11d6\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u11d7\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u11d8\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u11d9\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u11da\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u11db\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u11dc\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u11dd" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u11de" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0a2b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u04df\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u0950\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u11df\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u0614\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u11e0\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0739\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0f05\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u11e1\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u11e2" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u11e3\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u11e4\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u11e5\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u11e6\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u11e7\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0ebd\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0f7e\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u11e8\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u11e9\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u11ea\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u07ab" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u01b7\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u11eb\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u083f\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u11ec\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u11ed\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u04f6\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u0f6d\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u11ee" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u11ef" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u11f0\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u11f1\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u11f2\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0a08\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u11f3\1\u11f4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0577\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u11f5" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0efc" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u11f6\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u11f7\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u11f8\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u11f9\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u11fa\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u11fb\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u11fc\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u06a9" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u11fd\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u11fe" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0c80\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u11ff\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u1177\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1200\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1201\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1202" + - "\43\115\1\106\10\0\6\115\1\0\4\115\1\u0454\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\46\115\1\u01c8\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0d05\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\46\115\1\u1203\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1204\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1205\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1206\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1207\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u03f9\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u1208\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1209\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u120a\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0611\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02a1\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0bcf" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u120b\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u120c\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u120d\1\115\1\0\3\115" + - "\1\u120e\1\115\11\0\1\115\1\u120f\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1210\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1211\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1212" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u1213\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1211\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1214\1\115\1\0\5\115" + - "\11\0\1\115\1\u120f\1\115\1\u1215\31\115\1\u1216\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1217" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0362\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1218\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u072e\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1219\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u121a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u121b\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u121c\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0739\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u121d" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u121e\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u121f\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1220\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1221\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1222\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1223\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1224\1\115" + - "\1\u1225\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1226\2\115\1\u1227\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1228\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1229\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u122a\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u122b\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u122c" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u122d" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u122e\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u122f\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1230\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1231\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\36\115\1\u1232\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0d1d\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1233\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1234" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u0ad5\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1235\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u1236\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u1237\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1238\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1239" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u123a\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u123b\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u123c\1\u123d\1\u123e" + - "\1\u123f\1\u1240\22\115\1\u02cd\1\u1241\1\u015e\2\115\1\u1242" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1243\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1244\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1245\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1246\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1247\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1248\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1249\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u124a\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u124b\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u124c\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u124d\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u124e" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u124f\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u1250" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1251\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u1252\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u02ac\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u1253\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1254\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u02ac\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0fb8" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0679\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1255\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1256\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1257\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1258\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1259\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u125a\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u125b\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u125c\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u125d\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u125e\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u125f\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1260\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1261\1\u0d31\1\u1262\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1263" + - "\1\u1264\3\115\1\u1265\20\115\1\u1266\1\115\1\u1267\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0ffa\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1268\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u02b4\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u1269\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u126a\1\115\1\u126b\1\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u125c\1\115\11\0\2\115" + - "\1\u126c\1\115\1\u126d\1\u126e\1\u126f\1\u1270\20\115\1\u1271" + - "\1\u1272\1\115\1\u0702\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u02e3\24\115\1\u072e\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1273\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1274" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1275\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u11bf\3\115\1\u1276\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1277" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1278\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1279\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u127a\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u127b\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u127c\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u127d" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u127e\1\115" + - "\11\0\5\115\1\u127f\1\u1280\24\115\1\u0702\1\115\1\u1281" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1282\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1283\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1284\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1285\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1286\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u04fc\1\u1287\2\115\1\0" + - "\1\106\1\u1288\1\115\1\0\5\115\11\0\3\115\1\u06cf" + - "\1\115\1\u1289\1\u128a\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u128b\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u128c\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u128d\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u128e\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u128f" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0908" + - "\26\115\1\u045a\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1290\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1291\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1292\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1293\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u0744\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1294\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1295\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0362\3\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1296\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u1297\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u0cc2\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1298\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u0563\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1299" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0a93\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u129a\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u129b\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u129c\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u03ab\1\u0527\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u129d\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u129e" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u129f\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0f0e\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u02f0\1\115\1\u0877\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u12a0\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u12a1\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u12a2" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u12a3\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u12a4\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u12a5\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u12a6\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u12a7\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0842\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u12a8\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u12a9\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u12aa" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u12ab" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0345\32\115\1\u12ac\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u12ad\23\115\1\u07f7\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u12ae\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u12af" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u12b0\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\44\115\1\u12b1\2\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u11bc\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u036d\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u12b2\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u12b3\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u12b4\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u12b5" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u12b6" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u12b7\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u12b8\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u081d\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u12b9\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u12ba\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0cc0\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0819\24\115\1\u12bb\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u12bc" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0cd2\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u071b\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u12bd\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u12be\23\115\1\u0db3\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u12bf\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u12c0\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u12c1\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u12c2" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1018\1\u12c3\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u12c4\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u12c5\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u12c6\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u12c7\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u12c8\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u12c9\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u12ca\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1064\1\115" + - "\1\u12cb\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u048e\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u12cc\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u12cd\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u12ce\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u12cf\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u12d0\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u12d1\2\115" + - "\1\u0d01\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u12d2\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u07aa\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u12d3\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u12d4\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0db4\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u12d5\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u12d6\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u12d7\1\115\11\0" + - "\1\u08da\2\115\1\u12d8\1\u12d9\1\115\1\u12da\20\115\1\u02cd" + - "\3\115\1\u12db\1\u12dc\1\115\1\u12dd\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u12de\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u12df\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u071c" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u04c8" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u12e0\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u12e1\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u12e2\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u12e3\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u12e4\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u12e5\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u08a9\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u12e6\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u12e7" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u12e8" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u12e9\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u051b\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u12ea\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u12eb\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u12ec\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u12ed\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u07aa\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u035b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u12ee" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u12ef\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u12f0\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0ae8\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u12f1\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u12f2\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0479\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u04e9\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u12f3" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u12f4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u12f5\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u12f6\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u12f7\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u12f8\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u12f9\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u12fa\31\115\1\u12fb\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u12fc\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u12fd\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u12fe" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u12ff\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1300\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1301\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1302\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1303\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1304\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0739\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1305\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1306\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0826\4\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1307\1\115\11\0\1\u06bf" + - "\1\u0afc\2\115\1\u1308\22\115\1\u1309\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0f48\1\115" + - "\1\u130a\2\115\1\0\1\106\2\115\1\0\3\115\1\u056b" + - "\1\115\11\0\1\u130b\1\u08a0\1\115\1\u130c\1\u130d\1\u130e" + - "\1\u0c06\20\115\1\u0474\1\u130f\3\115\1\u110f\1\u02c8\1\u08a9" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1310\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u1311\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1312\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1313\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1314\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1315\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1316\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1317\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1318\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1319\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u131a\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u131b\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u08be" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u131c" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u131d\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u131e\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f05" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u131f\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1320\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1321\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u099d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1322\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1323\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u1324\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\5\115\1\u01c8" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u01c8" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02f0\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u08a9\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u06cf\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u1325\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u10c3\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u1326\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u045f\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1327\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\2\115\1\u01c8\2\115" + - "\1\353\2\0\5\115\1\u01c8\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0b06\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1328\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1329\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u01c8\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\40\115\1\u132a\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u04c4\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u132b\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u132c\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u05ce\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u132d\31\115\1\u02dd\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u132e\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u132f\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1330\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1331" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0994\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0995\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1332\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1333\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1334\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1335\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1177\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1336\21\115" + - "\1\u1337\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1050\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1338\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1339\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u133a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u133b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u133c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0a74\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u133d\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\40\115\1\u133e\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u133f\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u048e\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1340\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1341\2\115\1\u06a9\1\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u048e\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u048e\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1342\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1343\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1344\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1345\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1346\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1347\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1348\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1349\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u134a\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u134b" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u134c\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u088d\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u134d\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u134e\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u134f\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1350\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1351\1\115" + - "\1\0\5\115\11\0\3\115\1\u0f63\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u1352\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1353\1\u1354" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0732\1\u1355\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1356\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u1357\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1358\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1359\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u135a\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u135b\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0c7b\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\26\115\1\u135c" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u135d\1\115\1\0\5\115\11\0" + - "\27\115\1\u034b\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u0bf3\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u135e\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u135f" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1360\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1361\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1362\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0cea\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1363" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1361" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1364" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1365\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u1366\2\115\1\u1367\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1368\2\115\1\u1369\1\u136a\1\115" + - "\1\u136b\20\115\1\u0556\1\u136c\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u136d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u136e\3\115\1\u136f\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1370\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u1371\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1372\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u01c8\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1373\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1374\17\115\2\44\1\0\1\44\1\0" + - "\2\44\2\0\6\44\1\0\6\44\2\0\32\44\1\253" + - "\6\44\1\253\36\44\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\37\115\1\u0bbd\7\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1375\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u1376\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1377\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1378" + - "\1\u1379\1\115\1\u137a\1\u057a\21\115\1\u137b\1\115\1\u137c" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u137d\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u137e\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u137f\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1380\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1381\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0bbb" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u02aa\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1382\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u0c03\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0d0a" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u112d\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1383\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0f07\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1384\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1385" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1386\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1387\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u12a0\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u02e7" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1388" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1389\2\115\1\u0be7\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u138a\2\115\1\u1053\1\u138b\2\115" + - "\1\u138c\17\115\1\u1337\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u138d\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u02b4\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u138e\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u138f\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1390\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1391\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1392\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1393\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u09be\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u10b1\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u09be\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\26\115\1\u1394\20\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u11b7\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1395\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\12\115\1\u06b6" + - "\34\115\1\106\10\0\1\115\1\u06b1\4\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1396\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1397\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1398\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1399\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u139a\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u139b\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u139c" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u139d" + - "\26\115\1\u139e\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u139f\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u13a0\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u13a1\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u13a2\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u13a3\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u02b4\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u071b\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u13a4\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u13a5\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u13a6\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0c03\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0ed9\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\40\115\1\u0c37\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13a7" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u13a8\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u0a83\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0739\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u01c8\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0341\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u13a9\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u13aa\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1025" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u13ab\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u05ab\1\115\1\0\5\115\11\0\3\115" + - "\1\u01c8\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u13ac" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\26\115\1\u13ad\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u095b\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u13ae\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u13af\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0f96\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u13b0\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u13b1\26\115" + - "\1\u13b2\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u13b3\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u028a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0c37\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u13b4\4\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u13b5\1\115\11\0\6\115" + - "\1\u13b6\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u13b7\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u07d2\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u13b8\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u13b9\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u13ba\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u056b\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u13bb\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u13bc\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0718\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u13bd" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u13be\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u13bf\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0b14\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0c3c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u13c0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u13c1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u03ff\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u13c2\1\u13c3\25\115" + - "\1\u0b14\1\u03ff\2\115\1\u13c4\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u05ce\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u02c3\26\115" + - "\1\u0dcb\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u13c5\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u13c6\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u072e\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0efc\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u13c7\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u13c8\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13c9" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u07b7\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u13ca\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u13cb\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u13cc\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u13cd\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13ce" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u13cf" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u127d\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u13d0\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u0dc4\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u13d1\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u13d2\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u13d3\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u094a\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u13d4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u06f8\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13d5" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u13d6\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u13d7" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u13d8\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u13d9\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u13da\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u13db\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u13dc\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u13dd\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u13de" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u13df\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0818\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u13e0\1\u13e1\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u13e2\25\115\1\u0966\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u13e3\24\115\1\u01c8" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u13e4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u13e5\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u13e6\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u13e7\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u13e8\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u13e9\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u13ea\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u02f3\2\115\1\u13eb\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u13ec\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u13ed" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u13ee\1\u13ef\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u07b7\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u13f0\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u13f1\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u13f2\26\115\1\u02f6\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13f3" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u13f4\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u13f5\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u13f6\2\115\1\u088d\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0a14\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u13f7\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u04d8\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u13f8" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u13f9\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u13fa\1\115" + - "\11\0\1\115\1\u13fb\1\u13fc\1\115\1\u13fd\30\115\1\u13fe" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u13ff" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0556\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u1400\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u02a1\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1401\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u0b58\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1402\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1403\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0ca9\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1404" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1405" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1406\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1407\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u06d0"; + private static final String ZZ_TRANS_PACKED_2 = + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d00"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d01"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d02\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d03\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0d04"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0317"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0269"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d05"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u048b"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d06"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d07"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0d08"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d09\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d0a\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0d0b\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0d0c\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0d0d\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d0e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08b8\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d0f\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0d10\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d11\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d12\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d13\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u05d8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d14"+ + "\1\u0269\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0d15\1\141\1\u0d16\4\141\1\u0d17\2\141\1\u0d18\12\141"+ + "\1\u0d19\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03d4"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d1a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d1b"+ + "\7\141\1\u0208\1\u0d1c\1\u0d1d\1\141\1\u0464\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u08f6\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0d1e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d1f\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0d20\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0d21\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0d22\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0d23\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0749\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d24\1\141\1\u0d25\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0480\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d26\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d27\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d28\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d29\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d2a\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0d2b\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d2c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d2d\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d2e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0d2f\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0d30\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d31\1\0\1\u0d32\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d33\2\141"+ + "\1\u0d34\1\u0a6f\5\141\1\u0d35\3\141\1\u0464\1\u020c\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d36\4\141"+ + "\1\u0a3a\4\141\1\u0d37\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0d38\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0d39\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d3a\15\141\1\u03ec\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0d3b\5\141\1\u0d3c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d3d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0d3e\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d3f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0d40\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u04ec\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u06b4\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0d41\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d42\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d43\3\141\1\u0d44"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0d45"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d46"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0d47\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0d48\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d49\7\141"+ + "\1\u0d4a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0bff\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0d4b\11\141\1\u0c02\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0d4c\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d4d\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0d4e\1\u0d4f\15\141\1\u0d50\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d51\15\141\1\u0d52\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0d53\1\141\1\u0d54"+ + "\1\141\1\u0d55\3\141\1\u06b3\2\141\1\u0d56\2\141\1\u0a66"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d57"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0d58\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0d59\6\141"+ + "\1\u0d5a\6\141\1\u0d5b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0d5c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0d5d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0d5e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d5f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u03d2\5\141\1\u0b16\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0d60\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d61\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0d62\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0d63\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0d64\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0d65\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u06b4\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d66\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0d67\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0827"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d68\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d69\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d6a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d6b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0d6c\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0d6d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0d6e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d6f\1\u0d70\2\141"+ + "\1\u0d71\1\u0d72\1\u0d73\1\u0c27\6\141\1\u0d74\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u08b8\7\141\1\u0d75"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0d76\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d77\17\141"+ + "\1\u0d78\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0d70\1\141\1\u0ada\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\1\132\1\u0d79\4\132"+ + "\1\0\2\132\1\u0d79\1\132\4\u0d79\1\132\1\0\1\132"+ + "\1\0\3\132\1\0\1\132\1\u0d79\14\0\4\132\3\u0d79"+ + "\2\132\2\u0d79\6\132\1\u0d79\5\132\1\0\1\132\2\u0d79"+ + "\2\132\4\0\7\132\1\u0d79\2\132\1\0\3\u0d79\1\132"+ + "\3\u0d79\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d7a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a55\14\141\1\u06ec\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u0d7b\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u05b6\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d7c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u05b0\2\141\1\u0d7d\11\141\1\u05b1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0d7e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u075e\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d7f\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0d80\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0d81\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0d82\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d83\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\21\0"+ + "\1\u0d84\43\0\1\u0d84\141\0\1\u0d85\146\0\1\u0d86\126\0"+ + "\1\u050c\157\0\1\u07af\124\0\1\u0d87\141\0\1\u07af\154\0"+ + "\1\u0d88\67\0\1\u0d89\205\0\1\u0d87\127\0\1\u0d8a\2\0"+ + "\1\u0d8b\3\0\1\u0d8c\125\0\1\u07af\137\0\1\u0d87\141\0"+ + "\1\u0d8d\70\0\5\u0105\1\u0d8e\1\0\10\u0105\2\0\1\u0105"+ + "\5\0\2\u0105\14\0\2\u0105\1\u0d8e\24\u0105\1\0\4\u0105"+ + "\5\0\12\u0105\1\0\7\u0105\2\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\12\67\1\u02c6\13\67\1\0"+ + "\37\67\1\u02c6\7\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\20\67\1\114\5\67\1\0"+ + "\34\67\1\114\12\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u0d8f\23\67\1\0"+ + "\13\67\1\u0d8f\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\2\67\1\u02f2\23\67\1\0"+ + "\13\67\1\u02f2\33\67\1\0\24\67\1\0\1\67\1\0"+ + "\2\67\2\0\6\67\1\0\26\67\1\0\25\67\1\u0116"+ + "\21\67\1\0\1\u0116\23\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\12\67\1\u0d90\13\67\1\0\37\67"+ + "\1\u0d90\7\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\10\67\1\u0d91\36\67"+ + "\1\0\1\67\1\u0d91\22\67\1\0\1\67\1\0\2\67"+ + "\2\0\3\67\1\u014f\2\67\1\0\26\67\1\0\7\67"+ + "\1\u014f\37\67\1\0\24\67\1\0\1\67\1\0\2\67"+ + "\2\0\6\67\1\0\26\67\1\0\25\67\1\u02f9\21\67"+ + "\1\0\1\u02f9\23\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\2\67\1\u07ba\23\67\1\0\13\67\1\u07ba"+ + "\33\67\1\0\22\67\15\0\1\u0d92\62\0\1\u0d92\40\0"+ + "\1\132\10\0\1\132\1\141\4\132\1\0\2\132\1\141"+ + "\1\132\4\141\1\132\1\0\1\132\1\0\3\132\1\0"+ + "\1\132\1\141\14\0\4\132\3\141\2\132\2\141\6\132"+ + "\1\141\5\132\1\0\1\132\2\141\2\132\4\0\7\132"+ + "\1\141\2\132\1\0\3\141\1\132\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d93\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0d94\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0314\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0d95\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d96\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0426\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0d97\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0554\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0317\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0d98\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u082e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\15\0\1\u0d99\62\0\1\u0d99"+ + "\121\0\1\u0d9a\57\0\44\u0ab7\1\u0590\74\u0ab7\61\0\1\u0d9b"+ + "\141\0\1\u0d9c\150\0\1\u0d9d\140\0\1\u0d9e\127\0\1\u0584"+ + "\151\0\1\u080a\126\0\1\u0578\152\0\1\u0abe\132\0\1\u0d9f"+ + "\142\0\1\u0364\133\0\1\u0da0\143\0\1\u0da1\153\0\1\u0da2"+ + "\122\0\1\u0da3\2\0\1\u0580\132\0\1\u0da4\147\0\1\u0590"+ + "\153\0\1\u0da5\125\0\1\u07fb\143\0\1\u0da6\130\0\1\u0364"+ + "\150\0\1\u0da7\131\0\1\u0da8\153\0\1\u07f2\124\0\1\u0811"+ + "\75\0\1\u0da9\62\0\1\u0da9\40\0\1\132\10\0\1\u0817"+ + "\5\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0169\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0daa\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u0dab\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u098d\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0dac\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\5\141\1\u0dad\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\1\u0dae\5\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\1\u0daf\11\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09f3\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\3\141\1\u0392\3\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0db0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u08a5\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0db1\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0db2\3\141\1\u0db3\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0db4\1\u0db5"+ + "\17\141\1\u0dab\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0db6\11\141\1\u0c02\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0db7\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0db8\1\141\1\u0db9\13\141\1\u0dba\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0945\3\141"+ + "\1\u0dbb\4\141\1\u0dbc\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0dbd\5\141\1\u0dbe\7\141\1\u0dbf\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0dc0\1\141\1\u0dc1"+ + "\1\141\1\u0dc2\14\141\1\u0269\1\141\1\u0269\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0dc3\11\141\1\u0dc4"+ + "\1\u0dc5\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u01fa"+ + "\5\141\1\u0dc6\12\141\1\u0dc7\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0dc8\1\141\1\u0dc9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0dca\1\141\1\u0dcb"+ + "\3\141\1\u04ce\1\141\1\u0dcc\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u0614\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u088f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0392\1\141\1\u0dcd\11\141\1\u0dce\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0dcf\5\141\1\u0dd0"+ + "\1\141\1\u0dd1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0dd2\14\141\1\u0dd3\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0dd4\1\u0dd5\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0dd6\21\141\1\u0dd7\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0dd8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0dd9\12\141\1\u0dda"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0ddb\5\141"+ + "\1\u0ddc\1\141\1\u0ddd\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0dde\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ddf\1\141\1\u0de0\5\141\1\u0de1\3\141"+ + "\1\u0386\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0de2"+ + "\5\141\1\u0de3\7\141\1\u0de4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0de5\3\141\1\u0de6\5\141\1\u0de7"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0de8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0de9\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0dea\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0deb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0830\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0dec\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u06ce\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0ded\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u063d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0dee\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0def\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0df0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0269\11\141\1\u0b0e"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0df1"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u047b"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0df2"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0df3"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0df4"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0df5"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0b0e"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0df6"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0df7"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u03c6"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b0d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0841\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0df8\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0df9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0dfa\1\u0dfb\1\u0dfc"+ + "\1\u0dfd\1\u0dfe\1\u0dff\1\141\1\u0e00\1\u0e01\1\u0e02\1\u0e03"+ + "\1\u0e04\2\141\1\u0e05\1\141\1\u0e06\1\u0e07\3\141\1\u0779"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0e08\6\141"+ + "\1\u0e09\2\141\1\u0e0a\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0e0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e0c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0916\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e0d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e0e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e0f\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e10\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0617\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0e11"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0e12\2\141\1\u0e13\1\u0e14\6\141\1\u0e15"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e16"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u047b"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0e17"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ec"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0e18"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e19"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e1a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e1b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e1c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0e1d"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0e1e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0dbd\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0e1f\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0e20\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0e21\10\141\1\u0e22"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0b2f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0e23"+ + "\11\141\1\u0392\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e23\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e24\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e25\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0e26\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0e27\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e28\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0e29\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e2a\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e2b\1\141\1\u0e2c\1\u08ed\3\141\1\u0411\2\141\1\u0b89"+ + "\4\141\1\u06e9\2\141\1\u08ef\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e2d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u0e2e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0e2f\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0e30\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0e31\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u0e32\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0e33\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0e34\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0e35\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e36\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e37\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u0e38\1\u0dd7\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0e39\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0e3a\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e3b\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e3c\11\141\1\u0e3d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0e3e\3\141\1\u040d\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e3f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e40\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e41\1\141\1\u0e42"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0627"+ + "\1\u0e43\4\141\1\u0e44\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0e45\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0e46\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0921\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0e47\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0e48\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e49\1\141\1\u0e4a\1\u0e4b\1\u0e4c\1\u0e4d\1\u076f"+ + "\1\u0e4e\1\u0e4f\1\141\1\u0e50\1\u0e51\1\u0e52\4\141\1\u0e53"+ + "\1\u0e54\3\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0e55\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e56\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e57\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0e58\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0e59\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0e5a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e5b\1\141\1\u0e5c\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0e5d\6\141\1\u0e5e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e5f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0e60\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e61\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0e62\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e63\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0e64\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0e65\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0e66\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0e67\1\u0610\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0e68\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0e69\3\141\1\u0bad"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e6a"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03ee"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0e6b"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0e6c"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0bf6"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0e6d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e6e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0e6f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e70\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e71\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0e72\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0e73\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0e74\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e75\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0e76\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0e77\3\141\1\u06ab\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0e78\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e79\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u0e7a\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u08f6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e7b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0747\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0e7c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0e7d\6\141\1\u0e7e\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e7f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0e80\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0e81\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e82\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0e83\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0e84\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u048b\1\141\1\u0627\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0e85\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0e85\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0e86\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0614\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0e87\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u044f\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0e88\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0291\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03d4\24\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u03d4\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e89\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0e8a\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0e8b\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0200\17\141\1\u03c1\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u05d1\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e8c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0e8d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e8e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0e8f\1\141\1\u0e90\1\u0e91\7\141\1\u05cb\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e92\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0e93\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0cd7\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0e94\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0e95\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0e96\1\u0e97\1\141\1\u0e98\1\141\1\u0e99\2\141"+ + "\1\u0e9a\1\141\1\u0e9b\4\141\1\u0e9c\1\u0e9d\1\u0e9e\1\u0e9f"+ + "\1\141\1\u0ea0\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ea1\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0ea2"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0ea3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0ea4\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0ea5\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0617"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ea6"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ea7\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0ea8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ea9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0eaa\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0eab\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u05d2\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0eac\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0ead\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0eae\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0eaf\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0bad\6\141\1\u0eb0"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0eb1"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0eb2"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0eb3"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0667"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0eb4"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0eb5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0eb6"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0eb7"+ + "\5\141\1\u0eb8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0eb9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0eba\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\141"+ + "\1\u0ebb\5\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0ebc\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0ebd\21\141\1\u0ebe\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0ebf\2\141\1\u0ec0\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0ec1\1\141\1\u0ec2\1\141"+ + "\1\u0ec3\7\141\1\u0386\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u0ec4\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ec5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ec6\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0a26\7\141\1\u0ec7\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ec8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u0ec9\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0eca\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0ecb\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0ecc\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ecd\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u0ece\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06ce\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0ecf\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ed0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0449\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0ed1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0ed2\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08cd\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0ed3\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0ed4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0ed5\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0ed6\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0ed7\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u08f4\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0ed8\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0754\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0ed9\5\141\1\u0eda\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0edb\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0edc\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u03b6\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0edd\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ede\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0edf\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0ee0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ee1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0ee2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0ee3\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0ee4\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0ee5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0ee6\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0be7\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u03a8\3\141\1\u0269\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0ee7\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0b78\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ee8\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ee9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0eea\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0afc\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0eeb\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0eec\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0821\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0eed\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0eee\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0eef\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ef0\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ef1\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0ef2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09d3\1\u0ef3\1\u0ef4"+ + "\1\u076f\1\141\1\u0ef5\1\141\1\u0ef6\1\141\1\u0ef7\4\141"+ + "\1\u0ef8\4\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0ef9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0efa\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\26\141\1\u0779\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0efb\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0efc\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0efd\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0efe\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0eff\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0461\4\141\1\u08a6\1\141\1\u0208\3\141\1\u0464\1\u020c"+ + "\1\141\1\u0753\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08ab\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f00"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0f01\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f02\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0f03\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0f04\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0480\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0f05\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f06\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f07\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0f08\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0f09\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f0a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f0b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f0c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f0d\7\141\1\u0f0e\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0f0f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f10\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u0f11\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f12\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0f13\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f14\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u0f15\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0f16\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f17\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0f18\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f19\1\u0f1a\11\141\1\u0f1b\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f1c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f1d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0e17\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0f1e\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u05b7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0f1f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0f20\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f21\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\25\141\1\u03cc\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f22\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u087a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f23\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0f24\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f25\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0f26\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f27\21\141\1\u0705\1\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f28\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u0f29\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0f2a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0f2b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f2c\1\141\1\u0f2d"+ + "\1\141\1\u0f2e\3\141\1\u0f2f\6\141\1\u0f30\1\u0f31\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f32\1\u0f33"+ + "\2\141\1\u0f34\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0adb"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f35\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u0f36\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0f37\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f38\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f39"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f3a\3\141"+ + "\1\u0750\15\141\1\u0f3b\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0f3c\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0f3d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0f3e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0b65\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0392\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0f3f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0ddf\3\141\1\u03c6\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0f40\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0a26\11\141\1\u0dbd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u05b7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0d17\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u097d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u05d9\5\141\1\u0f41"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f42"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0f43\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f44\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f45\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f46\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0bb4\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0f47\2\141"+ + "\1\u09a4\1\u0f48\13\141\1\u0779\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0f49\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u044f\1\141\1\u08b8\21\141\1\u0d07\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0f4a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0f4b\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u08b8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0afe\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0f4c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0f4d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0afe\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0f4e\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0f4f\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u0f50\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0f51\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0f52\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u0f53\2\141\1\u03e7"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f54"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0f55"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f56"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0f57"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0f58"+ + "\15\141\1\u0f59\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0f5a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f5b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0f5c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0f5d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f5e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0f5f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f60\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0eff\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f61"+ + "\5\141\1\u0f62\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0b78\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0f63\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0f64\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u0f65\3\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0f66\4\141\1\u0f67\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f68\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0f69\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u0f6a\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f6b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f6c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u0200\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f6d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0f6e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0f6f\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0f70\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u06fe\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f71\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f72\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u0f73\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f74\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0f75\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u0f76\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0f77\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0f78\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0f79\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f7a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0f7b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u08f6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u04b7\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0f7c\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u08cb\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0ba0\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u08f6\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0f7d\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u01c7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0485\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f7e\20\141\1\u0f7f\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0f80\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0f81\3\141\1\u0f82\1\141\1\u0f83\1\u0f84"+ + "\1\u0f85\1\u0f86\1\141\1\u0f87\1\u0f88\3\141\1\u0f89\2\141"+ + "\1\u06ec\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0f8a\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f8b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0f8c"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u03f2\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f8d\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f8e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0f8f\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0f90\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0f91\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0f92\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f93\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f94\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0f95\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0f96\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u05ba\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0f97\5\141\1\u0f98\6\141\1\u0e88"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0f99"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0f9a\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0f9b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a05\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0f9c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f9d\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f9e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0f9f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fa0\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0fa1\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393\1\u0fa2"+ + "\2\141\1\u0fa3\1\141\1\u0fa4\1\141\1\u0fa5\3\141\1\u0fa6"+ + "\3\141\1\u0fa7\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u0fa8\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0fa9\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u047b\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0faa\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fab\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0fac\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0cdf\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0fad\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0fae"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u03e6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0faf\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0fb0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0ccf\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0fb1\5\141\1\u0fb2\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0fb3\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0fb4\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0fb5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0750\3\141\1\u060f\2\141\1\u060f\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0fb6\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fb7\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u09e4\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0fb8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0fb9\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u04f9\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0fba\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0fbb\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0fbc\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fbd\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0fbe\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0fbf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fc0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0fc1\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0fc2\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0fc3\1\u0fc4\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0fc5\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0cd7\12\141\1\u0768"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0fc6"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0fc7"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0fc8"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ec"+ + "\4\141\1\u0fc9\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0fca\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fcb\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fcc"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0fcd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fce"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0fcf"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0fd0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0fd1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0fd2"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0fd3"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0fd4"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0fd5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fd6"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0fd7"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u06ce"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0fd8\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0fd9"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fda"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0fdb"+ + "\6\141\1\u0fdc\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0617\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0fdd\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0fde\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0fdf\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0fe0\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0fe1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0fe2\11\141\1\u0cab\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u09c1\21\141\1\u0fe3\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0fe4\2\141\1\u0ec0\1\u0fe5\11\141"+ + "\1\u0fe6\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u020e"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0fe7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0fe8\1\141"+ + "\1\u0fe9\15\141\1\u0fea\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0feb\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0fec\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0fed\6\141\1\u0fee\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0fef\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0ff0\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0ff1\7\141\1\u0269\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0ff2\6\141\1\u09d0"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0ff3"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0ff4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff5"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05d1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0ff6"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff7"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ff8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ff9"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0ffa\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0614\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ffb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0ffc\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ffd\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ea5\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0ffe\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0fff\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u069a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1000\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1001\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0269"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1002"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0eb0"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u08cb"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1003"+ + "\10\141\1\u1004\4\141\1\0\4\141\1\132\4\0\11\141"+ + "\1\u1005\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1006\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1007\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1008\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0386\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u0a3e\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u06f4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0d0b\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1009\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05d9\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u100a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u100b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u100c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u100d\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u100e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u100f\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1010\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1011\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1012\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0866\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0443\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1013\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1014\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1015\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1016\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0d27\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0bc5\11\141\1\u1017\7\141\1\u1018\1\141\1\u06ec\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u08a5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1019\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u101a\7\141"+ + "\1\u08ea\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u101b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u101c"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u08ab"+ + "\1\u101d\1\u101e\1\141\1\u101f\2\141\1\u1020\3\141\1\u1021"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0a3e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1022"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1023"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u03d4"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1024\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1025\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1026\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1027\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1028\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1029\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u102a\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u102b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u102c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0d32\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d33\1\141\1\u0488\1\u102d\1\u0a6f"+ + "\3\141\1\u048b\1\141\1\u0d35\3\141\1\u0464\1\u020c\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0455\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0d65\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u102e\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u102f\3\141"+ + "\1\u040d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1030\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1031\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0920\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1032\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1033\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1034\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1035\7\141\1\u0d07\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1036\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1037\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1038\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1039\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u09a6\1\141\1\u103a"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u103b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u103c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u103d\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u103e\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u103f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1040\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1041\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1042\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u03ce\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1043\1\u1044\1\u1045\1\141"+ + "\1\u1046\3\141\1\u1047\1\141\1\u1048\1\u1049\4\141\1\u104a"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u104b\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u104c\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u104d\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0e0c\1\141"+ + "\1\u044f\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u104e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u104f\4\141\1\u1050\4\141\1\u1051\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1052\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1053\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1054\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u104d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1055\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1056\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1057\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u03d4\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1058\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1059\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0d4a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u105a\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u05d1\15\141\1\u105b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u105c\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u105d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u0269\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u105e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u105f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03a8\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1060\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1061\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1062\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1063\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u01ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1064\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1065\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1066\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1067\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1068\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1069\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u106a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u106b\3\141\1\u04c5\1\u106c\2\141"+ + "\1\u060f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u106d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0f27\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u106e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u106f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1070\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u102f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1071\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1072\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1073\7\141\1\u0d75\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1074\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1075\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\1\132\1\u1076\4\132\1\0"+ + "\2\132\1\u1076\1\132\4\u1076\1\132\1\0\1\132\1\0"+ + "\3\132\1\0\1\132\1\u1076\14\0\4\132\3\u1076\2\132"+ + "\2\u1076\6\132\1\u1076\5\132\1\0\1\132\2\u1076\2\132"+ + "\4\0\7\132\1\u1076\2\132\1\0\3\u1076\1\132\3\u1076"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1077"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1078"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1079"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u107a"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u03ce"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u107b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u107c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u107d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u107e"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u107f"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\22\0\1\u1080\37\0\1\u1080\136\0\1\u1081\141\0\1\u0d88"+ + "\141\0\1\u1082\140\0\1\u07af\146\0\1\u0d8b\3\0\1\u0d8c"+ + "\130\0\1\u07a7\147\0\1\u1083\130\0\1\u1084\135\0\1\u1085"+ + "\60\0\2\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\20\67\1\u02ee\5\67\1\0\34\67\1\u02ee\12\67"+ + "\1\0\24\67\1\0\1\67\1\0\2\67\2\0\6\67"+ + "\1\0\26\67\1\0\25\67\1\u0117\21\67\1\0\1\u0117"+ + "\23\67\1\0\1\67\1\0\2\67\2\0\4\67\1\u1086"+ + "\1\67\1\0\26\67\1\0\31\67\1\u1086\15\67\1\0"+ + "\22\67\16\0\1\u1087\41\0\1\u1087\60\0\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1088\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0317\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0426\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0169\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1089\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0216\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\16\0\1\u108a"+ + "\41\0\1\u108a\136\0\1\u108b\156\0\1\u0d9c\127\0\1\u0590"+ + "\142\0\1\u0da0\143\0\1\u07fb\151\0\1\u0590\127\0\1\u058b"+ + "\132\0\1\u108c\110\0\1\u108d\177\0\1\u108e\133\0\1\u058e"+ + "\140\0\1\u0da7\134\0\1\u108f\140\0\1\u0da0\76\0\1\u1090"+ + "\41\0\1\u1090\60\0\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1091\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0b78\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1092\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\3\141\1\u1093\2\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\4\141\1\u1094\1\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\1\141"+ + "\1\u0817\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1095\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1096\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1097\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1098\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u0db9\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1099\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u109a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u109b"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u109c"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393"+ + "\6\141\1\u109d\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u109e\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u109f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10a0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u03d4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u10a1\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1051\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u10a2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10a3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u10a4\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u10a5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u10a6\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u10a7\12\141\1\u10a8\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u10a9\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10aa\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10ab\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u10ac\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0393\1\141\1\u10ad\1\u10ae\1\141"+ + "\1\u10af\1\u10b0\1\u109d\1\u10b1\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u10b2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u10b3\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u10b4\10\141\1\u0753\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u10b5\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u10b6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u10b7\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u10b8\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0461\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u10b9\1\141\1\u0464\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u10ba\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0ed8\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u10bb\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u10bc\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10bd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u10be\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10bf\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10c0\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u06b2\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u10c1\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u10c2\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u10c3\3\141\1\u10c4\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u10c5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u10c6\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10c7\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u10c8\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10c9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u10ca\11\141"+ + "\1\u03ec\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05ba\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u10cb\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u10cc\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u10cd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u10ce\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10cf\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10d0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10d1\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u10d2\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u0916\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u10d3"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u10d4\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05d8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u10d5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u10d6\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u10d7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0b0e\1\141\1\u0b0d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u10d8"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u10d9"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u10da"+ + "\7\141\1\u10db\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u10dc\2\141\1\u10dd\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0b15\11\141\1\u10de\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u10df\21\141\1\u09f4\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u10e0\2\141\1\u10e1"+ + "\1\u10e2\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0a46\13\141\1\u10e3\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u10e4\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u10e5\1\u10e6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u040d\6\141\1\u10e7\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u10e8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u10e9\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u10ea\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u10eb\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u10ec\1\u10ed\4\141"+ + "\1\u0245\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10ee\2\141\1\u10ef\3\141\1\u09d0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u10f0\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u10f1\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10f2\1\141\1\u0955\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0955\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u10f3\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10f4\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u10f5\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u10f6\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u10f7\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u05d1\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u0e13\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u10f8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u10f9\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fa\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1074\7\141\1\u10fb\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u10fc\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0392\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u10fd\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u10fe\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u10ff\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u094d\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u098b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1100\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1101\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1102\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1103\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1104\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1105\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1106"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1107\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u1108\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1109\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0895\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u110a\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u110b\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0c6e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u110c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u110d\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u110e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u110f\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1110\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1111\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1112\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1113\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1114\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1115\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1116\2\141\1\u1117\2\141\1\u1118\2\141\1\u1119"+ + "\1\u111a\2\141\1\u111b\2\141\1\u111c\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u111d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u111e\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u111f\1\141\1\u0464\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1120\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1121\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1122\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1123\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1124\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1125\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1126\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1127\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1128\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1129\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u112a\20\141\1\u112b"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u112c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u112d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u112e"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u112f"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1130"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1131"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1132"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1133"+ + "\6\141\1\u1134\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1135\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0f27\4\141\1\u0e6a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1136\2\141\1\u0ec0\1\u1137\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1138\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0408\1\141\1\u1139\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u113a\3\141"+ + "\1\u113b\6\141\1\u04d8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u113c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0cc5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10ec\2\141\1\u113d\2\141\1\u113e\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0830\11\141\1\u09d0\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u113f\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1140\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1141\11\141\1\u1142\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1143\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1144\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1145\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1146\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1147\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1148\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1149\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u114a\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u114b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u114c\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u114d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0820\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0291\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u114e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u114f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1150\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0901\3\141\1\u0bad\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1151\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1152\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1153\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1154\13\141\1\u0269"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1155"+ + "\17\141\1\u1156\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1157"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0396\2\141\1\u0818\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1158\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u1159\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u115a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0bad\6\141\1\u0eb0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u115b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u03d4\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u115c\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u115d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u115e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u115f\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1160\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1161\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1162\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1163\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u03ce\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1164\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1165\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1166\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0406\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1167\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1168\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1169\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u116a\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u116b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u04c5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0945\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u116c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u116d"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0"; - private static final String ZZ_TRANS_PACKED_3 = - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u1408" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1409\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u140a\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u140b\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u140c\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u140d\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u140e\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u140f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1410" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1411" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1412\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1413\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1414\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1415\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1416\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1417" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1418\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1419\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u141a\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0a91\27\115" + - "\1\u141b\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u141c\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u03ff\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u071b\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u141d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u141e\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0284\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1110\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u141f\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1420\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1421" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0473\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1422\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u08a9\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1423\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u0785\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1424\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1425\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1426\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u1427\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1428\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1429\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u142a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u04c8\30\115\1\u12a1\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u142b\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u142c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u142d\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u142e\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u142f\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1430" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1431\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1432\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1433\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1434\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0ad2\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1435\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u070d\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02f0\3\115" + - "\1\u070e\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1436\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1437\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\41\115\1\u1438\5\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1439\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u0948\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u143a\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u12a1\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\42\115\1\u143b" + - "\4\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u143c\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u0e0a\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u143d\31\115\1\u143e\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u143f\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\40\115\1\u1440\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1441" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0264\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u143e\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1439\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1442\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1443\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\40\115\1\u1444\6\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1445\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1446\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1447" + - "\1\115\1\0\1\106\1\u1448\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1449\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0c09\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u144a\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u144b\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u07aa\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u144c\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u144d\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u144e\21\115\1\u0608" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u02f6\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u144f\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1450\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1451\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1452\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u02ae\1\115\1\u1453" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u02df\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1454\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1455\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1456\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1457\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1458\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1459" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u145a\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0b0b\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u145b\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u145c\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u145d\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u145e\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u145f\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1460\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u1461\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1462\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1463" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1464\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\40\115\1\u1465\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u092d\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1466\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0cd6\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1467\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0136" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u05cd" + - "\21\115\1\u1468\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1469\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u146a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u146b\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u146c\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u146d\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u094b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u146e\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1053\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u146f\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1470\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u1471\1\115\11\0\4\115\1\u1472" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u045f\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u1473\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u010f\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1474\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1475\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1476\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1477\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1478\2\115" + - "\1\u1479\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u147a\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u147b\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u147c\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u147d\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u045a\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u147e\2\115\1\u045a\2\115\1\u147f" + - "\25\115\1\u045a\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1480\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1481\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u045a\1\u118b\4\115\1\0" + - "\1\106\1\u1482\1\115\1\0\5\115\11\0\1\u147e\1\115" + - "\1\u06c1\1\u045a\1\u1483\1\115\1\u1484\25\115\1\u1485\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u07bd" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u0ffc\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u1486\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u072e\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1487\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1488\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1489\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u1247\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u0c14\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u148a\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u148b\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u148c\25\115\1\u148d\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u148e\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u148f\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1490\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u0f37\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u1491\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1492\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1493\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1494\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u1495" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1496\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1497\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1498\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u1499\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u149a\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u149b\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u149c\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u149d\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u149e\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u149f\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u035b\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u14a0\1\115" + - "\1\0\5\115\11\0\6\115\1\u14a1\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u14a2\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u14a3" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u14a4\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u14a5\3\115\1\0\1\106\2\115\1\0\3\115\1\u036b" + - "\1\115\11\0\4\115\1\u14a6\1\u14a7\1\u14a8\25\115\1\u14a9" + - "\1\u14aa\6\115\1\u0a4d\2\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u14ab\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u14ac\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u14ad\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1497\26\115\1\u14ae" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u14af\3\115\1\u14b0\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u14b1\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u14b2\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u14b3\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u067b\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u14b4" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u14b5\25\115\1\u0556\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u045f\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0630\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u04fc\1\u1287" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u06cf\1\115\1\u14b6\1\u128a\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u14b7\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u14b8\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u14b9\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u035b\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u14ba\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u14bb\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u14bc" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0cd6\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u034f\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u14bd\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0cbc\1\115\1\0" + - "\5\115\11\0\1\u0f69\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u14be\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u10c7\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u095b\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u14bf" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0a04\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u14c0\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u14c1\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u14c2\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u14c3\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0a09\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u14c4\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u038b\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u14c5\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u14c6\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u14c7\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u14c8" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u04e9" + - "\25\115\1\u0556\1\u0de6\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0b47\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\41\115\1\u0361\5\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u14c9\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u14ca\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u02ac" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u14cb" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u14cc\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u14cd\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u14ce\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u14cf\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u14d0\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u14d1\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u14d2\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u14d3\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u14d4\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u14d5" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u14d6" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u14d7\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u14d8\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u0dcb\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u14d9\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0739\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u14da\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0de0" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u14db\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u14dc\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1064\1\u14dd\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u14de" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u14df" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u14e0\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u1356\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u14e1" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u14e2\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u14e3\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u105a\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u14e4\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u06a9\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0fff\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u14e5\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u057b\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u14e6\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u0eef" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u14e7\1\u047a\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u14e8\1\115\1\u1289\1\u14e9\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u14ea\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u14eb\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u14ec\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u14ed\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u14ee\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u14ef\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u14f0\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u010f\4\115\1\u030a\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u14f1\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u14f2" + - "\1\u14f3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u14f4\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u14f5\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u14f6\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\24\115\1\u14f7\22\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u0a18\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u14f8\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u14f9\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u14fa\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u14fb\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u14fc\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u14fd\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u14fe\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0cd6\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u14ff\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1500\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1501\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1502\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u01da\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1503\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1504\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u1505\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1506\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1507\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1508\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u02f6\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u12f4\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u0eea" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1509\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u150a\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u150b\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u150c\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u150d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u150e" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u150f\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1510\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u0f72\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1511\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1512\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u032a\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u1513\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1514" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1515" + - "\25\115\1\u1516\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0c03\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1517\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1518\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1519\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u04a8\4\115" + - "\1\u151a\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u02e7\24\115\1\u0ae0\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u151b\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u038b\26\115\1\u0341\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\40\115\1\u0492" + - "\6\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u048e\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u151c\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u151d\33\115\1\u04fa\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0341\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u02c7\4\115" + - "\1\u04fa\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u151e\3\115\1\u0492\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0908\1\u151f\1\115\1\u1520\2\115" + - "\1\u1521\21\115\1\u1522\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u0a12\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1523\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1524\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1525" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1526\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1527\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u1528\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1529\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u01da\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u152a\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u152b\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u152c\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u152d" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u152e\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u109b\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u152f\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1530\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1531\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1532\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u047a\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u0136\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u1533\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1534\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1535\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u07ab\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1536\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1537\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u01c8\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0f69\2\115\1\u1538" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1539" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u153a\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u153b\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u153c\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0195\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u153d\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u153e\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u153f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1540" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1541" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1542\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1543" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1544\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1545\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1546\1\u1547\1\u1548\3\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u080e\1\115\11\0\2\115\1\u1549" + - "\1\u154a\1\u154b\1\u154c\1\u154d\21\115\1\u154e\3\115\1\u154a" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0e53" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u154f\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1550\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1551\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1552\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1553\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1554\1\u1555\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1556\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1557\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1558\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1559\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u155a" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u155b\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u155c\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u155d\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1430\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1557\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u155e\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u155f\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1560" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1561\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1562\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u1563\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1564\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1565" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1566\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u1567" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1568\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0611\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u02e3\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u1569\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u156a\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u0f26\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u156b\1\115\1\u0524\1\u156c" + - "\23\115\1\u0556\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u156d\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u156e\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u156f\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1570\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1571" + - "\1\u1127\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1572\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1127\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u049a\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1573\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1574\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1575\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1576\33\115" + - "\1\u1577\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1578\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u1579\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u157a\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u157b\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u157c\4\115\1\0" + - "\1\106\1\u157d\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u157e" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u157f" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1580" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1581\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1582\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1583\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0e81\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1584\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1365\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1585\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1586\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1587\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1588\1\u1589\24\115\1\u158a" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u158b\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u158c\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u158d\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1029\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u158e\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u158f\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1590\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1591\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u12a0\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u0f07\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u138b\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1592\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u0f07\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1387\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1593\26\115\1\u039a\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1594" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1595" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1596\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0495\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u028c\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1597\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1598\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0b9f\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1599\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u159a\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u159b\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u159c\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u159d\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u159e\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0f0e\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u159f\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u15a0\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u02ac\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u15a1\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u12bb\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u15a2\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u02a4\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u15a3\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u15a4" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u15a5" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15a6\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u132b\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u15a7\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u15a8\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1332\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u15a9\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u15aa\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u15ab\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u15ac" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u15ad\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15ae\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15af\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u012f\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u13ad\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0fba\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u15b0\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u15b1\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u15b2\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u15b3\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u15b4\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u15b5\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u15b6\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u057a\1\u15b7" + - "\26\115\1\u15b8\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u01da\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u15b9\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u15ba\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u15bb\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u04d7\1\u0728" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u15bc\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u15bd\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u15be\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u15bf\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u15c0\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u15c1\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u15c2\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u15c3\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u15c4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\37\115\1\u15c5\7\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u15c6\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u15c7\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15c8\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u15c9\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u15ca\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u15cb\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u15cc\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u15cd" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0af0\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u15ce\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u15cf\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u15d0\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u15d1\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u12cd\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u15d2\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u0d66" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u15d3\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u15d4\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u15d5\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u15d6\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u15d7\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u15d8\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u15d9\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u15da\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u0479\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u15db\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u15dc\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u13d2\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u15dd\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u15de\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0fd5" + - "\1\u04c8\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u15df\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u15e0\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u15e1\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u15e2\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u15e3\2\115\1\u15e4" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u15e5\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u034b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u02f0\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u15e6\1\115\1\0" + - "\5\115\11\0\27\115\1\u034b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0745\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u15e7\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u15e8\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u091b" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15e9\1\115\1\0\5\115\11\0" + - "\3\115\1\u15ea\2\115\1\u15eb\20\115\1\u034b\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u0b93\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u15ec" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0790\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u15ed\1\u15ee\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u15ef\2\115\1\u15f0\22\115" + - "\1\u15f1\2\115\1\u15f2\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u15f3\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u15f4\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u06a9\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u15f5\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u15f6" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0a7f" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u15f7\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u07c2\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u056b\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u07b7\1\u0369\1\115\1\u15f8" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u125c\1\115" + - "\11\0\2\115\1\u1025\3\115\1\u15f9\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u15fa\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u15fb\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u15fc\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u15fd" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u15fe\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0f97\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u15ff\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1600\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1601\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1602\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1603\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1604\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1605\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1606" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1607" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1608\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1414\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1609\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u160a\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u160b\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u160c\1\115\11\0\35\115\1\u160d\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u160e" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u160f" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0611\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1610\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1611\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1612\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1613\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1614\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u1615\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1616\27\115\1\u1617\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1618" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1619\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u04d8" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u161a\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u161b" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0d66\1\115\11\0\6\115\1\u161c\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u161d\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u161e\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u161f\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u01da\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1319\4\115" + - "\1\u1620\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1621\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1622\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u01da\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0778\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1623" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1624\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u1625\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1247\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1626" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1627\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1628\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1629\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\41\115\1\u162a\5\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u162b\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u162c\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\43\115\1\u01c8\3\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0369\1\115\1\u0be7" + - "\1\115\1\0\1\106\1\u162d\1\115\1\0\5\115\11\0" + - "\3\115\1\u162e\3\115\1\u162f\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u1445\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u0acb\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1630\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1631\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1632\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1633\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u120e" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1634\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u1635\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u1636\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1637\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1638\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1639\30\115" + - "\1\u0c7b\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u163a\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u163b\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u163c\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u163d\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u163e\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0738\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u163f\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1640" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1641\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u122a" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1642\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u02ae\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u0dcb\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1643\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1644\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1645\1\u1646\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1647\1\u1648" + - "\1\115\1\u1649\1\u164a\23\115\1\u164b\4\115\1\u02dd\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u164c\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u164d\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ca3\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u164e\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0ffa" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u164f\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1650\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1651\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u0ffa\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u035b\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0d79\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1652\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1653\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1654\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1655" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1656\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1657\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0c01\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1658\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1659\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u165a\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u165b\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u03d0\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u0950\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u165c\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u165d\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u165e\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u165f\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u1660\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1244\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1660\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u1661\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1662\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1663\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u045a\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u1664\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1665\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1666\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u045a\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u045a\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u045a" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u045a\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u035b\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1667\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\31\115\1\u02f3\15\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u02f3\1\u045a\22\115\1\u1668" + - "\2\115\1\u1669\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u166a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u02f3\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u166b\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u166c" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u166d" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u166e\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u02b4\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u166f\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1670\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1671\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1672\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0345\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0d79\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u0345\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1673\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u1674\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1675\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1611\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1676\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1677\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1678\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1679\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1194\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u167a\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u167b\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u167c\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u167d\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u167e\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u167f\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1680\1\u1681" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1682\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u1683\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1684\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1680\1\u125b\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1685\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1686\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1687\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u038b\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1688\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0169\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1689\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u168a\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u168b\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u168c\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u168d\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\44\115\1\u168e" + - "\2\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u168e\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u168f\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1690\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0908\2\115\1\u1691\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0820\26\115\1\u0a69\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0782" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0264\1\u0ec6\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1692\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1693\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1694\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0872\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1695" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u06b0\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1696\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0a58\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1697\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1698\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1699\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u169a\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u0b06\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u0a0a" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u169b\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u169c\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u169d\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u059c\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u169e\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1172\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u169f\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u16a0\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u16a1\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u16a2\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u16a3\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u16a4\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u16a5\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u16a6\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u16a7\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u16a8\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u12cb\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u04fc" + - "\1\u047a\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u06cf\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u16a9\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u16aa\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u090b\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u11db\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u16ab" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0577\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u11e9\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u0fed\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0de0\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0c06\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u14b5\25\115\1\u0556" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u16ac\1\u047a\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u14e8\1\115\1\u14b6\1\u14e9\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u16ad\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u12cd\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u16ae" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u16af\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u0546\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u16b0\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u04a8\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u16b1\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u048f\1\u088d\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u16b2" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u04d0" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1339\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u16b3\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u16b4\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u16b5\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u16b6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u16b7\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u16b8\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u16b9\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u16ba\3\115" + - "\1\u16bb\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u07a4\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u16bc\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\2\115\1\u16bd\2\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u01c8\2\115\1\u16be\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u16bf\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u16c0\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u16c1" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u16c2" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u16c3\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u16c4\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u14f8\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u16c5\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u16c6\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u16c7\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u12ed" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u16c8" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0a80\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u16c9\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u16ca\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u16cb\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0718\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0546\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u16cc\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u16cd\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u158d\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u16ce" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0b9c\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0fa7\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u16cf\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u16d0\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u16d1\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u16d2" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u16d3\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u16d4\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u16d5\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u0efc" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u16d6" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u16d7" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u16d8\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u16d9\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u01c8\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0341\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u16da\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u16db\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u16dc" + - "\25\115\1\u16dd\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u16de\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u16df\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u16e0\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u16e1\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u16e2\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u16e3\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u16e4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u16e5\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u16e6\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u16e7\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0a08" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0f72" + - "\1\115\1\u16e8\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u16e9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u16ea\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u16eb\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u16ec\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u16ed\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\40\115\1\u16ee\6\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u16ef\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u16f0" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u16f1\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u16f2\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u16f3\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u03ea\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u16f4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u16f5\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u16f6\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u16f7" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u16f8\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u16f9\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u16fa\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u16fb\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u09fc\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u16fc\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0948\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1540\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0f69\26\115\1\u0e03\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u16fd\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u16fe\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u16ff\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1700\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1701\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0cf7\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1702\21\115\1\u0457\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1703\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0d71\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1704" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u06a9\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1705\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0d29\4\115\1\u1706\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0c37\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1707\4\115\1\0" + - "\1\106\1\u1708\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1709" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u170a" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1707\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u170b\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u170c\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u170d\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u170e\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u170f\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1710\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1711\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1712\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u1430\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1713\1\u1714\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1715\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1716\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1306\26\115" + - "\1\u170f\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u1717" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1718\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u12cd\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1719\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u171a\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1364" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u171b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u171c\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u171d\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u171e\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u171f\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u09aa\1\115\1\u11dd\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1720\2\115" + - "\1\u1721\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1722\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1723\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1724\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1725\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u1726\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1727\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u1728\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1729\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u172a\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u172b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u172c\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u172d\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u172e\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u172f\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u1730\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1731\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1732\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1733\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1734\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1735\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u02ca\1\115\1\u047a\2\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1736\1\115\11\0\4\115" + - "\1\u1737\22\115\1\u02cd\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1738\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1739\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u137f\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1586\26\115\1\u173a" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u173b\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u173c\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u173d\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u173e\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u173f\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1740" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1741\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1742\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1743\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1744\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1745" + - "\1\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1746\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1747\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0c7a\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1748\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1749\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u174a\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u174b\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u174c\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u0d31\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u174d\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u174e\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0be5\1\u02ca\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u174f\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1750\34\115\1\u1751\6\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u06d5\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\41\115\1\u1752" + - "\5\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1753\1\115\1\0\5\115\11\0" + - "\3\115\1\u01c8\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1754\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1755\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0978\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1756\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u07a3\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1757" + - "\2\115\1\u1758\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1759\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u175a\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u175b" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u175c\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u175d" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u175e\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u175f\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1760\24\115" + - "\1\u108a\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1761\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1762\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u1763\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1764\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u1765\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1766" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1767\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1768\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1769\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u176a\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u176b\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u176c\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u176d\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u176e\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1057\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u176f\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u13c2\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1770\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1771" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1772\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1773\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1774\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1775\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1776\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1777\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1548\1\115\1\u1778\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\31\115\1\u1779" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u177a" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u177b" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u177c\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u177d\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u177e\3\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u177f\1\115\11\0\2\115\1\u1025\1\115\1\u139c" + - "\24\115\1\u1780\3\115\1\u058e\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1781\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1782\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1783\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1784\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u0a83" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1785\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1786\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u045f" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c06\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1787\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1788\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1789\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u178a\4\115\1\u178b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u178c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u178d\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u178e\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u178f" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1790\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1791" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1792" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1793\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u1794\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u1296\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1548\1\u1795\1\u1796\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u0b14" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u1797\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1798\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1053\23\115\1\u0b14\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1799\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1040\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u179a\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u179b" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u179c" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0ccf\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u179d\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u179e\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0a12\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u179f\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u17a0\26\115\1\u17a1" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u17a2\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u17a3\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u17a4\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u17a5\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u10e2\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u17a6\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u17a7\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u17a8" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1365\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0f7e\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u17a9\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u17aa\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u06bf\1\u17ab\1\115\1\u17ac" + - "\1\u015a\1\u17ad\26\115\1\u17ae\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u17af\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u17b0\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u17b1\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u17b2\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u17b3\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u17b4\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u17b5\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1423\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u17b6\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u17b7\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u05da\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u17b8\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u17b9\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u17ba\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u17bb\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u17bc\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u11db\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u17bd\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0978\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u17be\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1548\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u17bf\1\115\1\u1053\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u17c0" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u17c1" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u17c2\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u17c2\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0361\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u0510\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u17c3\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u0341\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u17c4\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u06f0\1\u02c3\2\115\1\u17c5" + - "\1\u17c6\21\115\1\u02cd\4\115\1\u0479\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u067a\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1621\37\115" + - "\1\u058f\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u17c7\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u17c8\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u17c9\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u17ca\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u17cb\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u17cc\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u0a08\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u17cd\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u17ce\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0452\27\115\1\u17cf" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u17d0\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u17d1\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0527\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u17d2\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u17d3\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u17d4\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u17d5\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u0bcc\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0e7d\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u17d6\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u01c8" + - "\1\115\1\u057a\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u17d7\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u17d8\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u17d9\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\36\115\1\u17da\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u17db\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u17dc\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u17dd" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u17de\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u0b28\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u17df\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0a43\1\u13fb\4\115\1\u17e0\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u17e1" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u17e2\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u17e3" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u17e4\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u17e5\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0fcd\3\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u17e6\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u17e7\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u17e8\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\36\115" + - "\1\u17e9\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u01c8\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u17ea\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u17eb\3\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u17ec\1\115\11\0\1\u0341" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u17ed\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u17ee\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u17ef\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u17f0\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0d6b\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u145d\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0d50\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ffa\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u17f1\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u17f2\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u17f3\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u17f4\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u17f5" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u17f6\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u17f7\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u17f8\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u17f9\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u17f8\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u17fa\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u17fb\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u17fc\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u17fd\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u17fe" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0f9a\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u17ff\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u1800\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1801\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1802\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1803\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0d02\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u045a" + - "\2\115\1\u0691\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u04fa\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u02f3\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0691\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1804\4\115" + - "\1\u045a\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1805\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1806\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u08ab\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1807\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\26\115\1\u1808\20\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u0f1b\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1809" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u180a" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u180b\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u180c\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u180d\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u180e\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u180f\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1810\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1811\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u180e" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0b21\24\115\1\u0608\12\115\1\u1812\2\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0c16\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1813\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u118b" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u0c80" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0b30\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1688\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1814\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0c7e\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1815\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u0169\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1816\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1817\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1818" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1819\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u0739" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u181a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u181b\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u181c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1069\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0ca3\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u181d\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u0cc0" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u02e4" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u14b7\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u01b7\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u02f0\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u181e\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0481\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u0cbc\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u181f\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0fde\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1820\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u05f2\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1821\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\44\115\1\u1822\2\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1823" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1824\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1825\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1826\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1827\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1828\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1829\23\115\1\u182a\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1827" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u182b\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u182c\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u182d\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u182e\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u182f\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1830\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1831\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1832\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u10de\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1833\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0c03\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u1834\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1835\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1836\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u1837\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1838\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1839\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u183a" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u183b\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u183c\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u183d\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u183e" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u183f\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\1\115\1\u1840\3\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1841\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0c06\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0543\3\115\1\u12cb\21\115" + - "\1\u0556\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u04fc\1\u1287\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u02f0\1\u0732\2\115\1\u14e9" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1842\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1843\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1844\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1845\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1842\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1846\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u03cd\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1847\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1848\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u086c\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1849" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u184a\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u0c00\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u184b\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u184c\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u184d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u184e\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u184f\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1850\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u0de7\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1851\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u045c\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1852\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1853\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1854\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1855\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1856\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1857\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1858\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1859\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u185a\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u185b\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1127\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u185c\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u185d\1\115\1\0\5\115\11\0\3\115" + - "\1\u185e\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u185f\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1860\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1861\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1862\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1783\1\115" + - "\1\0\5\115\11\0\30\115\1\u185c\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1863\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1864\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1865\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1866" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1867\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u045a\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u1868\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1869\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0630\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u186a\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0474\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u186b\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u186c" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u186d\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u186e\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u186f\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1870\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1871\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f69\3\115\1\u0f26\21\115\1\u1872\4\115" + - "\1\u1873\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1874\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u1875\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u0872\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1876\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0aad\2\115\1\u1877\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1878\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1879\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u187a\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u072e\2\115\1\u0577\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u094a\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0ec3\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u034b\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u187b\1\115" + - "\1\u187c\26\115\1\u187d\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u187e\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u187f\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u171c\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1880\1\u1881" + - "\20\115\1\u1882\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1883\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1884\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1885" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1886\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1887\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u17cb\3\115\1\u1888\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1889" + - "\1\115\1\u188a\1\115\1\u099f\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u11db\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u188b\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u188c\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u188d\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u188e\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u188c\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u188f\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1890\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1891\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1892\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1893\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0a1d\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1894\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u1895" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1896\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1897\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u048b\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1898\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u1899\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u189a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u189b\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u189c\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u189d\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u189e\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u17c9\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u189f\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u18a0\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u18a1\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u18a2\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u18a3\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0b9c\1\115\11\0\3\115\1\u1242\1\u18a4\27\115" + - "\1\u1242\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u18a5\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u18a6\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u18a7\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u18a8\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u18a9\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u02e7\24\115" + - "\1\u18aa\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u18ab\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u18ac\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u18ad\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u18ae" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u173b\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u18af\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u18b0\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u18b1" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u18b2\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u18b3\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u036b\1\115\11\0\35\115\1\u0b06\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u1086\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u18b4" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u18b5" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u18b6" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u18b7" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u18b8\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u17fe" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u18b9\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u18ba\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u18bb\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u0f0e\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u18bc\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u18bd\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u18be" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u18bf\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u18c0\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u18c1\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u18c2\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u18c3\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u18c4" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u038b\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u02f3\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u18c5\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u18c6" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u18c7\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1760\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u18c8\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u0c21\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u18c9\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1760\24\115\1\u108a\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u0ec6\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u18ca\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u18cb" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u18cc" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u18cd\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u18ce\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u18cf\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u18d0\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u18d1\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u18d2\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u18d3\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u18d4\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\46\115\1\u18d5" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u18d6\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u18d7\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u18d8\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u18d9\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u06da\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u18da\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u18db\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u18dc\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u18dd\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u18de\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u18df\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u18e0\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u18e1\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u18e2\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u18e3\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u18e4\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u18e5\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u18e6\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u18e7\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u18e8\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1050" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u18e9\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u067e\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u18ea\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u14b4\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0543\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u047a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0543" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u18eb\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u18ec\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u18ed\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u18ee\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u0a17\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u18ef\1\u18f0\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u18f1\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u18f2\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u18f3\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u18f0" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u18f4\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u18f5\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u18f6\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u18f7\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u18f8\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u18f9\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u073c\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u18fa\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u18fb" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u0978\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u18fc\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\36\115\1\u18fd\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u18fe\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u18ff\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1900\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1901\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1902" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1503\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1903\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1904\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u1905\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1906\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u035b\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u03cd\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u0395\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1907\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1908\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1909\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u190a\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u190b" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u190c\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u190d\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1606\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u190e\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u15bb\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u185b\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u190f\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1910\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1911" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1017\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1912\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1913\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1914\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u02b4\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u1915\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0fed\3\115" + - "\1\0"; + private static final String ZZ_TRANS_PACKED_3 = + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u08ac\4\141\1\u116e"+ + "\1\u060f\6\141\1\u0b89\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u116f\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0d5d\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1170\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u082f\4\141\1\u1171\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1172\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1133\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0b78\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1173\13\141\1\u1174\4\141\1\u1175\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1176\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1177\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1178\1\141\1\u05d1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1179"+ + "\1\141\1\u03e4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u117a\6\141\1\u08de\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0614\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u117b\2\141\1\u0d1d\5\141\1\u117c\4\141"+ + "\1\u117d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u117e\1\u117f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1180\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1181\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1182\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0406"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0392\7\141\1\u05d1\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1183\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0cf6\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0776\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u1184\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1185\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1186\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0b78\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0f7e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1187\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1188\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0400\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1189\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u118a\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u118b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u118c\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0c83\1\141\1\u0bad\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1074\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u118d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u118e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u118f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u03d4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1190"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u075b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1191"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1192"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u09a4"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1193"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\5\141\1\u1194\1\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0392"+ + "\5\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1195\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1196\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1197\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u067f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1198\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1199\3\141\1\u10c4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u119a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u119b\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\12\141\1\u0768\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u119d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u119e\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u119f\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u11a0\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\7\141\1\u11a1\2\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11a2\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u074f\6\141\1\u11a3\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u11a4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u06fc\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u11a5\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0408\2\141\1\u0a3e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\5\141\1\u11a6\1\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u11a7\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11a8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0916\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0916\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11a9\1\141"+ + "\1\u11aa\2\141\1\u11ab\1\141\1\u11ac\1\u11ad\3\141\1\u11ae"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u11a6"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u06b4"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11af"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0d55"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11b0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u11b1\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u11b2\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u11b4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11b7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u11b8\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u06bb\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11b9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u11ba\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0a07\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u11bb\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11bc\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u068c\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u11bd\3\141\1\u104a\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0832\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0f1a\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u11be\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03d4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u044f\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0c81\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u11bf\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u06b2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u11c0\21\141\1\u11c1\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11c2\2\141\1\u0ec0\1\u11c3\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11c4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0cc4\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u11c5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u11c6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u11c7\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u11c8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u11c9\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0c3b\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u11ca\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u03d2\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u11cb\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u11cc\2\141\1\u11cd\1\u11ce\1\u11cf\1\u09a4\1\u11d0"+ + "\1\u11d1\3\141\1\u020c\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u11d2\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u11d3\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u110d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u11d4\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u11d5\1\u11d6\7\141\1\u11d7\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u11d8\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u11d9\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u11da\1\u11d2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u11db\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0408\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11dc\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u11dd\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u11de\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u11df\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u11e0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u11e1\3\141\1\u11e2"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u05b7"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u11e3"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11e4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03c8"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u11e5\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0f1b\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u11e6\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u11e7\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11e8\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11e9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u11ea\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0d65\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11eb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u11ec\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u11b0\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u11ed\7\141"+ + "\1\u11ee\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u11ef\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u11f0"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u11f1\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u11f2\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0a34\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u11f3\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11f4\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u11f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u11f6\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0485\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u11f7\1\141"+ + "\1\u11f8\1\u1159\1\u0901\3\141\1\u11f9\7\141\1\u11fa\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u11fb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u11fc\4\141"+ + "\1\u11fd\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u11fe\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u05d5\2\141\1\u11ff\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1200\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1201\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1202\5\141\1\u0de7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1203\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1204\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u0c2c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1205\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1206\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1207\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1208\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1209\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u120a\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u120b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u120c\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u120d\17\141\1\u01ef\1\141"+ + "\1\u120e\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u120f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u090a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1210\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0988\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1211\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1213\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1214\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1215\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1216\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u040d\6\141\1\u04d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1217\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1218\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1219\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u121a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u121b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u04c5\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u121c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u121d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u121e\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u121f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1220\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1221\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1222\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1223\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1224\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1225\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1226\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1227\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1228\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1229\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u122a\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1212\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u122b\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u122c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u122d\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u122e\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u122f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1230\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1231\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1232\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1233\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0c7f\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1234\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1235\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0c76\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1236\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u03d4\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1237\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1238\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03c0\11\141\1\u0610\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0c64\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0984\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1239\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u123a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u123b\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u123c\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u123d\4\141\1\u08f6\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u123e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u123f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1240\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1241\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u027b\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0dd3\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1242\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1243\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1244\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u117b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1245\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1246\12\141\1\u1247\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1248\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1249\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u10ec\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u124a\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u124b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u124c\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u124d\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u124e\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u124f\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1250\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1251\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1252\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0a31\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1253"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1254\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1255\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1256\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0262\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1257\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1258\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1259\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u125a\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u125b\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u125c\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u11e7\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u125e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1260\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1261\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1262\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1263\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1264\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1265\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1266\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u11e7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1267\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1268\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1269\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u126a\2\141\1\u126b\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u126c\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u126d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u126e\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u126f\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0946\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u09a6\6\141\1\u0fda\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0699\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1270\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1271\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0204\4\141\1\u0724\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1272\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0204\1\141\1\u1273"+ + "\1\u1274\1\141\1\u1275\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1276\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1277\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1278\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1279\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u127a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u127b\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u127c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u127d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0cd1"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u127e\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u127f\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1039\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1280\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1281\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1282\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1283\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u044f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1284\1\141\1\u0fdb"+ + "\6\141\1\u1285\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1286\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1287\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u01fa\6\141\1\u0269\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1288\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1289\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u128a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u128b\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u128c\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u031a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0fcf\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u128d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1237\1\u01ec\3\141\1\u128e\1\141"+ + "\1\u08a6\2\141\1\u128f\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1290\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0fec\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fa\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1291\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1292\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1293\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1294\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u10fb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u1295\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1296\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u03f7\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1297\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1298\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1299\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u129a\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u129b\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u116c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u129c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u129d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u129e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u129f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cd7\5\141\1\u12a0\4\141\1\u0768\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12a1\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u12a2\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12a3\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12a4\3\141\1\u119c"+ + "\11\141\1\u12a5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u12a6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u12a7\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u12a8\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u12a9\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12aa\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u12ab\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u12ac\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12ad"+ + "\2\141\1\u12ae\4\141\1\u12af\10\141\1\u12b0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u12b1\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12b2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12b3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12b4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u031a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u069a\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u12b5\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0480\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u12b6\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12b7\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u12b8\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12b9\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u12ba\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12bb\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u12bc\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12bd\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u12be\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u12bf\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u12c0\1\141\1\u12c1\5\141"+ + "\1\u06ec\1\u12c2\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0a0a\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12c3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u12c4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12c5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u12c6\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u05d9\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u12c7\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12c8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12c9\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u12ca\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u12cb\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u031a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u12cc\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u12cd\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0269"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u08f5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u12ce\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12cf\3\141\1\u12d0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u12d0"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12d1\1\141"+ + "\1\u12d2\1\141\1\u12d3\1\141\1\u12d4\1\141\1\u12d5\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u12d6\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12d7\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12d8\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u12d9\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u12da\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12db\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u12dc\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05b2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u12dd\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u12de\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12df\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12e0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u12e1\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0480\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u12e2\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12e3\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u12e4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u12e5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u12e6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u12e7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u12e8\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u081f\10\141\1\u12e9\5\141\1\u05b7\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u12ea\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u09a6\1\141"+ + "\1\u103a\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u12eb"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u12ec"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u12ed"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u12ee\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u12ef\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u12f0\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u12f1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u12f2\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06f4\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u12f3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u12f4\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0be4\1\141\1\u128c\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u12f5\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u12f6\1\141\1\u12f7\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u12f8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u12f9\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0262\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12fa\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12fb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12fc\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u12fd\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0881\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u12fe\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u12ff\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1300\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1301\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1302\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1303\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1304\15\141\1\u1305\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1306\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1307\1\141"+ + "\1\u1308\1\141\1\u1309\1\141\1\u130a\2\141\1\u11d2\1\u130b"+ + "\5\141\1\u0e81\1\u130c\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u130d\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u130e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u03c6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u130f\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1310\7\141\1\u0408\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1311\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1312\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1313\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1314\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1315\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1316\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1317"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1318\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1319"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u131a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u131b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u131c\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u131d\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u131e\3\141\1\u131f\3\141"+ + "\1\u1320\2\141\1\u1321\5\141\1\u1322\1\u1323\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1324\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u05d3\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u044f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1325\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u03d4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1326\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1327\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1328\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u1329\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u132a\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u132b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u132c\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\132\1\u0289\4\132\1\0\2\132\1\u0289\1\132\4\u0289"+ + "\1\132\1\0\1\132\1\0\3\132\1\0\1\132\1\u0289"+ + "\14\0\4\132\3\u0289\2\132\2\u0289\6\132\1\u0289\5\132"+ + "\1\0\1\132\2\u0289\2\132\4\0\7\132\1\u0289\2\132"+ + "\1\0\3\u0289\1\132\3\u0289\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u132d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u132e\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u132f\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1330\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u03d2\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1331\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0cb8\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0406\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\17\141\1\u048b\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\17\0\1\u1332\152\0\1\u1333\206\0\1\u07af"+ + "\117\0\1\u1334\113\0\1\u1335\173\0\1\u1336\54\0\2\67"+ + "\1\0\1\67\1\0\2\67\2\0\6\67\1\0\1\67"+ + "\1\u1337\24\67\1\0\16\67\1\u1337\30\67\1\0\22\67"+ + "\17\0\1\u1338\121\0\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0312\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1339\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\17\0\1\u133a\205\0\1\u133b\142\0\1\u059a"+ + "\142\0\1\u133c\143\0\1\u07fb\127\0\1\u0598\75\0\1\u133d"+ + "\121\0\1\132\10\0\6\141\1\0\11\141\1\0\1\u0749"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u133e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\1\u133f\11\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\2\141\1\u1340"+ + "\1\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1341\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1342\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1343\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1344\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1345\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1346\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1347\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0916\4\141\1\u1348\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1349\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u134a\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u134b\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u134c\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u134d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u134e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u134f\5\141\1\u1350\1\u1351"+ + "\10\141\1\u1352\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1353\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1354\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1355\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1356\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1357\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1358\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1359\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u135a\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u135b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u135c\10\141\1\u135d\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u135e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0dbf\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u135f\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1360\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u0cdb\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\7\141\1\u05af\1\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\6\141\1\u0269\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u0dde\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1361\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1362\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u03a8\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1363\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1364\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\6\141\1\u1365\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1366\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1367"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u06f4"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03e4"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1368"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0e63"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1369"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u136a"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u136b\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u136c\1\u136d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u03d2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u136e\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u04ec\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u136f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1370\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1371\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1372\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1373"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1374\4\141\1\u136d\1\141\1\u1375\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1376\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1377\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1371\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u090a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1378\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1379\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u137a\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0d27\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u137b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u137c\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0945\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0e17\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u137d\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u137e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u137f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1380\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0a07\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1381\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1382\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1383\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1384\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1385\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0c40\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1386\1\u1387\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u120f\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1388\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1389\12\141\1\u0768\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u138a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u138b\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u067f\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u138c\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u138d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u138e\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u119c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u138f\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1390\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1391\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1392\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1393\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0a31\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0262\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1169\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1394\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1395\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u10f4\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1396\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1397\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1398\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1399\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u139a\1\141\1\u139b\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u090e\1\141\1\u139c\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u139d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u139e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u139f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u13a0\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u13a1\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d55\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u13a2\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13a3\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13a4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u040f\1\141\1\u074f\4\141\1\u13a5\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13a6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13a7\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u13a8\2\141\1\u13a9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u06e9\7\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0bcc\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0bcd\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u13aa\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13ab\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u13ac\15\141\1\u13ad"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1271"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u13ae"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13af"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1391\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13b0\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u06b2\1\141"+ + "\1\u13b1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u13b2"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13b3"+ + "\1\141\1\u06b2\3\141\1\u0945\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u06b2\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u13b6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13b7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13b8\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u13b9\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u13ba\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13bb\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u13bc\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u13bd\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0993\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13be\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u13bf\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u13c0\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13c1\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u13c2\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u13c3\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1205\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u13c4\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u13c5\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u13c6\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u13c7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13c8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u13c9\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u03a8\2\141\1\u13ca\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u13cb\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u13cc\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u13cd\1\141\1\u0cca\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u13ce\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u13cf\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u13d0\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u13d1\4\141\1\u13d2"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13d3"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u046c\15\141"+ + "\1\u03ec\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13d4\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13d5\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13d6\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13d7"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u039f"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13d8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u13d9"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u13da"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u13db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u13dc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0f38\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13dc\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u13dd\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u13de\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13df\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u13e0\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u13e1\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u13e2\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u13e3\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u13e4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u13e5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u13e6\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u13e7\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1023\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u13e8"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13e9\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u13ea"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u08fc\3\141\1\u08ff"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u13eb\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u08c8\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u08ca"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0bad\1\141"+ + "\1\u063d\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u13ec\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13ed\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u13ee\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u13ef\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u13f0\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13f1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u13f2\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u13f3\15\141\1\u13f4\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u13f5\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u13f6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1023\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13f7\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u13f8\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u13f9"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u13fa\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u13fb"+ + "\1\141\1\u13fc\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0d02\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u09d0\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0ba8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u13fd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u13fe\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0e88\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u03c6\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u13ff\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1400\7\141\1\u1401\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1402\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1403\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1404\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1405\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1406\2\141\1\u120e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1407\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u10c4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1408\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0d1d\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05d2\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1409\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u140a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u140b\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u140c\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u140d\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u140e\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u140f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1410\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1411\3\141\1\u1412\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1413\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1414\11\141\1\u1415\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1416\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1417\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1418\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1419\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u141a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0291\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0392\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0f11\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u141b\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u141c\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u141d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0b1e\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u141e\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u1391\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u141f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u119e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1420\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1421\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1422\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1423\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0760\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1424\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1425\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1426\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1427\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\4\141\1\u1428"+ + "\4\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1429\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u142a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u12d7\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u142b\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\4\141"+ + "\1\u0269\2\141\1\132\10\0\6\141\1\0\10\141\1\u03e7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u08f6\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u142c\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u142d"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u142e"+ + "\11\141\1\u142f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1430\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1431\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1432\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u08f6\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u03ec\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0a31\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1433"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1434\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1271\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1435\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1436\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1437\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1438\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1439\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0bed\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u143a\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u143b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u143c\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u143d\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u143e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u143f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1440\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1441\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1442\3\141\1\u1443\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1444\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1445\1\141\1\u116d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1446\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1447\1\u1448"+ + "\1\141\1\u1449\1\u05b0\3\141\1\u144a\1\141\1\u144b\1\u144c"+ + "\1\u0610\2\141\1\u144d\1\141\1\u144e\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1023\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u144f\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1450\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u0df3\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1451\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1452\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1453\5\141\1\u0ddc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12f6\1\141\1\u1454"+ + "\10\141\1\u1455\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1456\3\141\1\u1457\6\141\1\u04d8\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1458\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u08ce\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u09a3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u11e7\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0318\5\141\1\u1459"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u145a\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u145b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u145c\5\141\1\u145d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u145e"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u145f\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u11df\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0f05\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0610\12\141\1\u090a"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1460"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u09a9"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03c8"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0610"+ + "\12\141\1\u1461\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1462\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0dc7\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1463\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1464\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1465\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1466\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1467\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1468\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1469\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u146a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0b78\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u146b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u146c\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u146d\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u04f9\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u146e\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u0d07\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u146f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u03a8\1\141\1\u05d8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1470\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1471\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1472\4\141\1\u1473\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u05d5\2\141\1\u1474\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1475\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1476\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1477\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1478\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1479\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u147a\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u147b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u147c\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u147d\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u147e\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u147f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1480\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1481\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1482\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1483\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1484\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1485\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1486\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0667\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1487\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0b20\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u0b91\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u05ea\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1488\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0916\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u11af\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1489\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u148a\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u148b\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u148c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u148d\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u0614\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u148e\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\5\141"+ + "\1\u0269\3\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\5\141\1\u0269\1\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0cf6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0269\22\141\1\u148f\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u0639\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1490\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1491\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1492\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1493\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0bca\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1494\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1495\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1496\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1497\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1498\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1499\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149a\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149b\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u149c\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0868\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u149d\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u149e\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u11af\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u149f\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a0\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u14a1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a2\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u08a6\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0971\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u14a3\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u0a1d\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14a4\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u14a5\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\1\u0269\4\141\1\u0269\1\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0411\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u14a6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u14a7\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u14a8\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1234\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0afc\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u14a9\15\141\1\u14aa\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u14ab\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u14ac\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u14ad\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u047b\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u14ae\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u14af\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u14b0\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u14b1\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u14b2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u14b3\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u14b4\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u14b5\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u14b6\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0d37\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u04c5\1\u06bb\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u14b7\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u14b8\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u14b9\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u11a8\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0411\10\141\1\u097d\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u14ba\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u14bb\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1466\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u14bc\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u14bd\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u14be\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u14bf\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u14c0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u14c1\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u14c2\5\141\1\u0455\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14c3\6\141"+ + "\1\u09bd\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u14c4\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14c5"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\3\141\1\u14c6\3\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14c7"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0a05"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14c8"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14c9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u14ca"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0397"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14cb"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14cc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14cd"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u14ce"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14cf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14d0\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14d1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u09e4\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u14d2\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u14d3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ddf\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u09e2\6\141\1\u14d4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14d5"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0e12"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u14d6"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u14d7"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u14d8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u14d9\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14da\11\141\1\u12db"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14db"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u14dc"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u14dd\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u14de\6\141"+ + "\1\u0fdc\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u14df\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u14e0\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u14e1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u14e2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u14e3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u14e4"+ + "\7\141\1\u1284\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u06b2\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u14e5\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u14e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u14e7\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u14e8\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u03ce\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u14e9\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u14ea\11\141\1\u0dda\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u14eb\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u08f6\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u14ec\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u14ed\4\141\1\u14ee\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0fd5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u14ef\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u14f0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u14f1\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u14f2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u14f3\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u14f4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u14f5\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u14f6\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u14f7\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u063d\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0971\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u14f8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u14f9\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u14fa\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08f7\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u06a1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u14fb\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u14fc\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0a75\1\u14fd\2\141\1\u14fe\1\141\1\u14ff\1\u1500"+ + "\2\141\1\u0464\3\141\1\u1501\1\141\1\u1502\1\u1503\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1504\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1505\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1506\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1507\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1508\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1509\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u150c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u150d\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u150e\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u150f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1510\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1511\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1512\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1513\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1514\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0ccf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1515\4\141\1\u060f\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0681\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u047b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u1516\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0a1d\1\141\1\u1517\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1518\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1519\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u151a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u151b\6\141\1\u151c\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u151d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u151e\1\141\1\u151f"+ + "\1\u1520\1\u1521\1\141\1\u1522\1\u1523\2\141\1\u0464\1\u020c"+ + "\1\141\1\u1524\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1525\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1526\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1527"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1528\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1529\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u152a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u152b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u152c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u152d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u152e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u152f\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1530\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1531\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1532\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1533\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1534\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1535\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1536\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1537\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1538\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1539\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u153a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u153b\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u153c"; - private static final String ZZ_TRANS_PACKED_4 = - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0a27\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1916" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1917" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0474\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1918\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1919\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0d71\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u0838\1\u02e7\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u07bd\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u0b2c\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u0c06\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1760\25\115\1\u0556\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u191a\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u191b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u191c\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\33\115\1\u0527" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u191d\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u191e\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u191f\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u123d\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1920\22\115\1\u1921\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u1922\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1923\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u10a3\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0fbe\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1924\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1925\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1926\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u1927\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u1928\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u035b\26\115" + - "\1\u1929\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u192a\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u192b\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u192c\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0d12\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u0d28\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u071b\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u192d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u07b7\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\26\115\1\u192e" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1117\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u192f\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1930\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1931\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1932\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1933\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1934\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1935" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1936\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1937\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1938\3\115\1\u1939\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u193a\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u193b" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u193c" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u193d\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0b30\21\115\1\u0c00\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u193e\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1655\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u193f\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1940" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1941\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1942" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1943\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u1944\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1945\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u038b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u1946\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1947\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1948\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1949\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1525\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u194a\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0b30\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1002\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u11de\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u194b\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u194c\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u0345\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u194d\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u194e\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u194f\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1950\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1951\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1952" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\37\115" + - "\1\u1953\7\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u01f6\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0d4b\1\115\11\0\3\115\1\u1487\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u1954\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u1844\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u0341\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1955\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1956\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u047a\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u06cf\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1957\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u126f\24\115\1\u0702" + - "\13\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u1695\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1958\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1959\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u0453\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u071b\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u01c8\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0594\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u195a\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u195b\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u13c3\1\115\1\u195c\1\u072a\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u195d" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u195e\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u169e\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u195f\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1960\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1961\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u1962\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1963\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1964\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u10b8\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0156\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u10c2" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u1965\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\40\115\1\u05f4\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u16b3\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1966\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1967\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1968\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1969\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u02b5\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u0dec\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u07c2" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u196a" + - "\2\115\1\u0173\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u196b\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u196c\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u196d" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\4\115\1\u196e\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u196f\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1970\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1971\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\26\115\1\u1972\20\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1694" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1973\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1974\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1975\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u02f3\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0ded\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u1976\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1977\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1978" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\37\115" + - "\1\u1979\7\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u02a1\2\115\1\u05b1\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u197a\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u197b\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0c03\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u197c\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u197d" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u0afc\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u197e\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u0a08\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u197f\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1980\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1981\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1483\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1982" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1983" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u1984\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1985\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1986\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u0906\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\36\115\1\u1987\10\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1988\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0734\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1989\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u0940\1\115\11\0\4\115\1\u1354\26\115\1\u0f72\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u198a\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u198b" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u198c\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u198d\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u198e\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u198f\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1990\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1991\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u1992\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u0d87\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1993\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1994" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1995\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1996\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u038b\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1997\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\40\115\1\u01c8\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1177\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1998\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1999" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u199a\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u199b\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u199c\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u199d\33\115\1\u0877" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u199e" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u199f\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u19a0\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u19a1\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u19a2\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u19a3\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u19a4\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u045a\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u19a5\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u19a6\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u19a7\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u19a8\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0894" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u19a9\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u17cb" + - "\3\115\1\u19a4\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u03d6\1\u19aa\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u19ab\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u19ac\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u19ad\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u19ae\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u19af" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u19b0\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u19b1\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u19b2" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u19b3" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\36\115" + - "\1\u19b4\10\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u19b5\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u19b6\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u19b7\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u19b8\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u19b9\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u19ba\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u19bb\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u172a" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u19bc" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u19bd" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u19be\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u19bf\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u19c0\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u19c1\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u19c2\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u19c3\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0e2d\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u19c4\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u19c5\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u19c6" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u19c7\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u19c8\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u19c9\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u173b\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u19ca\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u19cb\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u173b\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u19cc\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u19cd" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u19ce\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u19cf\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u0f12\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0507\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u18bb\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u0b4b\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u0d31\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u048e\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u19d0\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u19d1\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u05cd\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u071b" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u193b\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u0a74\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u04fc\1\u047a\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u0473\24\115\1\u0608\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u19d2\1\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0c80\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u19d3\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1760\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\26\115\1\u19d4\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u19d5\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u19d6\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u19d7\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u19d8" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1505\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u19d9" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u19da\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u19db\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u19dc\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u19dd\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u19de\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u19df\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\46\115\1\u19e0\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u19e1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u03ff\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u19e2" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u18d6\1\115\11\0" + - "\3\115\1\u0ad2\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u06e9\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u19e3\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u19e4\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u19e5" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u19e6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u19e7" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u15ec\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u19e8\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u19e9\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u19ea" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u19eb" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u19ec\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u19ed\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u19ee\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u19ef\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u19f0\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u01c8\23\115\1\u19f1" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u19f2" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0f96\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u178b\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u19f3\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u19f4\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u19f5\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u19f6" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u19f7\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u19f8\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0fed\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u19f9\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u12a0\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u19fa\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u19fb\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u19fc\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u19fd\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u02ac\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u19fe\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u0f43\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u19ff\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u0f43\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1a00" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u0d37" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1a01" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u1a02\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1a03\23\115\1\u1685\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u0362\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1a03" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a04" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u0b21\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u1a05\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u11c6\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u07b7\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u1a06\1\115\11\0\5\115\1\u0341\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1a07\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u17b3\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1a08\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1a09\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1a0a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1a0b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1a0c\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1a0d\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1a0e\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u1a0f" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1a10\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u0475\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1a11\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\26\115\1\u17ca\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0b55\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1a12" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u10dc\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0479\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u09be" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1a13\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1a14\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1a15\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1a16\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0f47\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u1a17\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1693\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1a18\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1a19\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1a1a\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u092f" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u02e7\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1a1b\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1a1c\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1a1d\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1611\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0bf3\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1a1e\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1a1f\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1a20\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1a21\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1a22\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u010f\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1a23\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1a24\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1a25\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1a26\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\37\115\1\u0c80" + - "\7\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a27" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u07b7\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1976\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1a28\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1a29\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1a2a\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1a2b\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1a2c\1\u0369" + - "\1\115\1\u0490\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0d19\1\115\1\u1025\1\115\1\u1a2d\1\115\1\u0c6a" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a2e\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a2f\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1a30\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1a31\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u0c80\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u19ce\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u0c31\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u106f\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u071b\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u071a" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u0345\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1a32\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1a33\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u070e\26\115\1\u0f49\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1a34\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1a35\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1a36\1\115\1\u1a37\1\u1a38\21\115\1\u1a39" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0a17" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a3a\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a3b\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u03ef" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1a3c\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u121e\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1117\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1a3d\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\44\115\1\u01c8\2\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1a3e\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u190b\4\115\1\u088d\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u169e\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u088f\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1a3f" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1a40\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1a41\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u1a42\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1a43\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\31\115\1\u1a44\15\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1942\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1a45\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0a66\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u120a" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1a46\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u1a47\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1a48\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1a49\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u07c2\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u196a\33\115\1\u1a4a" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a4b\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1a4c\1\u1a4d\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u02ca\4\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u0b9c\1\115\11\0\1\u196a\3\115\1\u1a4e\1\115" + - "\1\u07a3\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u1a4f\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1a50\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u071b\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1a51\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1a52\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1a53" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1a54\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1a55\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a56\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a57\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1a58\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1a59\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1287\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1a5a\3\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1a5b\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1a5c\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u0f71\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1a5d\26\115" + - "\1\u1a5e\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u1a5f\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u0f71\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1a5e\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1a60\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u11f9\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u1a61\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1a62\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1a63" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u1a64" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1a65\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u074a\1\u1a66\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1a67\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1a68\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0739\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\40\115\1\u1a69\6\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u1a6a" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a6b" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a6c" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a6d\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1117\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1a6e\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1a6f\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1a70\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0543\26\115\1\u0c29\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1a71" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1a72\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1a73\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1a74\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u02c7\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u1a75\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u10c3\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\32\115\1\u19a0\14\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1a76\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1a77\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1a78\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\u1a79\5\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1a7a" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1a7b" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1a7c\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u19aa\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u0ce9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u141a\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1a7d\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1a7e\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1a7f\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u0fed\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u047a\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\33\115\1\u057b\13\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u1a80\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u1a81\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1a82\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1a83\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1a84\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1a85\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1a86\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1a87" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1a88\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1a89\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1a8a\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1a8b\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1a8c\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u10dc\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a8d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1a8e\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u060f\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1a8f\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1a90\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u1a91\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u1a92\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1a93\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1a94\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1a95\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1a96\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a97\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u0a9a\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1a98" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a99" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u0c80\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u02a5\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1a9a\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u02f6\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1a9b\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1a9c\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a9d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u13ac" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1a9e" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1a9f\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1aa0\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1aa1\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1aa2\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1aa3\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1aa4\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1aa5\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1aa6\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1aa7\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\24\115\1\u1aa8\22\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u13d5\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1aa9\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1aaa" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\42\115" + - "\1\u04c9\4\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u08a9" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1aab\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1aac\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1aad\4\115\1\u1aae" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0c60\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1aaf\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1ab0\1\u0f2f\1\115\1\u1ab1\1\u1ab2\27\115" + - "\1\u1612\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ab3\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ab4\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ab5\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1ab6\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u10b8\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1ab7\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1ab8\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1a0a\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u06a3" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1ab9\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u1aba\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1abb\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1abc\1\115\1\u1abd\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1abe\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u015a\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1abf" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u07f7\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1ac0\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1ac1\3\115\1\u19cf\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1ac2\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1ac3\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1ac4\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u069b\1\115\11\0" + - "\2\115\1\u1ac5\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1ac6\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1886\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1ac7\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1ac8\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1ac9\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u072a" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u083f\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1aca\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u185b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1acb\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u04fc\3\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u1acc\1\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u090b\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1acd\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1ace" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\42\115" + - "\1\u06a5\4\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u074f\26\115\1\u0751\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1acf\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1ad0\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1ad1\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1ad2\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u0aa8" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u0a2a\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u095b\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1ad3\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1ad4\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1ad5\34\115\1\u1ad6\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u1ad7\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1ad8\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1ad9" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1ada\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1adb\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0340\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1adc\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1add\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u19ce\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u0782\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ac1\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1ade" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1adf\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1ae0\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0d12" + - "\26\115\1\u1ae1\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u16c8\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1ae2\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1130\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1481\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u167d" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1ae3\4\115" + - "\1\u02f6\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ae4\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1ae5\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1ae6\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u0556\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1ae7\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1ae8\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1ae9\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\3\115\1\u1aea\1\115\11\0\3\115\1\u1487\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u1aeb" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1aec\2\115\1\u1aed\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1053\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1aee\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1aef" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u169e" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1829\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\40\115\1\u1af0\6\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1af1\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1af2\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u0a69\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1af3\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1af4\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1af5\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1a48\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1af6\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1af7\2\115\1\u0173" + - "\24\115\1\u10e9\2\115\1\u12db\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u1af8\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1af9\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u1afa\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1afb" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u071b\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1afc\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u01c8\1\u1974\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u1873\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1afd\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u1afe\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1aff\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1086\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1b00\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u0478\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1b01\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1b02\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1b03\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1b04\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1b05\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1b06\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1297\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\32\115\1\u1b07" + - "\14\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\3\115\1\u1b08\1\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1b09\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u067b\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1b0a\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1b0b\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1b0c\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1b0d\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u056c\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1b0e\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1b0f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u162f\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1b10" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1b11\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1b12\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1b13\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\3\115" + - "\1\u1b14\1\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\4\115\1\u1b15\1\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1b16" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u1b17\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u1b18\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1b19\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u187b\1\u015a" + - "\1\u187c\21\115\1\u02cd\4\115\1\u1b1a\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1b1b\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u19e1" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1b1c\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1b1d\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1b1e\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1b1f\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\41\115\1\u02dc\5\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\26\115\1\u19a0\20\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1b20\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1895\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1b21\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1b22\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1b23" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1b24\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1b25\2\115\1\u1b26\23\115\1\u1b27\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1b28\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1b29\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1b2a\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1b2b" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1b2c\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1b2d\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1b2e\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1b2f\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u06b3" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1b30\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u1127\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1b31" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1b32" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u1b33\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0a12\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1b34\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1b35\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1b36\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\31\115\1\u1b37\15\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1b38" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1b39\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1b3a" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u15aa\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u1b3b\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1b3c\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1b3d\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1b3e\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1b3f\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1b40" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1b41" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1b42\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1b43\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\u1b44\5\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\1\115" + - "\1\u01c8\3\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1b45\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1694\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1b46\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1b47\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0d01\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1b48\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1b49\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1b4a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1b4b\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1b4c\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1b4d" + - "\1\u0b9f\27\115\1\u1b4e\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1b4f\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u1b50\1\u1b51\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1b52\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u10b8\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1b53\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1b54" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1050" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\26\115" + - "\1\u1b55\20\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\36\115\1\u1b56\10\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1b57\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1b58\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1b59\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u1b5a\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u11ac\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1b5b\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u02aa\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1b5c\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1b5d\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1b5e\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1b5f\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u1b60\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u0cf8\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1b61\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\34\115\1\u1b62\12\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1b63\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u1a0e\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1b64\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1b65\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1b66\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1b67\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1b68\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u169a\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1b69\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u1b6a" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1b6b\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u06b0\2\115\1\u0793\22\115\1\u07b1\2\115\1\u1b6c" + - "\1\115\1\u1b6d\5\115\1\u0a4d\2\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\33\115\1\u1b6e\13\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1b6f\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1b70\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1b71" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u0475\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1b72\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u1225\1\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u125c\1\115\11\0\6\115\1\u02f0\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\4\115\1\u1225" + - "\1\115\1\0\1\106\2\115\1\0\3\115\1\u125c\1\115" + - "\11\0\6\115\1\u02f0\21\115\1\u06a9\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1b73\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u092f\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1b74" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1226" + - "\1\u0f3e\23\115\1\u0c16\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u02ae\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u11e8\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0e2b\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u1b75\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1b76\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1b77" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1b78\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0510" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1b79\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u1b7a\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\u1b7b\5\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\31\115\1\u1b7c\15\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1b7d\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1b7e\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1b7f\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1af7\27\115\1\u10e9\16\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1b80\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1342\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1b81\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u1b82\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1b83\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1b84\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\u1b85\5\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1b86\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1b87\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\33\115\1\u1b88\13\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1b89\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1b8a\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1b8b" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u02c3\26\115\1\u1b8c\3\115\1\u0789\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1b8d\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1b8e\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1b8f\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1b90\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1b91" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1b92\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u18cf\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1b93\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1b94\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u1b95\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1b96\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1b97\1\115" + - "\1\u099f\1\u070e\25\115\1\u1b98\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1b99\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\7\115\1\u1b9a\37\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1b9b\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u18f4" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u04ef\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1b9c\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1b9d\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u171c\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1b9e\1\115\1\u1b9f\1\115" + - "\1\u1881\20\115\1\u1882\6\115\1\u1ba0\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1ba1\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1ba2\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02a1\4\115\1\u099f" + - "\22\115\1\u1ba3\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1ba4\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1ba5\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1ba6\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u0728\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1ba7\1\u1a35\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u02a1\1\u0d3c\1\115" + - "\1\u05b1\1\u1ba8\23\115\1\u1ba9\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1baa\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1bab\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1bac\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bad\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bae\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1baf\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1bb0" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0d71\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u197b\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u0d29\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1bb1\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u1bb2\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1bb3\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1bb4\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1bb5\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bb6\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1bb7" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1bb8\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1bb9\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1bba\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u169a\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1bbb\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1bbc\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u1bbd\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1bbe\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1086\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u01c8\23\115" + - "\1\u06e3\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1bbf\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1bc0\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0ca4\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u10e2\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1bc1\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1bc2" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1bc3\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1bc4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u1bc5\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1bc6" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1bc7" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u132b\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u1bc8\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u1bc9\15\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\34\115\1\u18ed\1\u0c7b\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0d01\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1bca\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1bcb\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0507\1\115\1\u1bcc\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0527\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1bcd\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1bce\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1bcf\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1bd0\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1bd1\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1bd2\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1bd3\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1bd4" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1bd5" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u0f27\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u1bd6\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1bd7\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u0e31\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\40\115\1\u1bd8\6\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u0f43\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u0dcb\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\35\115\1\u1bd9\11\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u11c6\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u1bda" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1bdb\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1bdc\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1bdd\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u02c3\2\115\1\u1018\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bde\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bdf\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1be0\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1be1\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u1be2" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u09bb\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u16e2\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u0169\22\115\1\u1be3\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u045f\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u045f" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1ada" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1be4\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1b6e\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1be5\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\3\115\1\u1be6\1\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1be7\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u0c5c\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\31\115\1\u028f\15\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u0ea9" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1be8\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1680\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u035b\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1be9\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1bea\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1beb\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1bec\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u0dc5\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1bed\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1bee\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1bef\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1bf0\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1bf1\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1bf2\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u083f\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1bf3\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1bf4\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1bf5\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\35\115\1\u1bf6\11\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1bf7" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1b01" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1bf8" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1bf9\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1bfa\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1bfb\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1bfc\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1973\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u03a3\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1bfd\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1bfe\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1bff" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f0e\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1c00\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1c01\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1c02" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1c03\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u1297\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u18bf\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1c04\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u1c05\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1c06\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1c07\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c08" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u0fed\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u071d" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1c09\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1c0a\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1c0b\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1c0c\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1c0d\1\u0734\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1c0e\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1c0f\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1c10\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c11" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0a66" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\40\115" + - "\1\u1751\6\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u1c12\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1c13\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1c14\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c15" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c16" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1c17\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1c18\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c19\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1c1a" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1a08\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\4\115" + - "\1\u1c1b\1\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u1c1c\1\115\1\u1c1d\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1c1e\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1c1f\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u03f9\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1c20\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1b37" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1c21\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1c22\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1c23\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1c24\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u079f\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1c25\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1c26\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1c27\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1c28\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u0c00" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1c29\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\33\115" + - "\1\u1c2a\13\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\4\115\1\u1c2b\1\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u0fff\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1c2c\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1c2d\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c2e\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u15da" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u0cd5" + - "\30\115\1\u18ed\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u0fab\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u0acf\20\115\1\u1c2f\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u11f9\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1c30\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u0a17\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1c31\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1c32" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1c33" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1b62\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1c34\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u0785\12\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1c35\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\35\115\1\u1c36\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c37\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c38\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1c39\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\41\115\1\u1c3a\5\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u0527\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1456\5\115" + - "\1\u1c3b\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1c3c\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u193b\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1c3d\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u038b\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c3e\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1c3f\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u0c85\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1c40\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\6\115" + - "\1\u1c41\40\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u0dec\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1c42\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u1c43\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u095b\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\36\115\1\u030e\10\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1c44\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u071b\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u0c37\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u089b\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1c45\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1c46\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1c47\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1c48\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u120d\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0c13\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1c49\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1a70\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\34\115\1\u1c4a\12\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1c4b\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u070d\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1c4c\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1c4d\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c4e" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1c4f" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1c50\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u1c51\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\30\115\1\u1c52\16\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1c53\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c54" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u0ce9\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1c55\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1c56\42\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1c57\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u03b1\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1c58\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\2\115\1\u1c59\44\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c5a\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1c5b\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c5c" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1c5d\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1c5e\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1c5f\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u1c60\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1c61\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1c62\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u1c63" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u1c64\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1c65\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1c66\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1c67\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\27\115\1\u1c68\17\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1c69\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u1c6a" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u1aec\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\35\115\1\u1c6b\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1c6c\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1c6d\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\2\115\1\u1b3e\3\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\4\115\1\u0db1\1\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1b43\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u1c6e\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u0994\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1c6f" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1c70\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1c71\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0691" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u0f99" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1c72\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u0c80\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1c73\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u1c74\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1c75\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u047a\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\30\115\1\u1c76\4\115" + - "\1\u0c7b\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1c77\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1c78\5\115\1\u0e25\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u1c79\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1c7a\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u0818\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\31\115\1\u048e" + - "\15\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1c7b\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u1c7c\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1c7d\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c7e\1\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u1c7f\1\u1c80\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u0dec\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1c81" + - "\1\115\1\0\5\115\11\0\6\115\1\u1c82\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u1c83\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1c84" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1c85\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1c86\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\3\115\1\u1c87" + - "\1\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\6\115\1\u06a9\40\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u1a0a\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1b96\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\6\115\1\u070e\40\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1c88\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1c89\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u1c8a\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1c8b\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1c8c\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1c8d\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1c8e\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1c8f\1\115\1\u1b9f" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1c90\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\u1c91\5\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1c92" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1c93\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1c94\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1c95\1\u1c96\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1c97\1\115\1\u1c98\1\115" + - "\1\u1c99\24\115\1\u1c97\1\115\1\u1c9a\10\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1c9b\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1c9c\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\30\115\1\u1c9d" + - "\16\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1c9e\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1c9f\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\115\1\u1ca0\45\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u1ca1\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u1ca2\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1ca3" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1ca4\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1ca5\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1ca6\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u10c5\4\115" + - "\1\u1ca7\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1ca8\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1ca9\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1caa\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u178b\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1cab\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1cac\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\32\115\1\u1cad\14\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1cae\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u161c" + - "\20\115\1\u0b14\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u058b\1\u1c2f\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u161c\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1a31\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u036b" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u1caf\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1cb0\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1cb1\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\3\115\1\u190b\2\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\30\115\1\u1cb2\16\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u1cb3\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1cb4\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1cb5\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\4\115\1\u1829\22\115" + - "\1\u1823\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u109b\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1cb6\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\4\115\1\u1cb7\1\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1cb8\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u1cb9\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\u1cba\5\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1cbb\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1cbc\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1a5e\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u05d9\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1cbd\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1a31\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\4\115" + - "\1\u0a17\42\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1cbe\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1cbf\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1cc0\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u0fed\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\7\115\1\u0b55\37\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\2\115\1\u1cc1\44\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1cc2\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1cc3\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\34\115" + - "\1\u1bbc\12\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u0eed\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u06d5\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\u1cc4\46\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1cc5\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1cc6\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1cc7\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1cc8\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1cc9\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1cca\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1ccb\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ccc\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1ccd\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1cce\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1ccf\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1cd0\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\115\1\u1cd1\45\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1cd2\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1cd3\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1cd4\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1cd5" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1cd6" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1cd7\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1cd8\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\3\115\1\u1cd9\2\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1cda\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1cdb\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1cdc" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1cdd" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0703\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1cde\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1025\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1cdf\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0938\16\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u04b4\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u144e\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1247\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\2\115\1\u0f96\44\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\33\115\1\u03d0\13\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1ce0" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1929\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1ce1" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\3\115" + - "\1\u1ce2\43\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u095b\42\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1ce3\33\115\1\u04c8\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1ce4\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1ce5" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\34\115\1\u1ce6" + - "\12\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1ce7\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1ce8\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\34\115\1\u1ce9\1\u1cea\11\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1ceb\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1cec\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1ced\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1cee\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1cef" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1cf0" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1cf1\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\30\115\1\u1cf2\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1cf3\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1050\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1bb3\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\5\115\1\u1cf4\41\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1cf5\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1cf6" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1a23\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1cf7\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\35\115\1\u1cf8" + - "\11\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1b89\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\4\115\1\u1cf9\27\115\1\u0479\12\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u1cfa\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1cfb\16\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u18cd" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1cfc" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1cfd\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\2\115\1\u03ab\44\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u1cfe\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u04d8\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\5\115\1\u1cff\41\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1d00\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d01\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1d02\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1d03\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1d04\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\27\115\1\u1d05\17\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1d06\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u0b7a\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\30\115\1\u1d07\1\u1d08\1\u1d09" + - "\2\115\1\u1d0a\11\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\5\115\1\u1d0b\41\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\27\115\1\u1d0c\17\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u1d0d\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1d0e\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1d0f\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1d10\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d11" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\115" + - "\1\u1d12\4\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1d13\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1d14\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1d15\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1d16\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\1\115\1\u1050\45\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1d17\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u1d18\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\3\115\1\u1cd4" + - "\2\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u19aa" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1d19\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\2\115" + - "\1\u1d1a\44\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\1\115\1\u1cbd\4\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1d1b\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\1\115\1\u1d1c\4\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\33\115\1\u1d1d\13\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1d1e" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\115\1\u0490\45\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\34\115\1\u1d1f\12\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\7\115\1\u1d20\37\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d21\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1d22\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d23\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\115\1\u1d24" + - "\45\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d25" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d26" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1d27\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1d28\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\33\115\1\u1d29\13\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\3\115\1\u1d2a\43\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u126f\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1d2b\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\u1d2c\46\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1d2d\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1d2e\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1d2f\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1d30" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\32\115" + - "\1\u1bb3\14\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u1d31\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1d32\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\u1869\5\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\4\115\1\u1d33\42\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1d34\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\34\115\1\u1d35\12\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\32\115\1\u1d36\14\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\1\115\1\u1d37\45\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\3\115\1\u036b\1\115\11\0" + - "\30\115\1\u0c00\16\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\27\115\1\u1d38\17\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\35\115\1\u1c8d\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\30\115\1\u1d39\16\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\4\115\1\u171c\1\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\26\115\1\u1882" + - "\20\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\115" + - "\1\u1d3a\45\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u17a7\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1d3b\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1d3c\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1d3d\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\2\115\1\u1d3e\3\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1cec\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\3\115\1\u1d3f\1\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d40" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u1d41" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\4\115\1\u1d42\1\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1d43\27\115\1\u1bf6\11\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1d44\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1d45\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\1\u1d46\1\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1d47" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\7\115\1\u0ce9" + - "\37\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\1\115\1\u1d48\4\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1d49\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\6\115\1\u0fff\40\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u16b6\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1d4a\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1d4b" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\35\115\1\u1430\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\26\115\1\u17a7\20\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u17a7" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\2\115" + - "\1\u1d4c\3\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d4d" + - "\46\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1d4e\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1d4f\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1d50\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\115\1\u1d51\45\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\3\115\1\u1d52\2\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\6\115\1\u1d53\40\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\1\115\1\u1d54\4\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\1\115\1\u1d55" + - "\4\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1d56" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\1\u1d57\1\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\36\115\1\u04fa" + - "\10\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\5\115" + - "\1\u1d58\41\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\26\115\1\u1d59\20\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\7\115\1\u1d5a\37\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u1d5b\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1d5c\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\3\115\1\u1d5d\43\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\2\115\1\u1d5e\44\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\4\115\1\u1d5f" + - "\42\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u1d60\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\1\u1d61\46\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u058b\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\1\u1d62\46\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\4\115\1\u118d\42\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\1\115\1\u0e6c\4\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\5\115\1\u1d63\41\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d64" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d65\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\2\115\1\u1d66" + - "\44\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\1\u1d67\1\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1d68\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\2\115\1\u1d69\3\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1d6a\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\26\115\1\u1d6b\20\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\1\115\1\u1d6c\4\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\4\115\1\u1d6d\42\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u1050\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\3\115" + - "\1\u1d6e\2\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\47\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\7\115" + - "\1\u1d6f\37\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\32\115\1\u1d70\14\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\32\115\1\u1d71\14\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u1d72\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\1\u1d73" + - "\1\115\1\0\5\115\11\0\47\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\32\115\1\u1d74\14\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\1\u1d75\1\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u1d76\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\27\115\1\u1d77\17\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d78" + - "\3\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\3\115\1\u1d79" + - "\43\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\35\115" + - "\1\u1d7a\11\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1d7b\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1d7c\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\7\115\1\u1d7d\37\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\2\115\1\u1d7e\3\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\47\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\2\115\1\u1d7f\44\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\3\115\1\u1d80\43\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\3\115\1\u142a\2\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\3\115\1\u1d81\43\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\5\115\1\u1d82" + - "\41\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\2\115\1\u0f7f\3\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\1\u1078\1\115\1\0\5\115" + - "\11\0\47\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\3\115\1\u1d83\43\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\31\115\1\u1311\3\115\1\u1311\11\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\6\115\1\u1d84\40\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\27\115\1\u1d85\17\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\1\u1d86\46\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1d87" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\6\115\1\u1d88" + - "\40\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\6\115\1\0\1\106\2\115\1\0\5\115\11\0\27\115" + - "\1\u1d89\17\115\1\106\10\0\6\115\1\0\5\115\1\353" + - "\2\0\6\115\1\0\1\106\2\115\1\0\5\115\11\0" + - "\5\115\1\u1d8a\41\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1d8b\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\1\u1d8c\1\115\1\0" + - "\5\115\11\0\47\115\1\106\10\0\6\115\1\0\5\115" + - "\1\353\2\0\6\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\3\115\1\u1d8d\43\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\6\115\1\u0b2c\40\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\1\u1d8e\46\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\3\115\1\u0d7d\2\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\47\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\37\115\1\u095b\7\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\3\115\1\u0940\1\115\11\0\47\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\1\u1b44" + - "\5\115\1\0\1\106\2\115\1\0\5\115\11\0\30\115" + - "\1\u0c00\5\115\1\u030e\10\115\1\106\10\0\6\115\1\0" + - "\5\115\1\353\2\0\6\115\1\0\1\106\2\115\1\0" + - "\5\115\11\0\7\115\1\u1d8f\37\115\1\106\10\0\6\115" + - "\1\0\5\115\1\353\2\0\6\115\1\0\1\106\2\115" + - "\1\0\5\115\11\0\4\115\1\u1d90\42\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\6\115\1\0\1\106" + - "\2\115\1\0\5\115\11\0\1\u0479\46\115\1\106\10\0" + - "\6\115\1\0\5\115\1\353\2\0\2\115\1\u1d91\3\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\47\115\1\106" + - "\10\0\6\115\1\0\5\115\1\353\2\0\6\115\1\0" + - "\1\106\2\115\1\0\5\115\11\0\5\115\1\u1d92\41\115" + - "\1\106\10\0\6\115\1\0\5\115\1\353\2\0\6\115" + - "\1\0\1\106\2\115\1\0\5\115\11\0\27\115\1\u1d93" + - "\17\115\1\106\10\0\6\115\1\0\5\115\1\353\2\0" + - "\3\115\1\u1d94\2\115\1\0\1\106\2\115\1\0\5\115" + - "\11\0\47\115"; + private static final String ZZ_TRANS_PACKED_4 = + "\1\141\1\u0687\5\141\1\u08a6\3\141\1\u153d\5\141\1\u153e"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u153f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1540\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada\7\141"+ + "\1\u1541\1\141\1\u05b7\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1542\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1543\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1544\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1545\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1546\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u0920\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1547\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1548\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u03a8\2\141\1\u1549\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u05e4\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u154a\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u154b\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0dbd\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u154c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u154d\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u154e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u154f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u03ce"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u1550\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1551\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1552\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u10b7\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0820\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1553\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1554\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1555\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1556\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1557\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1558\17\141\1\u1559\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u155a\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u155b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u155c\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u155d\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u155e\3\141\1\u155f\1\u1560\1\141\1\u1561\2\141"+ + "\1\u1013\1\141\1\u1562\1\u1563\2\141\1\u1564\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1300\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1565\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u03d4\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1566\1\141\1\u1567\2\141\1\u155c"+ + "\1\141\1\u1568\1\141\1\u1569\1\u156a\2\141\1\u156b\1\141"+ + "\1\u156c\1\141\1\u156d\1\u156e\1\141\1\u08db\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u156f\5\141\1\u1469\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1570\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0408\6\141"+ + "\1\u090a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1571"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1572"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1573"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1574\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1575\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1576\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1577\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1578\1\u1579\3\141\1\u157a"+ + "\3\141\1\u157b\10\141\1\u157c\1\141\1\u08db\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u157d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u157e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u157f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u0916\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1580\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u09e7\1\u08ab\1\u1581\1\u0ce4"+ + "\3\141\1\u1582\3\141\1\u1583\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1584\1\u045b\1\141\1\u11e9\1\u1585\1\u075e"+ + "\1\u0969\1\141\1\u1586\1\141\1\u1587\1\u1321\1\u1588\1\141"+ + "\1\u05d8\2\141\1\u1589\1\u0e8f\2\141\1\u0971\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u158a\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u158b\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u158c\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u158d\3\141\1\u158e\1\141"+ + "\1\u158f\1\141\1\u1590\1\141\1\u05cb\2\141\1\u1591\1\u1592"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1593"+ + "\5\141\1\u1594\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1595\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0df4\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1596\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1597\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1598\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1596\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1599\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u0ed9\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u159a\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u159b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u046a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u159c\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0f25\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u159d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u159e\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0269\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u159f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u15a0\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u15a1"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15a2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15a3\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u15a4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\65\0\1\u15a5\140\0\1\u1082\133\0\1\u15a6\152\0"+ + "\1\u15a7\46\0\2\67\1\0\1\67\1\0\2\67\2\0"+ + "\6\67\1\0\26\67\1\0\15\67\1\u0117\23\67\1\u0117"+ + "\5\67\1\0\22\67\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u0d98"+ + "\1\0\7\141\65\0\1\u0ab7\133\0\1\u15a8\60\0\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15a9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\3\141"+ + "\1\u0817\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\1\141\1\u081b\4\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u15aa\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u15ab\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u15ac\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0d08\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u15ad\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0e92\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u03ec\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u15ae\1\141\1\u15af\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0a1d\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u15b0\1\141\1\u06e9"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b1"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b2"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15b3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u15b4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03c6\14\141"+ + "\1\u15b5\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15b6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0405\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u15b7"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15b8"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15b9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15ba"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15bb"+ + "\1\141\1\u15bc\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u15bd\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u15be\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u15bf\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u15c0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u15c1\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u15c2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u15c3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u15c4\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u15c5\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u15c6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u15c7\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u15c8\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0b89\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u15c9\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u15ca"+ + "\6\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0f6e\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u15cb\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u15cc\6\141\1\u15cd\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u15ce\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u08f6\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u15cf\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u15d0"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u031a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15cc"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\1\141\1\u15d1\5\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15c9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u15d2"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u15d3"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15d4\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15d5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u14bc\1\141\1\u15d6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15d7\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u15d8\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u15d9\7\141\1\u0627"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15da"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u15db"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0cca"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15dc"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u15dd"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u15de\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15df\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u15e0\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14bc\10\141"+ + "\1\u063d\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u15e1\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u15e2\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u15e3\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u15e4\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u15e5"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u15e6"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u15e7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u15e8\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15e9\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0bf1\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15ea\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u15eb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15ec\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u08ea\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u08ed\3\141"+ + "\1\u0411\12\141\1\u08ef\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u15ed\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u15ee\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u0971\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u15ef\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u0840\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0d94\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u15f0\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u15f1\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u15f2\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u15f3"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u15f4\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f6\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15f7\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u15f8\1\141\1\u15f9"+ + "\1\u15fa\1\141\1\u09a4\1\141\1\u15fb\1\u15fc\1\141\1\u15fd"+ + "\1\u15fc\5\141\1\u15fe\1\u15ff\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0e23\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1600\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1601\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1207\3\141\1\u1602\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1603\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1604\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1605\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1606\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0239\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1607\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1608\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1609\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u160a\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u160b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u160c"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u160d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u160e"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u160f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1610"+ + "\11\141\1\u1611\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1612\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1613\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1614"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1615\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1616\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1617\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1618\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1619\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u15e9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1615"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u161a\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u161b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u161c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u161d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u161e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u161f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1620\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u06f4\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0408\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1621\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1622\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1623\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1624\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1625\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1626\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1627\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1628\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1629\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u162a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0694\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u162b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u162c\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u162d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0610"+ + "\11\141\1\u0779\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u162e\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13dc\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u162f"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u11a7"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1630"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1631\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1632\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1633\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1634\1\u1635\3\141"+ + "\1\u1274\1\u0f85\1\u1636\2\141\1\u1637\1\u13ad\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1638\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u040d\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u14b2\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0de7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u03d4\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1639\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u163a\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06ee\2\141\1\u163b\2\141\1\u163c"+ + "\1\u163d\2\141\1\u163e\3\141\1\u163f\1\u1640\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1641\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1642\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1643\5\141\1\u1644"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u03cd\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1645\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0e8b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1646\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u03d4\20\141\1\u08f6\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1647\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1648\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1649\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u164a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0e8b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u164b\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u164c\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u164d\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u164e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u164f\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1650\11\141\1\u1651"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1652\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1653\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1654\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1655\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0eb4\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u117c\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1656\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1657\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1658\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1659\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0d27\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0916\4\141\1\u0269\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u044f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u165a\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u165b\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u12ec\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u165c\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u073d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u165d\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0b78\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u10d7\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u165e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u165f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u0a3e\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1660\11\141\1\u1661\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1662\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1663\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u038d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0eb4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1664\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1665\1\141\1\u1666"+ + "\14\141\1\u1667\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1668\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u075e\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u074f\2\141\1\u045c\12\141\1\u0fd6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1669\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u166a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u166b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u166c\12\141\1\u0d02"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u0eb9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u166d\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u166e\1\141"+ + "\1\u166f\7\141\1\u0d02\2\141\1\u04f9\2\141\1\u1670\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1671\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u04f9\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1672\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1673\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1674\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u090a\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1675\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1676\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1677\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1678\4\141\1\u0a3a\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1679\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u167a\5\141\1\u167b\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u167c\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u167d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u167e\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u167f\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1680\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u157b\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u0fcc\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1681\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u08cb\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1682\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0b8b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1683\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1684\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1685\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1686\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1687\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1688\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u1689\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u168a\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u168b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u168c\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u168d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u168e\10\141\1\u0269\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u168f\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1690\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u09e1\1\141\1\u1691\1\141"+ + "\1\u1692\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1693\7\141\1\u0b98\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1694\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1695\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1696\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1697\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1698\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0392\3\141\1\u1699\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u169a\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u169b\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u169c\4\141\1\u0a3a\4\141\1\u169d"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u169e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u169f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u16a0\11\141\1\u03ec"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16a1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u16a2"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0b1b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u065d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16a3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0993\6\141"+ + "\1\u16a4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u16a5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u16a6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u16a7\3\141\1\u16a8\1\u16a9\1\u16aa\2\141\1\u16ab\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0f2a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16ac\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0c80\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16ad\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16ae\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u05cb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u16af\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u03e4\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u16b0\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u16b1\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u16b2\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u16b3\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u16b4\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u145b\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u16b5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u16b6\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u16b7\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u16b8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u16b9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u16ba\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u16bb\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u08a5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u16bc\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u16bd\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u16be\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u16bf\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u16c0"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u16c1\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u16c2\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u16c3\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16c4\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u16c5\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u16c6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u16c7\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u16c8\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u16c9\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u16ca\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u0d33\1\u16cb\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u04f9\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u16cc\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u16cd\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0383\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u131a\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u16ce\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u16cf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0a31\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u16d0\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u16d1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0269"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16d2"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u16d3\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16d4\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u16d5\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16d6\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u16d7\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u16d8\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16d9\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0245\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u16da\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u16db\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16dc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u12a9\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u16dd\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u16de\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16df\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0b05\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u16e0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0610\5\141\1\u01ef"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16e1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u16e2"+ + "\5\141\1\u16e3\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u16e4\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u16e5\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u16e6\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u16e7"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u16e8"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16e9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u16ea"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0bf1"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u16eb\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u122a\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16ec\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u16ed\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u16ee\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u16ef\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u16f0\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u0c3d\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u16f1\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u0681\7\141\1\u05cb\2\141\1\u0fe0\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0c71\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u04ce\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u16f2\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u16f3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16f4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u16f5\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u03ce\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u16f6\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u16f7\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u16f8\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u16f9\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16fa\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u16fb\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\u03a4\6\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u16fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u16fd\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u16fe\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u16ff\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1700\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1701\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1702\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1703\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1704\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1705\7\141\1\u0fd6\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1706\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0916\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1707\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1708\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1284\1\141\1\u1709\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u170a\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u170b\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1399\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u170c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u170d\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u0fec\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u170e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u127f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u170f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1710\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1711\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0945\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u12fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1712\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1713\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u06ec\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1190\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u153c\1\141\1\u1714\5\141"+ + "\1\u1715\3\141\1\u0610\5\141\1\u1716\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1717\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1718\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1719\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u171a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u171b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u171c\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u171d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0b17\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u171e\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u171f\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1720\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1721\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1722\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1723\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0e0d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1724\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1725\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1726\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1727\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1728\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u041a\3\141\1\u0174\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1729\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u172a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u172b\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u172c\14\141\1\u172d\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u172e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\7\141\1\u172f\2\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1730\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1213\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1731\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u043e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1732\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1733\23\141\1\u1734\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1735\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1736\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0e8b\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0245\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u150f\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1186\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1737\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1738\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1739\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u173a\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u173b\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u03ec\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u173c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u173d\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u173e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u173f\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1740\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1741\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1742\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1743\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1744\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u01ef\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0754\15\141\1\u1745\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1746\1\141\1\u1747\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1748\3\141\1\u040d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0b8d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1749"+ + "\1\u174a\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u0e0d\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u174b\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u0c83\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u174c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1274"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u174d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u174e"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u174f"+ + "\4\141\1\u1750\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0614\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0174\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1751\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1752\3\141\1\u1753\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1754\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1755\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1756\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1757\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1758\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1759\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u175a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u175b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u047b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u175c"+ + "\1\141\1\u0687\5\141\1\u08a6\3\141\1\u153d\5\141\1\u153e"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u175d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0614\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0606"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u175e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u175f"+ + "\2\141\1\u1760\7\141\1\u05cb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1761\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1762\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e0d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u046c\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1763\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0b78\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0f38\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1207\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1764\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1218\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c3b\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0821\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1765\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1766\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1767\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1768\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1769\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u176a\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u09a2\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u176b\3\141\1\u05b7\2\141\1\u05b7\6\141\1\u176c\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u176d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u176e\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1434"+ + "\1\u176b\2\141\1\u08ae\1\u05b7\1\141\1\u176f\1\u1770\6\141"+ + "\1\u1771\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1772\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1773\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1774\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1775\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1776\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1777\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u090a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u152c\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u0e7e\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1778\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1779\7\141\1\u177a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u177b\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u177c\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u177d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u177e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u110d\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u177f\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1780\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1781\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1782\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1783\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1784\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1785\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1786"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1787\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1788\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1789\15\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u178a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u178b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u178c\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u178d\13\141"+ + "\1\u047b\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u12fd\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u178e\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u178f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1790\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1791\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1792"+ + "\5\141\1\u1793\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1794\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1795\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1787"+ + "\12\141\1\u1796\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1797\1\u1798\1\u1799\2\141\1\u0396\4\141\1\u179a\1\u179b"+ + "\6\141\1\u179c\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\3\141\1\u0aec\3\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u179d\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u179e\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u179f\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u17a0\2\141\1\u17a1\1\u064e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u0cc4\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17a2\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05d1\12\141"+ + "\1\u044f\4\141\1\u045f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\26\141\1\u06b5\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u06b2\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17a3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u05d1\4\141\1\u17a4\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u04ce\11\141\1\u044f\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u06b5\5\141\1\u17a5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0ada\1\141"+ + "\1\u17a6\1\141\1\u17a7\10\141\1\u17a8\1\u17a9\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u05a8\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u17aa\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u17ab\4\141\1\u17ac\10\141"+ + "\1\u17ad\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u17ae\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u17af\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u17b0\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u17b1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b2\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b3\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u17b4"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u17b5\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u17b6"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17b7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u13ee"+ + "\1\u17b8\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u13ee\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17b9\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u17ba\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u17bb\2\141\1\u06ab\1\u17bc\1\u11b0\4\141\1\u05cb\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17bd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17be\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u17bf\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u17c0\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u17c1\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u17c2\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u17c3\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u17c4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u107d\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\56\0\1\u17c5\3\0\1\u17c6\157\0"+ + "\1\u17c7\117\0\1\u17c8\146\0\1\u0590\5\0\1\u07f1\44\0"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17c9"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u17ca\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u17cb\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f01\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u17cc\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u17cd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u17ce\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0915\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u17cf\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u17d0\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u17d1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1355\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u17d2\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u03c6\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u0fd6\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u17d3\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u17d4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u040f\1\u17d5\1\u17d6\1\u17d7"+ + "\1\141\1\u17d8\1\141\1\u17d9\1\141\1\u17da\6\141\1\u17db"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17dc"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17dd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17de"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u047b"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u103b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u17df"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u17e0"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17e1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1300"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u17e2"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1300"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u17e3"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0ed9"+ + "\10\141\1\u17e4\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u17e5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\1\u17e7"+ + "\6\141\1\132\10\0\6\141\1\0\10\141\1\u17e8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0393\5\141\1\u17e9\1\u0f85\3\141\1\u17ea\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u17eb\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u15d5\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0cb8\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u17ec\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u17ed\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u17ee\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\2\141\1\u0269\4\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u136c\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u17ef\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u17f0\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u17f1\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u17f2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u17f3\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u17f4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u17f5"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u152c"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u17f6"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u17f7"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u17f8"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17f9"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u17fa"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u17fb"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0245"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u17fc\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u17fd\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u17fe\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u17ff\3\141\1\u149b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1800\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1801\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u103a\14\141\1\u1802"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1803\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u095f\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u0245\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1804\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1805\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1806\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u065d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1598\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u14e7\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1807\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1808\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1809\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u180a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u180b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u180c\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0945\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0dd2\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u180d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u180e\15\141\1\u05ba\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u180f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u102f\12\141\1\u1810\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1811\3\141\1\u0dc8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1812\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0eb4\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0c30\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1813\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1814\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1815\12\141\1\u1816"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1817"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1818\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1819\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0b89\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1608\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1207\11\141\1\u1061\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u181a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u181b\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u181c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u181d\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u181e\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u181f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1820\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1821\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u181d\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1822\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1823\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1824\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1825\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1826\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u15e9\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1827\1\141\1\u1828\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1829\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u182a\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u182b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1580\11\141\1\u1823\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u182c\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u182d\3\141"+ + "\1\u182e\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u182f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1830\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1831\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1832\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u03ce\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1833\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1834\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1835"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1836"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1837\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1838\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1839\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u097a\1\141"+ + "\1\u183a\2\141\1\u183b\4\141\1\u183c\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0385\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u14b2\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u11a7\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1636\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u183d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u11a7\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u183e\11\141\1\u04a4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u183f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1840\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1841\1\141\1\u06b7"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1633"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1842\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u158b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1843\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1844\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1845\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1846\1\u1847\6\141"+ + "\1\u1848\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1849\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u184a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u12d7\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u184b\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u184c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u184d"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u184e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u184f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1850"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1492\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1851\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1852\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u13aa\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1853\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1854\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u11a8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u14d4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1855\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\17\141\1\u03e7\7\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1856\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1857\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1858\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1859\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u185a\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u185b\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u01c7\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u165c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u185c\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u185d\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u185e\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u185f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u0245\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u06ee\1\u1860\20\141\1\u1861\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1862\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1863\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1864\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u10cf\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1865\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1866\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1867\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1868\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1869\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u186a\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u186b\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u186c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u186d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u186e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u186f\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1870\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1871\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1872\1\u065b\1\141\1\u0901\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1873\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1874\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1875"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1876\6\141\1\u1877\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1878\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1879\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u187a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u187b\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u187c\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u187d\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u187e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u187f"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1880"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0cd7\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1881\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1882\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1883\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u14e7\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1884\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1885\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1886\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1887\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1888\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1889\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u188a\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u103a\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u188b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u188c\4\141\1\u060f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u188d\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u188e\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u188f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1890\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u167e\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1891\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1892\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1893\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u10aa\1\141\1\u063d\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1894\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1895\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u046a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0411\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1896\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u046a\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u0921\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1897\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1898\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0b5e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1899\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u189a\5\141"+ + "\1\u046a\3\141\1\u189b\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u0836\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u189c\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u189d\5\141\1\u189e\2\141\1\u189f\1\u18a0"+ + "\2\141\1\u18a1\2\141\1\u18a2\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u18a3\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u0d4a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u18a4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0945\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u18a5\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u18a6\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u18a7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0393"+ + "\1\u0a3a\1\141\1\u155c\1\141\1\u12ec\1\141\1\u18a8\10\141"+ + "\1\u18a9\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u18aa\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0a66"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u075e"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u0b24"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18ab"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u18ac\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u18ad\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u18ae\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u18af\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u10d6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u18b0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u18b1\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u18b2\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u18b3\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18b4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u18b5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u18b6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u18b7\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18b8\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u18b9\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u16c4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u18ba\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u18bb\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u18bc\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18bd\3\141\1\u18be\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u18bf\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u18c0\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18c1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06f4\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18c2\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u18c3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18c4\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18c5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u18c6\4\141\1\u18c7\7\141"+ + "\1\u18c8\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u03c0\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u18c9\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u18ca\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u18cb\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18cc"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u18cd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18ce"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u18cf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u18d0\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18d1\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0c40\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u18d2\22\141\1\u1213\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u18d3\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u18d4\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18d5\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18d6\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u18d7\1\u18d8\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18d9\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u18da\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u18db\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u18dc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u18dd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u18de\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18df\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18e0\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u18e1\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u18e2\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u0d73\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u18e3\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0cf6\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0c41\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u18e4\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u18e5\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u18e6\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u18e7\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u070e\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u18e8\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1411"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18e9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u18ea"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u18eb"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u18ec"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18ed"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u18ee"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u18ef"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u18f0"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u18f1"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u18f2\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14e4\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0687\5\141\1\u08a6"+ + "\3\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u18f3\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u18f4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u0b65\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1485\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u18f5\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u175c\1\141\1\u18f6\5\141\1\u1715\3\141\1\u0610\5\141"+ + "\1\u1716\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u0fec"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f\2\141"+ + "\1\u1760\7\141\1\u05cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u18f7\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u14e7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u12f1\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1396\4\141\1\u0768\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18f8\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u139d\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u05e2\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u18f9\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u064e\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u18fa\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0993\11\141\1\u06b3\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u18fb\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0656\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18fc\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u18fd\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u18fe\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u18ff\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\11\141\1\u1900\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1901\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1902\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1903\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1904\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1905\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1906\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u171d\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1907\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1908\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1909\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u190a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u190b\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u190c\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\11\141\1\u190d\15\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u190e\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u190f\5\141\1\u1910\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132"; - private static int[] zzUnpackTrans() { - int[] result = new int[654456]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); - offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, offset, result); - offset = zzUnpackTrans(ZZ_TRANS_PACKED_3, offset, result); - offset = zzUnpackTrans(ZZ_TRANS_PACKED_4, offset, result); - return result; - } + private static final String ZZ_TRANS_PACKED_5 = + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u084d\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\5\141\1\u1911\3\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u10c6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1912\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1913\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1914\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1915\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1916\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1917\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u08ea\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1918\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0d24\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1919\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u191a\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1517\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u191b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u191c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u191d\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u184b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0d70\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u191e\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u05e2\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u191f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1920\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1921\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0e89\4\141\1\u1922\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1923\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1924\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1925\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1926\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0480\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b91\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1927\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1928\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1929\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u192a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u192b\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u192c\1\141\1\u192d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u192e\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1529\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u192e\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u192f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0ada\3\141\1\u1930\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u098a\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0818\1\u1931\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1932\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1933\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1934\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u09f1\11\141\1\u0d5d"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u082f"+ + "\3\141\1\u031a\1\u1171\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1935\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0d1d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1936\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1937\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1938\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1939\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u05b7\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u193a"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u193b"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u047b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05b7"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u05b7"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u05b7"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u193c"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u0392"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392\2\141"+ + "\1\u193d\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0392"+ + "\12\141\1\u193e\3\141\1\u193f\2\141\1\u05b7\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1940\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1941\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1942\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1943\10\141\1\u03d4"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1944\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1945\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1946\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1947\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1948\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1949\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u103b\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u0455\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0455\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u194a\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u194b\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u18bf\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194c\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u194d\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u194f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1439\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1950\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1951\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1952\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1953\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1954\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1955\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1956\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1957\21\141\1\u1958\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1959\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u195a\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u195b\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u195c\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\3\141\1\u195c\3\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u195d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u195e\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u195f\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1960\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1961\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1962\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1963\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u01fa\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u04ce\4\141\1\u1964\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1957\21\141\1\u155a\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1965\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u119c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1966\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1967\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u1968\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1969\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0269\5\141\1\u044f\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u196a\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u196b\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u196c\11\141\1\u196d"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u196e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u196f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1970"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1971"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1972"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1973"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1974"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1975"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1976"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1977"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1978"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1979"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u197a"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u197b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u197c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u197d\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u197e\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u197f\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1980\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1981\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0bd8\10\141\1\u1482"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1982"+ + "\3\141\1\u1983\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1984\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1985\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1986"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1987\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u0461\1\141\1\u1988\4\141\1\u1989\1\141\1\u0610\1\141"+ + "\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u198a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u198b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u198c\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\72\0\1\u0d88\126\0\1\u07a2\160\0\1\u0d88\40\0"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u198d"+ + "\15\141\1\u198e\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1643\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u198f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1990\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0d62\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1991\1\u0ae2\1\141\1\u16a9\13\141\1\u1992\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1993\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1994\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1995\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1996\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1997\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1097\2\141\1\u1998\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1999\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u199a\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u199b\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0269\4\141"+ + "\1\u199c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u199d\1\141\1\u044f\1\u199e\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u199f\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19a0\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19a1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u19a2\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19a3\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1027\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u15c3\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1051\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1300\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19a4\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19a5\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\25\141\1\u19a6\1\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19a7\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u19a8\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19a9\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u19aa\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u19ab\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0e74\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1074\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u19ac\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u19ad\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19ae\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u19af\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u06bb\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u06ee"+ + "\7\141\1\u0269\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u19b0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u03a4"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u19b1\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u19b2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19b3"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u0c40"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u044f"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19b4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u081f"+ + "\1\u17fe\21\141\1\u0779\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u19b5"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u19b6\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u19b7\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u19b8"+ + "\3\141\1\u08d0\1\141\1\u045c\3\141\1\u19b9\1\u060f\2\141"+ + "\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u19ba\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u19bb\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u19bc\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u05b0\14\141\1\u19bd\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u19be\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0699\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u19bf\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u19c0\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u19c1\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u098a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u19c2\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u19c3\6\141\1\u0c97"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u19c4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u19c5"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u19c6"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u090a\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0768"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u116d"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u0b8b\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u19c7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u19c8\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u19c9\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u19ca\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u19cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19cc\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1207\5\141\1\u11b0\5\141\1\u19cd\3\141"+ + "\1\u19ce\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u19cf\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19d0\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u19d1"+ + "\7\141\1\u19d2\2\141\1\u19d3\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u046a\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19d4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u19d5\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u19d6\10\141\1\u182d\1\u19d7\5\141\1\u19d8\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u19d9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u19da\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u19db\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u19dc\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0bc5\5\141\1\u19dd\1\141"+ + "\1\u19de\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u19bc\5\141\1\u19df\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1485\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u19e0\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u19e1\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u19da\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u19e2\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u19e3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u19e4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u19e5\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u19e6\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u0b0b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u19e7\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u138a\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u138a\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b64\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u19e8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u19e9\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u19ea\2\141"+ + "\1\u103a\13\141\1\u19eb\1\u19ec\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u19ed\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0bf1\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u19ee\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u19ef\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f0\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f1\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0eda\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f2\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u19f3\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u19f4\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u19f5\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1844\12\141\1\u19f6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u19f7\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u19f8\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u19f9\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u19fa\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u19fb\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u19fc\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u19fd\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u19fe\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u19ff\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1a00\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1a01\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0afc\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a02\3\141\1\u1a03\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a04\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u084f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a05\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u08bb\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a06\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1a07\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\1\u1a08\6\141\1\132\10\0\6\141\1\0\10\141\1\u1a09"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a0a\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1a0c\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a0d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a0e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a0f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a10"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a11\11\141\1\u12bc\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a12\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1a13\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a14\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u1a15\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a16\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1a17\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1a18\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1a19\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a1a\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1a1b\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a1c"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a1d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1290\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1a1e\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u166e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1a1f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1a20\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1a21\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a22\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a23\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a24\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a25\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1a26\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a27\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1a28\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a29\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u15f9\6\141\1\u1a2a\5\141\1\u1a2b\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1a2c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1a2d\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1a2e\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u076a\1\u1a2f\2\141\1\u1a30\1\141"+ + "\1\u12ec\2\141\1\u164f\4\141\1\u1a31\7\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1a32\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1a33\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1a34\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a35\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a36\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0d27\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u0614\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1a37\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a38\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0e8f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a39"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a3a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a3b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a3c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a3d"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1a3e\3\141\1\u1a3f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1a40\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1a41\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1a42\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1a43\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1a44\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1549\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u15f9\6\141\1\u1a45"+ + "\2\141\1\u1a46\1\141\1\u0d02\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1a47\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a48\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1274\5\141\1\u0d02\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1a49\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u125e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1a4a\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1a4b\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0e10\1\141\1\u1a4c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1a4d"+ + "\11\141\1\u1a4e\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a4f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1a50\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a51\3\141\1\u0b05\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1a52\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1a53\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a54\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1a55\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a56\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1a57\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a58\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1105\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u158b\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u10f4\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1a59\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1a5a\2\141\1\u1a5b\1\u08ab\1\141\1\u1a5c\1\141"+ + "\1\u1a5d\1\141\1\u0208\1\u1a5e\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a5f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a60\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a61\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a62\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a63\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a64\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1a65\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1a66\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u15ef\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a67\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1a68\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1a69\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u0749\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a6a\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a6b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1a6c\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u0afc"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1a6d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1485"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1a6e"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1a6f"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u15f9"+ + "\3\141\1\u1a70\1\141\1\u1274\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a71\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1a72\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1a73\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1a72\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1a74\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a33\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1a75\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1a76\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u13ee\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1a75\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a77"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1a78\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1a79\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a7a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a7b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1a7c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1a7d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a7e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1a7f\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1a80\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1a81\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u05b7\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a82\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u05d8\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a83\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1a84\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u0606\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1a85\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1a86\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u0f80\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u0461\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1013\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1a87\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a88\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a89"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1a8a\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0788\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a8b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\3\141\1\u1a8c"+ + "\3\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1a8d\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a8e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1a8f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a90\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1a91\6\141\1\u1a92\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a93\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1a8f\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1a94\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1a95\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1a96\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1a97\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1a98"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a99\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1100\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u1a9a\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a9b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1a9c\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0e8b\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1a9d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1a9e\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1a9f"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1aa0"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1aa1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1aa2"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1aa3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0687"+ + "\4\141\1\u0411\1\u090e\3\141\1\u153d\5\141\1\u1716\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u14e4\2\141\1\u0e8f"+ + "\2\141\1\u05dd\7\141\1\u05cb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1aa4\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1aa5\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1aa6\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1aa7\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0485\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1aa4\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1aa8\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1aa9\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1aaa"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1aab\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1aac"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1aad"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1aae"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1aaf"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\4\141\1\u1ab0\4\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ab1\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1ab2\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ab3\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u0ff4\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1ab4\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1ab5\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1ab6\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1ab7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0a70\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ab8\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1ab9\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e88\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1aba\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1abb\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1abc\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1abd\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1abe\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1abf\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u1ac0\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1abf\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1ac1\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ac2\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1ac3\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1ac4\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ac5"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u10d8\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1ac6\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ac7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ac8\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1ac9\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ddf\1\141\1\u0409"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1aca"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u175d\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u0262\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u0411\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u06f5\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0f38\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1acb\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u12c9\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1acc\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1acd\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1ace\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0ddc\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u05b7\1\u087a\1\141\1\u1acf\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0392\2\141\1\u05d1"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u05b7\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u087a"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ad0"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0f01"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u09a3"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ad1"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1ad2\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ad3\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u11ba\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1ad4\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ad5\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ad6\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ad7\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ad8\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1ad9\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ada\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1adb\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1ada\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1adc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1434\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1add\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u0cf0\4\141\1\u06e9"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u1ade\3\141\1\132\10\0\6\141\1\0\10\141\1\u1adf"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0e81\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u0e17\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0c6e\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1964\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ae0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0ecd\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1ae1\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u128a\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ae2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0916\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ae3\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ae4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1ae5"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u01fa"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ae6\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1ae7\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1ae8\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1ae9\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u05b2\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1aea\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1aeb\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1aec\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1aed\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1aee\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1aef\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1af0\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1af1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1af2\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u19b6\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1af3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1af4\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1af5\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1af6\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1af7\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1af8\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1af9\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1afa\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1afb\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1afc\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u0d70\2\141\1\u1523\1\141\1\u1afd\1\u1523\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1afe\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1aff\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b00\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b01\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1b02\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1b03\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1b04\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u06fc\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b05\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1b06\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1b07\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u040d\6\141\1\u1b08\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1b09\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1b0a\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b0b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1b0c\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1b0d\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b0e\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b0f\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0db6\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0dcc\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1b10\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u08f6\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0a3a\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1b11\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u132b\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1b12\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b13\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1b14\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b15\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1b16\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b17\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b18\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b19\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1b1a\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1b1b\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1b1c\5\141\1\u1b1d\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1b1e\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b1f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1b20\20\141\1\u047b"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1b21"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u1b22"+ + "\2\141\1\u1b23\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1b24\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1b25\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1315\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u109d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b26"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b27\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1b28\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1b29\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b2a\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b2b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b2c\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b2d\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f\2\141"+ + "\1\u1a11\7\141\1\u05cb\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b2e\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b2f\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0d65\12\141\1\u09a2\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u102f\2\141\1\u09fc\1\u040d"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1b30\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b31\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u06bb\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b32\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u151f\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1b33\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b34\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u04ce\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1b35\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\26\141\1\u0269\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1391\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1b36\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1b37\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1b38\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1b39\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1b3a\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u0f95\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b3b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b3c\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b3d\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b3e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b3f\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b40\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b41\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b42\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u097d\4\141\1\u1b43\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1b44\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1b45\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1b46\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b47\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b48\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b49\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u05b7"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b4a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1b4b"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b4c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b4d\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u099e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b4e\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u19bc\5\141\1\u1b4a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u048b"+ + "\3\141\1\u1b4f\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1b50\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1b51\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b52"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b53\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b54\2\141\1\u1b55\1\141\1\u0411\1\u048b\3\141\1\u0610"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0e8f"+ + "\1\141\1\u1b56\1\u0e91\1\u1b57\6\141\1\u05cb\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b58\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u08f6\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1b59\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b5a\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u0f61\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0868\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b5b\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1b5c\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1b5d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1ac8\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1b5e\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1b5f\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1b60\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b61"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u19f7\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1b62\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1b63\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1b64\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1b65\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b66\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0cf6\3\141\1\u0396\21\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u12a7\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1b67\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1b68\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u04ce\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0392\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1b69\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1b6a\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b6b\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b6c\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1b6d\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b6e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1b6f\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b70"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1a11\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b71\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b72\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u0ea0"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b73"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1a11"+ + "\11\141\1\u12bc\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1171\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1b74\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1b75\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1b76\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1b77\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1b78\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1b79\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1b7a"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1b7b\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1b7c\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1b7d\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\6\141\1\u1b7e\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1b7f\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1b80\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0899\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1b81\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1b82\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1b83\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1b84\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1b85"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b86\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1b87\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1b88\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b89\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b8a\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1b8b\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b8c\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b8d\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u1b8e\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1b8f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1b90\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b91"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1b92"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1b93"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0881"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1271"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1b94"+ + "\21\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1b95"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u05dd"+ + "\5\141\1\u0610\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u175f\2\141\1\u05dd\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b96\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b97\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1b98\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1b99\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1b9a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0b16\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1b9b\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1b9c\1\141\1\u1b9d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b9e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1b9d\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b9f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1ba1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1ba2\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u0919\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ba3\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1ba4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u0afc\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1ba5\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ba8\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1ba9\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1baa\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bab\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u173c\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1bac\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bad\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1bae\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0485\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1baf\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u047b\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1bb0\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1bb1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb2\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1bb3\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb4\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bb5\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u04a1\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1bb6\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1bb7\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u18b7\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1bb8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1a82\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1872\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1bb9\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bba\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bbb\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12d9\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1bbc\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bbd\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bbe\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u03d4\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1bbf\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u12f1\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0b10\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bc0\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u05d8\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bc1\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bc2\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1bc3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1bc4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1bc5\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1bc6\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bc7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0add"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1bc8"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1bc9"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bca"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0ad5"+ + "\4\141\1\u139b\11\141\1\u1213\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bcb\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u0913\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1bcc\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1bcd\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u1bce\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1bcf\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1bd0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u11a8\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1bd1\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u05b1\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1bd2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u0269\3\141\1\u08f6\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0705\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1bd3\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bd4\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u18e8\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1bd5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1bd6\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1bd7\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1bd8\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u166f\1\141\1\u1bd9\1\u1bda\1\u0903"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1bdb"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1bdc\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1bdd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0204\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u122f\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1bde\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u0783\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u18ff\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1bdf\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1be0\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1235\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1be1\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u03c8\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1be2\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1be3\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\20\141\1\u1be4\6\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1934\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1be5\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1be6\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1be7\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1009\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1be8\3\141\1\u0211\3\141\1\u0a66\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1be9\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1bea\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1beb\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1bec\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\7\141\1\u1bed\1\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bee\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1bef"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u03e4\3\141\1\u0723\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e8b\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1bf0\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1bf1\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1bf2\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1003\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0392\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1bf3\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1bf4\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0e88\1\u0c6e\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bf5\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u191f\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1bf6\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1bf7\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1bf8\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1bf9\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1bfa\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1bfb\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1bfc\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1bfd\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1bfe\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1bff\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u04ce\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1931\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c00\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1c01\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u16d5\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1c02"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1c03"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1c04\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1aa6\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1487\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u0c6e\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1305\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c05\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0455\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1c06\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c07\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c08\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c09\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1c0a\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\11\141\1\u1c0b"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1c0c\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1c0d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u0291\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u104a\2\141\1\u1777\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1c0e\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c0f\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u08a6\3\141\1\u0610\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u156e\1\141\1\u08db"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1c10"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1c11"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u044f"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c12"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1c13"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0ce4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1c14\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0c40\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c15\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c16\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c17\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c18\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u176f\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c19\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1c1a\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c1b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1973\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1c1c\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1c1d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1c1e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c1f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1bd2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c20\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1c21\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c22\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1c23\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c24\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c25"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1c26\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c27\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c28"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1c29\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u1c2a\1\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c2b\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0f6a\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1c2c\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1c2d\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c2e\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c2f\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c30\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0754\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c31\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1c32\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u18bf\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u0f25\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c33\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1c34\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c35\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1c36\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c37\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u0174\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1c38\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1c39\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1c3a\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1c3b\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0e17\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1c3c\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0a3a\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1c3d\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u040d\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u0c85\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c3e\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1c3f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u11e8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1c40\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1933\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1c41\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1c42\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c43\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1bf2\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1c44\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u0bf1\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\20\141\1\u19ba\6\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1112\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c45"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u060f\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u0c7d\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1c46\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u16ca\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c47\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1c48\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u05dd\12\141\1\u0eb0\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u1c49\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c4a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c4b\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1c4c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u132b\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1c4d\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1c4e\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c4f"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c50\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c51"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1c52"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1c53"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u045f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1234\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1c54\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1b45\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1c55\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1b4f\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c56\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1c57\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1c58\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c59\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1c5a\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0df3\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1c5b\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u12f1\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1c5c\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1c5d\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0b0d\14\141\1\u01ea\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0ed2\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c5e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1c5f\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1546\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1c60\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u0699\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1c61\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1c62\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u11b6\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u0690\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1c63\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\10\141\1\u1c64\16\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1c65\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1c66\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u19f7\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1c67\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c68\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u19f7\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1c69\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u1c6a\15\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\5\141\1\u1c6b\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e17\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u0d55\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u0687\7\141\1\u0627\1\141\1\u0610"+ + "\2\141\1\u06e9\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u08f6\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1b1e"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c6c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1a11"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1c6d"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1c6e"+ + "\6\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1c6f"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1c70"+ + "\11\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1c71"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1c72"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1c73"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1739\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0"; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + private static final String ZZ_TRANS_PACKED_6 = + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1c74\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1c75\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1c76\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1c77\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1c78\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\6\141"+ + "\1\u1c79\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u04f9\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1c7a\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u08c1"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c7b"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c7c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1b83"+ + "\2\141\1\u0cca\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1c7d\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c7e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1c7f\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u14b2\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1c80\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1c81\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u189c"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1c82\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c83\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1c84\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c85\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c86\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1c87\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c88\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c89\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c8a\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0269\5\141\1\u1c8b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1c8c\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u10d7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1a3e\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1c8d\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u12f1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1c8e\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1c8f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1c90\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1c91\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1c92\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1c93\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1c94\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1c95\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1c96\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\20\141\1\u03ce\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\13\141\1\u1c97\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1c98\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1019\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1c99\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u11df\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1c9a\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u11df\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1c9b\1\u1c9c\4\141\1\u1962\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u03a8\5\141\1\u1c9b\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1c9d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u0cf0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1c9e\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u044f\4\141\1\u1c9f\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1ca0\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1470\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u0a3a\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ca1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1ca2\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1a65\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1ca3\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1ca4\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1ca5\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1ca6\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ca7\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u1ca8\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1ca9\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1caa\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u060b\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1cab\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\26\141\1\u1cac\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1cad\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cae\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u138a\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1caf\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cb0"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cb1\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1cb2\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cb3\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cb4"+ + "\11\141\1\u093e\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cb5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0916\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1bd0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0c74"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1013\4\141\1\u06b2\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u06f1\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\3\141"+ + "\1\u0269\3\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u0997\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1cb6\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1cb7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cb8\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\23\141\1\u1cb9\3\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0993\3\141\1\u1bb5\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1cba\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u18e8\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1cbb\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\17\141\1\u1cbc\7\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1bfa\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1cbd\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0c81\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1cbe\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1366\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1cbf\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1cc0\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u08f6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1cc1\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1cc2\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\25\141\1\u1cc3\1\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1cc4\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1cc5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cc6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1cc7\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1be8\6\141\1\u1cc8\1\u0a66\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1cc9\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0461\1\u1be8\1\u0d70\4\141\1\u1cca"+ + "\7\141\1\u084f\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ccb\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ccc\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1ccd\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cce"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1ccf\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cd0\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1cd1\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1cd2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1cd3\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0393\1\u1cd4\1\u0db7\2\141\1\u12ec\1\141\1\u06b4\1\u1cd5"+ + "\7\141\1\u0eee\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1cd6\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cd7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1cd8\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cd9\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1cda\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1c6a\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0e17\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u132b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1cdb\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u0ea5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1237\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u08f6\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0455\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u08f5\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1cdc\3\141\1\u1cdd"+ + "\1\141\1\u1cde\1\141\1\u1cdf\5\141\1\u1ce0\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u11ea\1\141\1\u1ce1"+ + "\16\141\1\u08ef\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1ce2\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ce3"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0b16\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1ce4\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ce5\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u134a\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u03c3\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ce6\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ce7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u153d\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ce8\2\141"+ + "\1\u1ce9\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cea\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1ceb\12\141\1\u1cec\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1ced\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1212"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1cec\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1cee\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1cef\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1cf0\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1cf1\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1cf2"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1112"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1cf3"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1cf4"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1cf5"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1cf6"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1cf7\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1cf8\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1cf9\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1cfa\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1cfb\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1cfc\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u0610\7\141\1\u06ec"+ + "\2\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1cfd"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141\1\u1cfe"+ + "\15\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1cff"+ + "\4\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1d00"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d01"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1d02"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u03ec"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1d03"+ + "\2\141\1\u1d04\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1d05\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1d06\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1d07\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1d08\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1d09\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1d0a\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u044e\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d0b\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d0c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u082f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1c6a\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d0d\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d0e"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d0f"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0c93"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u0b78"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0b1f\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d10\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0925\12\141"+ + "\1\u0927\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d11\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1d12\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1d13"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1d14\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u17ea\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1d15\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1d16\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u19ea\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d17\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u19d1\7\141\1\u19d2\1\141\1\u0208\1\u1d18"+ + "\2\141\1\u0464\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u1d19\15\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u1d1a\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d1b"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1d1c\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1d1d\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d1e\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d1f"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1d20\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1d21\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1d22\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c7c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1b45\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u0400\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u0d37\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u118e\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1d23\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1d24\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0245\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u03c1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1d25\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1d26\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d27\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1d28\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d29\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u0d3f\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d2a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u0e17\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1d2b\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1d2c\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u165d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d2d\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1d2e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1d2f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1d30\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1d31\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d32"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d33\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d34"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d35\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1d36\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d37\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\7\141\1\u1d38\2\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1d39\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1d3a\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1684\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\1\141\1\u063c\5\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u0971\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3c\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d3d\2\141"+ + "\1\u1d3e\13\141\1\u1d3f\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u0ee0\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1d40\1\u1d41\1\141\1\u11cd\1\141\1\u1d42"+ + "\1\141\1\u1d43\1\u18c3\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1d44\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d45"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1d46\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u122f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1d47\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d48\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d49"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1ca4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u0948"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d4a\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d4b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1d4c\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1d4d\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d4e\2\141"+ + "\1\u1d4f\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u0208\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1d50\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u09bd\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d51\12\141\1\u1c62\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1d52\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1d53\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\5\141\1\u09a9\1\141\1\u1d54\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u1d55\21\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u19db\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1d56\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1d57\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1d58\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d59\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d5a\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u0903\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0a07\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1d5b\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1a82\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u0687\2\141\1\u1d5c\21\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1d5d\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u0b65\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1d5e\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1d5f\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\1\141\1\u094a\5\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u0760\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1546\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d60\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141"+ + "\1\u1d61\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1d62\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d63\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u0821\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d64\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1d65\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1d66\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d67\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u18e8\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1a91\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141"+ + "\1\u1d68\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1d69"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d6a"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d6b"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0d5d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d6c"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d6d\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u08f6\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1d6e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0269\1\141"+ + "\1\u1be6\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1d6f\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u1d70\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1d71"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1d72\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1cc6\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d73\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1d74\3\141"+ + "\1\u0211\10\141\1\u111c\2\141\1\u1502\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1d75\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1d76\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u12a7\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1d77\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\24\141\1\u19ce\2\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1d78\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1d79\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1d7a\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1d7b\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1d7c\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0db6\11\141\1\u1d7d\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u191b\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u0cab\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1d7e\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u13e2\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u176a\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1d7f\4\141\1\u1274\1\u1d80\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1d81\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1d82\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u05cb\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1d83\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d84\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u03ec"+ + "\3\141\1\u1d85\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d86"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d87\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1954\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1d88\2\141\1\u1777\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1d89\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u060e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1d8a\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1d8b\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1d8c"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1d8d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d8e\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d8f\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d90\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1d91\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1d92\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d93\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1d94\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1d95\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1d96\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u0819\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1d97"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d98"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1d99"+ + "\2\141\1\u1d9a\3\141\1\u1d9b\6\141\1\u1d9c\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1d9d\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1d9e\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1d9f\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1b02\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da0\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1da1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da2\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u13ee\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1da3\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1da4\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1da5\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\25\141\1\u1da6\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1da7\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u0818\2\141\1\u1da8\3\141"+ + "\1\u0a53\2\141\1\u0830\2\141\1\u1da9\1\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\3\141\1\u0aec\3\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1daa\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\24\141\1\u1dab\2\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1dac\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dad\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u060b\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u18e3\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dae\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1daf\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1db0\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1db1\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1db2\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u0679\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u0bc5\2\141\1\u1db3"+ + "\4\141\1\u1db4\2\141\1\u1db5\6\141\1\u08ef\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1db6\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u1db7\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1b9a\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1db8\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1db9\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1dba\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u19d6\1\u1dbb\4\141\1\u1dbc\1\141\1\u1dbd"+ + "\1\u182d\6\141\1\u19d8\6\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1dbe\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dbf\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u0bc5\3\141\1\u03e4\14\141\1\u1dc0\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1dc1\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0901\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1cdc\1\u1dc2\1\u03e4"+ + "\1\141\1\u101e\1\141\1\u0723\1\141\1\u1dc3\6\141\1\u1dc4"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1dc5"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1dc6"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0f1e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1dc7"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u0b05"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dc8"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1dc9"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dca"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141\1\u1dcb"+ + "\7\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1dcc"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u185a"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1dcd"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dce"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1dcf"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dd0"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dd1"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1dd2"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1dd3"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1dd4"+ + "\10\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1dd5"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1dd6\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\4\141\1\u0269\4\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1dd7\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1934\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1dd8\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1dd9\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dda\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u0dda\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1ddb\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1ddc\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1ddd\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1dde\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1ddf\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1de0\1\141\1\u0d73\1\u1de1\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de2\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u122f\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1de4\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1de5\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1de6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1de7\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1de8\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1271\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1de9\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1dea\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1deb\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1dec\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1453\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1ded\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u03cd\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1dee\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1def\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1df0\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1df1\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1df2\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u0dd3\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u1df3\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1df4\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1df5\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1df6\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1ca9\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1df7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1df8\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1df9\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1dfa\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1dfb\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1b7b\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1dfc\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1dfd\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1dfe\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1dff\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\17\141\1\u1e00\7\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1e01\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e02\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1e03\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1e04\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1e05\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1e06\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1e07\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1d74\14\141\1\u111c\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e08\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u13b5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e09\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\24\141\1\u1e0a\2\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1e0b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e0c\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e0d\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e0e"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u155c\3\141\1\u1351\10\141\1\u0411\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u155c\3\141\1\u1351\7\141"+ + "\1\u0945\1\u0411\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1e0f\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u0c85"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0699"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1e10\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u03c6\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1395\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u0f6b\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1e11\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1e12\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1350\1\141\1\u11d2"+ + "\6\141\1\u0e81\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u1e13\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1e14\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e15\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1e16\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1e17\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u045c\4\141"+ + "\1\u0848\5\141\1\u1e18\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e19\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1e1a\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1e1c\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1d\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u1e1e\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e1f\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e20\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1e21\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e22\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1e23"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e24"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e25"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e26"+ + "\5\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u102f"+ + "\2\141\1\u1bf1\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u0dc8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1e27\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1e28\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e29\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e2a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u18e3\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e2b\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1e2c\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1885"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u18cc\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0bef\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1e2d\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u01fa"+ + "\20\141\1\u1e2e\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\11\141\1\u0614\10\141\1\u0614\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1e2f\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1d09\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1dab\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e30\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e31\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e32\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e33\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e34\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e35\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u11a8\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e36\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e37\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1e38\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1e39\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e3a\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1e3b\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1b0d\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1e3c\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\7\141\1\u1e3d\17\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1e3e\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1e3f\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u12f1\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u08e6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e40\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e41\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1e42\1\u0913\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e43\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1e44\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e45\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u0269\5\141\1\u0827\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1e46\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1e47\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1e48\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u12a7\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1e49\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u0f1f\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1105\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1e4a\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e4b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e4c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u1e4d\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1e4e\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\14\141\1\u1e4f\12\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1e50\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1492\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1e51\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0f4a"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u1e52\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u0ed9\11\141\1\u1b98\13\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u0dda\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1e53\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1e54\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u0690\10\141\1\u1e55\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u06bb\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e56\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e57\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1e58\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1e59\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1e5a\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1e5b\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1e5c\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e5d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e5e\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e5f\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u11b1\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\141\1\u1e60\25\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\26\141\1\u1e61\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\11\141"+ + "\1\u0fd6\15\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u11df\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1e62\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1e63\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1470\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\13\141"+ + "\1\u1e64\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1e65\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1e66"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e67"+ + "\2\141\1\u045c\3\141\1\u12db\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1e68\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e69\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1be5\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04ae\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e6a\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1e6b\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e6c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e6d\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e6e\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1e6f\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\23\141\1\u0fcf\3\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1e70\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0a07\25\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1e71\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\u1e72\26\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1e73\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1e74"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1e75\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1e76\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1e77\25\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e78\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e79\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\5\141"+ + "\1\u1e7a\21\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u1e7b\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u047b\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u0388\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u0eeb\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1240\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1e7c\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1957"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1e7d"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1d8a"+ + "\25\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1e7e"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1e7f"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1e80"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e81"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1e82\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1e83\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1e84\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1e85\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1e86\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1e87\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1e88\1\141\1\u1e89\1\u1e8a"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ca2"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\26\141\1\u198e"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u1e8b\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e8c\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1e8d\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1e8e\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1e8f\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u0c81\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1e90\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1e91\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1e92\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\1\u1e93\6\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u06bb\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u15b8\6\141\1\u1e94\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1e95\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1e96\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1e97\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1e98\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u08ed\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1e99\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1e9a\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1e9b\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1e9c\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u1e9d\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1e9e\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1e9f\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1ea0\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1ea1\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u0df3\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1ea2\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1ea3\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u04be\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1ea4\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u08f6\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u04ec\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1ea5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1dcb\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ea6"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ea7\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ea8\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ea9\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1eaa\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1eab\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u0841\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1eac\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u0e88\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1ead\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\24\141\1\u1eae\2\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1eaf\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u12fc\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1eb0\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1eb1\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1eb2\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u10bd\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u188c\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u0e0c\2\141\1\u1b98"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u0cba"+ + "\3\141\1\u1eb3\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1eb4\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u138a\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1eb5\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u0b16\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u1eb6"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1eb7\20\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1eb8\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1df6\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u0840\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1eb9\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1eba\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1c48\7\141\1\u1ebb"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u0e7d"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ebc"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u1ebd"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1ebe"+ + "\23\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u04ce"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ebf\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u0eff\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\13\141\1\u0b78\13\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ec0\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1009\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ec1\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ec2\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ec3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u08f6\3\141"+ + "\1\u0eb4\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u0986\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141"+ + "\1\u041e\1\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ec4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1ec5\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1b1e\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ec6\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ec7"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1ec8"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ec9"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1eca\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u136b\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ecb\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1ecc\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ecd\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ece\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\21\141\1\u1ecf\5\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1ed0\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1ed1\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\23\141\1\u1ed2\3\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\16\141\1\u1ed3\10\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1ed4\26\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1ed5\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ed6\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1ed7"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ed8\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ed9\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1eda\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1edb\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u09e1\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\17\141"+ + "\1\u06b2\7\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1edc\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1edd\6\141\1\u0f73\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1ede\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\15\141\1\u1edf\11\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1db3\16\141\1\u08ef\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1ee0\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1ee1\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1ee2\1\141\1\u1dbd\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\20\141\1\u1ee3\6\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ee4\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u1ee5\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1ee6\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1ee7\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\u1ee8\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1ee9\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1eea\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1eeb\11\141\1\u1eec\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1eed\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1eee\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1dcf\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1eef\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u0fda\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1ef0\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1dd3\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u0bcc\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1ef1\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1ef2\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1ef3\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u087a\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u10d5\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u0e17\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1ef4\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1ef5\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1ef6\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\21\141\1\u1d7f\5\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\10\141\1\u1ef7\16\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\1\141\1\u0ed9\12\141\1\u0610\4\141\1\u1ef8\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u0945\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1ef9\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1ca4\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1efa\3\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1efb\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1efc\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1009\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\u1efd\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1efe\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1eff\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\22\141\1\u1f00\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\15\141\1\u1f01\11\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f02\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1f03\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1f04\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f05\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f06\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f07\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f08\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1f09\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f0a\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f0b\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u1f0c\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1f0d\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\7\141\1\u1f0e\17\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f0f\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1f10\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u1f11\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\u1f12\1\141\1\u1f13\1\u1f14\4\141\1\u1f15"+ + "\2\141\1\u1f15\1\141\1\u1f16\7\141\1\u1f17\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f18\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f19\3\141\1\u123f\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f1a\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f1b\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1f1c\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\21\141\1\u1f1d\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1bb5\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u118e\10\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1cda\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u0b16\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1f1e\17\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1f1f\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u12f1\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f20\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f21\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u0c7d\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f22\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\13\141\1\u1e46\13\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1f23\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f24\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f25\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1a3e\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1f26\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f27\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f28\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f29\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u0d02\3\141\1\u1802\4\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\16\141\1\u0776\2\141"+ + "\1\u1eb3\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\22\141"+ + "\1\u1802\4\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1cda\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u0396\7\141\1\u1f2a\14\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1f2b\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\4\141\1\u1f2c\22\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\6\141\1\u1f2d\20\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\12\141\1\u1a91\3\141\1\u1a8d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u12a9\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1f2e\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\11\141\1\u1f2f\15\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\u1f30\26\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\22\141\1\u1f31\4\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1f32\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f33\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u1f34\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f35\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\21\141\1\u1cec\5\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u0748"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f36\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f37\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f38\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141"+ + "\1\u1f39\20\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f3a\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1f3b"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f3c"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1f3d"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1f3e\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f3f\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f40\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f41\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u1f42\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f43\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f44\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1f45\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1f46\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f47\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u08bb\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1f48\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f49\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u05d9\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0c24\5\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\3\141\1\u1f4a\23\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\13\141\1\u1f4b\13\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u063d\4\141\1\u1f4c\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f4d\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f4e\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f4f\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\2\141\1\u1f50\24\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\6\141\1\u1f51\20\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\14\141\1\u1f52\12\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1f53\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1f54\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\16\141\1\u1f55\10\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1f56\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u08de\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1f57\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\5\141\1\u12ec\21\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\12\141\1\u0b78\14\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u152c\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\7\141\1\u10d7\17\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\24\141\1\u0480\2\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1f58\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\3\141\1\u1b20\23\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f59\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u15b0\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1f5a\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1f5b\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1e20\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1f5c"+ + "\26\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f5d"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1271"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1f5e"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\10\141\1\u1f5f\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1c38\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1f60\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f61\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f62\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1f63\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\22\141\1\u1f64\4\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1f65\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1f66\11\141\1\u1f67"+ + "\13\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f68"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1f69"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1f6a"+ + "\17\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1e0b"+ + "\12\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1f6b"+ + "\1\u060f\13\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\16\141"+ + "\1\u1f6c\10\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1f6d\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f6e\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1f6f\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141"+ + "\1\u1f70\12\141\1\u0b28\2\141\1\u1f71\1\141\1\u1f72\1\141"+ + "\1\u1f73\3\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f74\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1f75\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\21\141"+ + "\1\u1f76\5\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f77\3\141\1\u04c5\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1b78\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\u1f78\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141"+ + "\1\u1f79\14\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\u065d"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\u1f7a\26\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7b\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7c\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7d\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1f7e\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\6\141\1\u1271\20\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1f7f\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f80\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f3c\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f81\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1f82\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f83\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f84\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1f85\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1f86\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1f87\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1f88\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1f89\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\2\141\1\u1f8a\24\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\7\141\1\u1b4f\17\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1f8b\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\13\141\1\u1f8c\13\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\15\141\1\u1f8d\11\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f8e\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1f8f\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f90\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1f91\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f92\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1f93\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\10\141\1\u1f94"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\27\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1f95\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141"+ + "\1\u1f96\22\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f2d\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\3\141"+ + "\1\u1f97\23\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\24\141"+ + "\1\u1f98\2\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1f99\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\6\141\1\u06b4"+ + "\20\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1e20"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\23\141\1\u1f9a"+ + "\3\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1f9b"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\u1a84\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1f9c\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u1f9d\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1f9e\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1f9f\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1fa0\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\24\141\1\u1fa1\2\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\10\141\1\u1fa2\16\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u156e\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fa3\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1fa4\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\11\141\1\u182d\6\141\1\u19d8\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1fa5\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\141\1\u1ee4\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\21\141\1\u1fa6\5\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1fa7\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1fa8\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1a58\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1fa9\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1faa\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\12\141\1\u1fab\14\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fac\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\13\141\1\u1fad\13\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\23\141\1\u1fae\3\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\6\141\1\u1faf\20\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\5\141\1\u0396\13\141\1\u0e88\5\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fb0\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1fb1\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1fb2\1\u1e77\25\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\10\141\1\u1fb3\16\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1fb4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fb5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u1fb6\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1f68\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fb7\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\25\141\1\u1fb8\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\11\141\1\u1fb9\15\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\3\141\1\u1fba\23\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1fbb\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u1fbc\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\20\141\1\u1a58\6\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1a58\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\1\141\1\u15e9\25\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\15\141\1\u0df3\11\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1fbd\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\4\141\1\u1fbe\22\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u12fc\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\2\141\1\u190a\24\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\3\141\1\u1fbf\23\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\u1fc0\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\14\141\1\u1fc1\12\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\22\141\1\u1fc2\4\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\11\141"+ + "\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141"+ + "\14\0\3\141\1\u1fc3\23\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1fc4\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1fc5\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1fc6\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fc7\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\6\141\1\u1fc8\20\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1fc9\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\20\141"+ + "\1\u1fca\6\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1fcb\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u1fcc\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\25\141\1\u05d1"+ + "\1\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1fcd"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1435"+ + "\14\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1fce"+ + "\24\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1fcf"+ + "\22\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u0776\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1fd0\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd1\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd2\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\7\141\1\u1fd3\17\141"+ + "\1\0"; + + private static final String ZZ_TRANS_PACKED_7 = + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\12\141\1\u1fd4\14\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fd5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u1fd6\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\7\141\1\u1fd7\17\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u1fd8\2\141\1\u106b\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\5\141\1\u1271\21\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\3\141\1\u1fd9\23\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\12\141\1\u1fda\14\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\2\141\1\u1fdb\24\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u1fdc\25\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fdd\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fde\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\20\141\1\u1fdf\6\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\15\141\1\u1fe0\11\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe1\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe2\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\14\141\1\u1fe3\12\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\16\141\1\u1fe4\10\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u1fe5\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\23\141\1\u1fe6\3\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u1fe7\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u1fe8\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\10\141\1\u1fe9\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\27\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\4\141\1\u1fea\22\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\1\141\1\u1feb\25\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\10\141\1\u1fec\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\12\141\1\0\7\141\1\132\10\0\6\141\1\0\10\141"+ + "\1\u1fed\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\27\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fee\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\10\141\1\u1fef\16\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\1\u1ff0\26\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\7\141"+ + "\1\u1ff1\17\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\2\141"+ + "\1\u1ff2\24\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\15\141"+ + "\1\u1ff3\11\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141"+ + "\1\u1ff4\16\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\11\141\1\0\1\141"+ + "\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0\14\141"+ + "\1\u15e1\12\141\1\0\4\141\1\132\4\0\12\141\1\0"+ + "\7\141\1\132\10\0\6\141\1\0\10\141\1\u129d\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ff5"+ + "\16\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\141\1\u14a3"+ + "\15\141\1\u14a3\7\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\2\141\1\u10f5\24\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1ff6\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ff7\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\4\141\1\u1ff8\22\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\16\141\1\u1ff9\10\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\141\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\22\141\1\u1ffa\4\141\1\0\4\141\1\132\4\0\12\141"+ + "\1\0\7\141\1\132\10\0\6\141\1\0\11\141\1\0"+ + "\1\u1ffb\1\0\1\132\1\u015c\1\141\1\0\2\141\14\0"+ + "\27\141\1\0\4\141\1\132\4\0\12\141\1\0\7\141"+ + "\1\132\10\0\6\141\1\0\11\141\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\1\u1ffc\26\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\4\141\1\u1ffd\22\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\14\141\1\u1023\12\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\11\141\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\10\141\1\u1ffe\16\141"+ + "\1\0\4\141\1\132\4\0\12\141\1\0\7\141\1\132"+ + "\10\0\6\141\1\0\10\141\1\u1fff\1\0\1\141\1\0"+ + "\1\132\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\10\141\1\u2000\1\0\1\141\1\0\1\132"+ + "\1\u015c\1\141\1\0\2\141\14\0\27\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\22\141\1\u0d65\4\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\27\141\1\0\4\141\1\132\4\0"+ + "\11\141\1\u0b78\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\12\141\1\u2001\14\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\15\141\1\u2002\11\141\1\0\4\141\1\132"+ + "\4\0\12\141\1\0\7\141\1\132\10\0\6\141\1\0"+ + "\11\141\1\0\1\u1dd6\1\0\1\132\1\u015c\1\141\1\0"+ + "\2\141\14\0\21\141\1\u0e88\3\141\1\u041e\1\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\5\141\1\u0ad5\21\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\2\141\1\u2003\24\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\4\141\1\u060f\22\141\1\0"+ + "\4\141\1\132\4\0\12\141\1\0\7\141\1\132\10\0"+ + "\6\141\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c"+ + "\1\141\1\0\2\141\14\0\1\u2004\26\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\16\141\1\u2005\10\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141\1\132\10\0\6\141"+ + "\1\0\11\141\1\0\1\141\1\0\1\132\1\u015c\1\141"+ + "\1\0\2\141\14\0\14\141\1\u2006\12\141\1\0\4\141"+ + "\1\132\4\0\12\141\1\0\7\141"; + + private static int [] zzUnpackTrans() { + int [] result = new int[775418]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_1, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_2, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_3, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_4, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_5, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_6, offset, result); + offset = zzUnpackTrans(ZZ_TRANS_PACKED_7, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\2\1\1\0\2\1\6\0\2\1\1\11\4\1" + - "\1\11\2\1\2\11\2\1\1\11\1\1\3\11\1\1" + - "\1\11\25\1\1\11\1\1\1\11\3\1\5\11\1\1" + - "\1\11\2\1\1\11\16\1\1\11\3\1\1\11\16\1" + - "\1\11\1\1\1\11\2\1\2\11\36\1\1\11\2\1" + - "\1\11\1\1\1\11\2\1\1\11\1\1\1\11\5\1" + - "\1\11\1\0\103\1\1\11\2\0\20\1\1\11\1\1" + - "\1\11\56\1\1\11\66\1\1\11\226\1\2\11\1\1" + - "\1\11\1\1\2\0\1\1\1\11\100\1\2\0\3\1" + - "\1\0\3\1\1\11\u01b8\1\1\11\1\0\44\1\1\0" + - "\1\11\4\1\1\11\u0218\1\1\11\25\1\1\0\u0297\1" + - "\1\0\u02c1\1\1\0\u02cc\1\1\0\u0295\1\1\11\u0c79\1"; + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - private static int[] zzUnpackAttribute() { - int[] result = new int[7572]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\2\1\1\0\2\1\1\0\2\1\14\0\1\1"+ + "\5\0\2\1\1\11\4\1\1\11\5\1\2\11\3\1"+ + "\1\11\1\1\3\11\1\1\1\11\26\1\1\11\1\1"+ + "\1\11\1\1\7\11\1\1\1\11\2\1\2\11\10\1"+ + "\1\11\3\1\1\11\22\1\2\11\1\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\2\1\1\11\6\1"+ + "\1\11\10\1\1\11\4\1\1\11\1\1\1\11\42\1"+ + "\1\11\3\1\1\11\2\1\2\11\3\1\1\11\1\1"+ + "\3\11\1\1\1\11\4\1\1\11\1\1\3\11\4\1"+ + "\4\11\1\1\1\11\6\1\7\11\2\1\1\11\2\1"+ + "\1\11\1\1\1\11\1\1\1\11\5\1\1\11\5\0"+ + "\105\1\1\11\2\0\1\1\1\0\1\11\1\0\76\1"+ + "\1\11\3\1\1\0\1\11\6\0\2\11\33\0\13\1"+ + "\1\11\307\1\2\11\1\1\1\11\1\0\1\11\1\1"+ + "\15\0\1\1\1\11\5\0\1\1\1\0\3\11\3\1"+ + "\2\0\1\11\4\0\101\1\3\0\5\1\1\0\67\1"+ + "\71\0\u0185\1\25\0\2\1\1\11\3\0\45\1\3\0"+ + "\1\11\43\1\2\0\1\11\4\0\1\1\2\0\1\1"+ + "\41\0\1\11\24\0\u01fb\1\17\0\1\11\4\0\2\1"+ + "\1\11\2\0\25\1\1\11\1\0\1\11\25\1\2\11"+ + "\17\0\1\1\23\0\1\1\12\0\u0278\1\16\0\14\1"+ + "\1\0\14\1\34\0\u02b3\1\12\0\4\1\1\0\6\1"+ + "\2\0\1\1\1\0\1\1\14\0\u02d6\1\6\0\1\1"+ + "\1\0\2\1\7\0\u02a1\1\1\11\4\0\1\1\1\11"+ + "\1\1\1\11\2\0\1\11\u0267\1\4\0\u021c\1\3\0"+ + "\1\11\u083e\1"; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + private static int [] zzUnpackAttribute() { + int [] result = new int[8198]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** the input device */ - private java.io.Reader zzReader; + /** the input device */ + private java.io.Reader zzReader; - /** the current state of the DFA */ - private int zzState; + /** the current state of the DFA */ + private int zzState; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; - /** the textposition at the last accepting state */ - private int zzMarkedPos; + /** the textposition at the last accepting state */ + private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /** the current text position in the buffer */ + private int zzCurrentPos; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - /* user code: */ + /* user code: */ - /** - * Token type specific to HTMLTokenMaker; this signals that the user has ended a line with an unclosed HTML tag; - * thus a new line is beginning still inside of the tag. - */ - public static final int INTERNAL_INTAG = -1; + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * double-quote attribute. + */ + private static final int INTERNAL_ATTR_DOUBLE = -1; - /** - * Token type specific to HTMLTokenMaker; this signals that the user has ended a line with an unclosed - * <script> tag. - */ - public static final int INTERNAL_INTAG_SCRIPT = -2; - /** - * Token type specifying we're in a double-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -3; + /** + * Type specific to PHPTokenMaker denoting a line ending with an unclosed + * single-quote attribute. + */ + private static final int INTERNAL_ATTR_SINGLE = -2; - /** - * Token type specifying we're in a single-qouted attribute in a script tag. - */ - public static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -4; - /** - * Token type specifying we're in JavaScript. - */ - public static final int INTERNAL_IN_JS = -5; + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed HTML tag; thus a new line is beginning + * still inside of the tag. + */ + private static final int INTERNAL_INTAG = -3; - /** - * Token type specifying we're in a JavaScript multiline comment. - */ - public static final int INTERNAL_IN_JS_MLC = -6; + /** + * Token type specific to PHPTokenMaker; this signals that the user has + * ended a line with an unclosed <script> tag. + */ + private static final int INTERNAL_INTAG_SCRIPT = -4; - /** - * Token type specifying we're in PHP. - */ - public static final int INTERNAL_IN_PHP = -7; + /** + * Token type specifying we're in a double-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT = -5; - /** - * Token type specifying we're in a PHP multiline comment. - */ - public static final int INTERNAL_IN_PHP_MLC = -8; + /** + * Token type specifying we're in a single-qouted attribute in a + * script tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT = -6; - /** - * Token type specifying we're in a PHP multiline string. - */ - public static final int INTERNAL_PHP_STRING = -9; + /** + * Token type specifying that the user has + * ended a line with an unclosed <style> tag. + */ + private static final int INTERNAL_INTAG_STYLE = -7; - /** - * Token type specifying we're in a PHP multiline char. - */ - public static final int INTERNAL_PHP_CHAR = -10; + /** + * Token type specifying we're in a double-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_DOUBLE_QUOTE_STYLE = -8; - /** - * Whether closing markup tags are automatically completed for PHP. - */ - private static boolean completeCloseTags; + /** + * Token type specifying we're in a single-qouted attribute in a + * style tag. + */ + private static final int INTERNAL_ATTR_SINGLE_QUOTE_STYLE = -9; - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public PHPTokenMaker() { - super(); - } + /** + * Token type specifying we're in JavaScript. + */ + private static final int INTERNAL_IN_JS = -10; - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -11; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -12; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -13; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -14; - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @return Whether closing markup tags are completed. - * @see #setCompleteCloseTags(boolean) - */ - public boolean getCompleteCloseTags() { - return completeCloseTags; - } + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -15; - /** - * {@inheritDoc} - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return false; - } + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -16; - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + /** + * Internal type denoting a line ending in CSS. + */ + private static final int INTERNAL_CSS = -17; - resetTokenList(); - this.offsetShift = -text.offset + startOffset; + /** + * Internal type denoting a line ending in a CSS property. + */ + private static final int INTERNAL_CSS_PROPERTY = -18; - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = COMMENT; - start = text.offset; - break; - case Token.VARIABLE: - state = DTD; - start = text.offset; - break; - case INTERNAL_INTAG: - state = INTAG; - start = text.offset; - break; - case INTERNAL_INTAG_SCRIPT: - state = INTAG_SCRIPT; - start = text.offset; - break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = INATTR_DOUBLE; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = INATTR_SINGLE; - start = text.offset; - break; - case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: - state = INATTR_DOUBLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: - state = INATTR_SINGLE_SCRIPT; - start = text.offset; - break; - case INTERNAL_IN_JS: - state = JAVASCRIPT; - start = text.offset; - break; - case INTERNAL_IN_JS_MLC: - state = JS_MLC; - start = text.offset; - break; - case INTERNAL_IN_PHP: - state = PHP; - start = text.offset; - break; - case INTERNAL_IN_PHP_MLC: - state = PHP_MLC; - start = text.offset; - break; - case INTERNAL_PHP_STRING: - state = PHP_STRING; - start = text.offset; - break; - case INTERNAL_PHP_CHAR: - state = PHP_CHAR; - start = text.offset; - break; - default: - state = Token.NULL; - } + /** + * Internal type denoting a line ending in a CSS property value. + */ + private static final int INTERNAL_CSS_VALUE = -19; - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; - } + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; - /** - * Sets whether markup close tags should be completed. You might not want this to be the case, since some tags in - * standard HTML aren't usually closed. - * - * @param complete - * Whether closing markup tags are completed. - * @see #getCompleteCloseTags() - */ - public static void setCompleteCloseTags(boolean complete) { - completeCloseTags = complete; - } + /** + * Internal type denoting line ending in a CSS double-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_STRING = -(1<<11); - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; - } + /** + * Internal type denoting line ending in a CSS single-quote string. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_CHAR = -(2<<11); - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + /** + * Internal type denoting line ending in a CSS multi-line comment. + * The state to return to is embedded in the actual end token type. + */ + private static final int INTERNAL_CSS_MLC = -(3<<11); - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public PHPTokenMaker(java.io.Reader in) { - this.zzReader = in; - } + /** + * Token type specifying we're in PHP. This particular field is public so + * that we can hack and key off of it for code completion. + */ + public static final int INTERNAL_IN_PHP = -(4<<11); - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public PHPTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + /** + * Token type specifying we're in a PHP multiline comment. + */ + private static final int INTERNAL_IN_PHP_MLC = -(5<<11); - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 204) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + /** + * Token type specifying we're in a PHP multiline string. + */ + private static final int INTERNAL_IN_PHP_STRING = -(6<<11); - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Token type specifying we're in a PHP multiline char. + */ + private static final int INTERNAL_IN_PHP_CHAR = -(7<<11); - if (zzReader != null) - zzReader.close(); - } + /** + * The state previous CSS-related state we were in before going into a CSS + * string, multi-line comment, etc. + */ + private int cssPrevState; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + /** + * Whether closing markup tags are automatically completed for PHP. + */ + private static boolean completeCloseTags; - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * The state PHP was started in (YYINITIAL, INTERNAL_IN_JS, etc.). + */ + private int phpInState; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + /** + * The language index we were in when PHP was started. + */ + private int phpInLangIndex; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + /** + * Language state set on HTML tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + /** + * Language state set on JavaScript tokens. + */ + private static final int LANG_INDEX_JS = 1; + + /** + * Language state set on CSS tokens. + */ + private static final int LANG_INDEX_CSS = 2; + + + /** + * Language state set on PHP. + */ + private static final int LANG_INDEX_PHP = 3; + + private Stack varDepths; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PHPTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds an end token that encodes the information necessary to return + * to the pre-PHP state and language index. + * + * @param endTokenState The PHP-related end-token state. + */ + private void addPhpEndToken(int endTokenState) { + addEndToken(endTokenState - phpInState - (phpInLangIndex<<16)); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + protected OccurrenceMarker createOccurrenceMarker() { + return new HtmlOccurrenceMarker(); + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @return Whether closing markup tags are completed. + * @see #setCompleteCloseTags(boolean) + */ + @Override + public boolean getCompleteCloseTags() { + return completeCloseTags; + } + + + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return languageIndex==LANG_INDEX_CSS || languageIndex==LANG_INDEX_JS || + languageIndex==LANG_INDEX_PHP; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + switch (languageIndex) { + case LANG_INDEX_JS: + case LANG_INDEX_PHP: + return new String[] { "//", null }; + case LANG_INDEX_CSS: + return new String[] { "/*", "*/" }; + default: + return new String[] { "" }; + } + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.FUNCTION || type==Token.VARIABLE || + type==Token.MARKUP_TAG_NAME; + } + + + /** + * Overridden to handle newlines in JS and CSS differently than those in + * markup. + */ + @Override + public boolean getShouldIndentNextLineAfter(Token token) { + int languageIndex = token==null ? 0 : token.getLanguageIndex(); + if (getCurlyBracesDenoteCodeBlocks(languageIndex)) { + if (token!=null && token.length()==1) { + char ch = token.charAt(0); + return ch=='{' || ch=='('; + } + } + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + phpInState = YYINITIAL; // Shouldn't be necessary + cssPrevState = CSS; // Shouldn't be necessary + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.MARKUP_COMMENT: + state = COMMENT; + break; + case Token.VARIABLE: + state = DTD; + break; + case INTERNAL_INTAG: + state = INTAG; + break; + case INTERNAL_INTAG_SCRIPT: + state = INTAG_SCRIPT; + break; + case INTERNAL_INTAG_STYLE: + state = INTAG_STYLE; + break; + case INTERNAL_ATTR_DOUBLE: + state = INATTR_DOUBLE; + break; + case INTERNAL_ATTR_SINGLE: + state = INATTR_SINGLE; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT: + state = INATTR_DOUBLE_SCRIPT; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT: + state = INATTR_SINGLE_SCRIPT; + break; + case INTERNAL_ATTR_DOUBLE_QUOTE_STYLE: + state = INATTR_DOUBLE_STYLE; + break; + case INTERNAL_ATTR_SINGLE_QUOTE_STYLE: + state = INATTR_SINGLE_STYLE; + break; + case INTERNAL_IN_JS: + state = JAVASCRIPT; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + languageIndex = LANG_INDEX_JS; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_CSS: + state = CSS; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_PROPERTY: + state = CSS_PROPERTY; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_CSS_VALUE: + state = CSS_VALUE; + languageIndex = LANG_INDEX_CSS; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + languageIndex = LANG_INDEX_JS; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_PHPxxx - phpInState + int main = -(-initialTokenType & 0x0000ff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_PHP: + state = PHP; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_MLC: + state = PHP_MLC; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_STRING: + state = PHP_STRING; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_IN_PHP_CHAR: + state = PHP_CHAR; + languageIndex = LANG_INDEX_PHP; + phpInState = -initialTokenType&0xff; + phpInLangIndex = (-initialTokenType&0x00ff0000)>>16; + break; + case INTERNAL_CSS_STRING: + state = CSS_STRING; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_CHAR: + state = CSS_CHAR_LITERAL; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + case INTERNAL_CSS_MLC: + state = CSS_C_STYLE_COMMENT; + languageIndex = LANG_INDEX_CSS; + cssPrevState = -initialTokenType&0xff; + break; + } + } + else { + state = YYINITIAL; + } + break; + } - throw new Error(message); + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Sets whether markup close tags should be completed. You might not want + * this to be the case, since some tags in standard HTML aren't usually + * closed. + * + * @param complete Whether closing markup tags are completed. + * @see #getCompleteCloseTags() + */ + public static void setCompleteCloseTags(boolean complete) { + completeCloseTags = complete; + } + + + /** + * Overridden to remember the language index we're leaving. + */ + @Override + protected void yybegin(int state, int languageIndex) { + phpInLangIndex = getLanguageIndex(); + yybegin(state); + setLanguageIndex(languageIndex); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PHPTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PHPTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 206) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - zzMarkedPos -= number; + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; + throw new Error(message); + } - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - while (true) { - zzMarkedPosL = zzMarkedPos; + zzMarkedPos -= number; + } - zzAction = -1; - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - zzState = zzLexicalState; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - zzForAction: { - while (true) { + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; + while (true) { + zzMarkedPosL = zzMarkedPos; - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } + zzAction = -1; - } - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - // store back cached position - zzMarkedPos = zzMarkedPosL; + zzState = zzLexicalState; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 2: { - addToken(Token.IDENTIFIER); - } - case 72: - break; - case 24: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 73: - break; - case 69: { - addToken(Token.LITERAL_BOOLEAN); - } - case 74: - break; - case 53: { - addToken(Token.ERROR_CHAR); - } - case 75: - break; - case 50: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 76: - break; - case 44: { - int count = yylength(); - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 1); // yypushback(count-1); - yybegin(INTAG_CHECK_TAG_NAME); - } - case 77: - break; - case 22: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE_SCRIPT); - } - case 78: - break; - case 13: { - yybegin(YYINITIAL); - addToken(Token.MARKUP_TAG_DELIMITER); - } - case 79: - break; - case 8: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 80: - break; - case 54: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 81: - break; - case 32: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; - } - case 82: - break; - case 34: { - start = zzMarkedPos - 1; - yybegin(PHP_CHAR); - } - case 83: - break; - case 60: { - addToken(Token.FUNCTION); - } - case 84: - break; - case 35: { - start = zzMarkedPos - 1; - yybegin(PHP_STRING); - } - case 85: - break; - case 48: { - addToken(Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 86: - break; - case 45: { - start = zzMarkedPos - 2; - yybegin(DTD); - } - case 87: - break; - case 27: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 88: - break; - case 71: { - yybegin(YYINITIAL); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 7, zzMarkedPos - 2, Token.MARKUP_TAG_NAME); - addToken(zzMarkedPos - 1, zzMarkedPos - 1, Token.MARKUP_TAG_DELIMITER); - } - case 89: - break; - case 58: { - addToken(Token.VARIABLE); - } - case 90: - break; - case 29: { - addToken(Token.ERROR_CHAR); - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 91: - break; - case 17: { /* Shouldn't happen */ - yypushback(1); - yybegin(INTAG); - } - case 92: - break; - case 26: { - addToken(Token.ERROR_IDENTIFIER); - } - case 93: - break; - case 49: { - start = zzMarkedPos - 2; - yybegin(JS_MLC); - } - case 94: - break; - case 57: { - start = zzMarkedPos - 2; - yybegin(PHP_MLC); - } - case 95: - break; - case 20: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 96: - break; - case 4: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(INTAG); - } - case 97: - break; - case 9: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.VARIABLE); - } - case 98: - break; - case 40: { - yybegin(PHP); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 99: - break; - case 56: { - yybegin(JAVASCRIPT); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 100: - break; - case 65: { - addToken(Token.LITERAL_CHAR); - } - case 101: - break; - case 46: { - addToken(Token.SEPARATOR); - yybegin(PHP); - } - case 102: - break; - case 15: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE); - } - case 103: - break; - case 39: { /* Skip escaped chars. */ - } - case 104: - break; - case 52: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 105: - break; - case 16: { /* A non-recognized HTML tag name */ - yypushback(yylength()); - yybegin(INTAG); - } - case 106: - break; - case 23: { - start = zzMarkedPos - 1; - yybegin(INATTR_DOUBLE_SCRIPT); - } - case 107: - break; - case 5: { - addToken(Token.WHITESPACE); - } - case 108: - break; - case 59: { - addToken(Token.SEPARATOR); - yybegin(YYINITIAL); - } - case 109: - break; - case 6: { - addToken(Token.DATA_TYPE); + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 110: - break; - case 18: { - addToken(Token.MARKUP_TAG_NAME); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 111: - break; - case 33: { - addEndToken(INTERNAL_IN_PHP); - return firstToken; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 109: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 137: break; + case 67: + { addToken(Token.OPERATOR); yybegin(CSS_VALUE); + } + case 138: break; + case 92: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 139: break; + case 75: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; + } + case 140: break; + case 23: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_SCRIPT); + } + case 141: break; + case 9: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.MARKUP_DTD); + } + case 142: break; + case 61: + { addToken(Token.SEPARATOR); yybegin(CSS_PROPERTY); + } + case 143: break; + case 4: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(INTAG); + } + case 144: break; + case 129: + { addToken(Token.RESERVED_WORD_2); + } + case 145: break; + case 112: + { addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); yybegin(cssPrevState); + } + case 146: break; + case 110: + { start = zzMarkedPos-2; cssPrevState = zzLexicalState; yybegin(CSS_C_STYLE_COMMENT); + } + case 147: break; + case 37: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + case 148: break; + case 5: + { addToken(Token.WHITESPACE); + } + case 149: break; + case 131: + { addToken(zzStartRead,zzStartRead, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-6,zzMarkedPos-1, Token.MARKUP_TAG_NAME); + start = zzMarkedPos; yybegin(INTAG_SCRIPT); + } + case 150: break; + case 111: + { addToken(Token.REGEX); + } + case 151: break; + case 42: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; + } + case 152: break; + case 135: + { int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_EOL); + yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 153: break; + case 106: + { addToken(Token.FUNCTION); + } + case 154: break; + case 101: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; + } + case 155: break; + case 39: + { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 156: break; + case 58: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_STRING); + } + case 157: break; + case 113: + { addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack<>(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + case 158: break; + case 83: + { if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + case 159: break; + case 78: + { if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 160: break; + case 80: + { /* Skip valid '$' that is not part of template literal expression start */ + } + case 161: break; + case 25: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_STYLE); + } + case 162: break; + case 35: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); + } + case 163: break; + case 96: + { /* Skip all escaped chars. */ + } + case 164: break; + case 89: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(YYINITIAL); + } + case 165: break; + case 28: + { yybegin(INTAG_STYLE); addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); + } + case 166: break; + case 124: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.6")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 167: break; + case 119: + { if(JavaScriptTokenMaker.isJavaScriptCompatible("1.7")){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} + } + case 168: break; + case 46: + { start = zzMarkedPos-1; yybegin(PHP_STRING); + } + case 169: break; + case 68: + { /*System.out.println("css_value: " + yytext());*/ addToken(Token.IDENTIFIER); + } + case 170: break; + case 99: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 171: break; + case 16: + { /* A non-recognized HTML tag name */ yypushback(yylength()); yybegin(INTAG); + } + case 172: break; + case 26: + { addToken(Token.MARKUP_TAG_DELIMITER); yybegin(CSS, LANG_INDEX_CSS); + } + case 173: break; + case 76: + { addToken(start,zzStartRead, Token.LITERAL_CHAR); yybegin(cssPrevState); + } + case 174: break; + case 95: + { int temp=zzStartRead; if (zzStartRead>start) addToken(start,zzStartRead-1, validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR); validJSString = true; addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 175: break; + case 87: + { addToken(Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 176: break; + case 114: + { varDepths.push(Boolean.TRUE); + } + case 177: break; + case 27: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE_STYLE); + } + case 178: break; + case 19: + { /* Allowing "start) addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addToken(temp, zzMarkedPos-1, Token.SEPARATOR); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 206: break; + case 128: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 207: break; + case 103: + { start = zzMarkedPos-2; yybegin(PHP_MLC); + } + case 208: break; + case 54: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 209: break; + case 66: + { addToken(Token.SEPARATOR); yybegin(CSS); + } + case 210: break; + case 118: + { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); + } + case 211: break; + case 134: + { yybegin(YYINITIAL); + int temp = zzStartRead; + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); + addToken(temp,temp+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 212: break; + case 31: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); + } + case 213: break; + case 74: + { addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(cssPrevState); + } + case 214: break; + case 79: + { if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + case 215: break; + case 64: + { addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; + } + case 216: break; + case 45: + { addPhpEndToken(INTERNAL_IN_PHP); return firstToken; + } + case 217: break; + case 38: + { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(JAVASCRIPT); + } + case 218: break; + case 107: + { int count = yylength(); + addToken(zzStartRead,zzStartRead, Token.FUNCTION); + zzMarkedPos -= (count-1); //yypushback(count-1); + } + case 219: break; + case 34: + { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); + } + case 220: break; + case 24: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG_SCRIPT); + } + case 221: break; + case 126: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; + } + case 222: break; + case 91: + { start = zzMarkedPos-2; yybegin(JS_MLC); + } + case 223: break; + case 94: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 224: break; + case 72: + { int temp = zzMarkedPos - 2; + addToken(zzStartRead, temp, Token.FUNCTION); + addToken(zzMarkedPos-1, zzMarkedPos-1, Token.SEPARATOR); + zzStartRead = zzCurrentPos = zzMarkedPos; + } + case 225: break; + case 50: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; + } + case 226: break; + case 136: + { addToken(Token.ANNOTATION); + } + case 227: break; + case 108: + { yybegin(PHP); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 228: break; + case 51: + { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 229: break; + case 29: + { addToken(Token.ERROR_IDENTIFIER); + } + case 230: break; + case 69: + { addEndToken(INTERNAL_CSS_VALUE); return firstToken; + } + case 231: break; + case 121: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; + } + case 232: break; + case 6: + { addToken(Token.MARKUP_ENTITY_REFERENCE); + } + case 233: break; + case 123: + { addToken(Token.LITERAL_BOOLEAN); + } + case 234: break; + case 17: + { /* Shouldn't happen */ yypushback(1); yybegin(INTAG); + } + case 235: break; + case 3: + { addNullToken(); return firstToken; + } + case 236: break; + case 57: + { addEndToken(INTERNAL_CSS); return firstToken; + } + case 237: break; + case 133: + { yybegin(YYINITIAL, LANG_INDEX_DEFAULT); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + addToken(zzMarkedPos-7,zzMarkedPos-2, Token.MARKUP_TAG_NAME); + addToken(zzMarkedPos-1,zzMarkedPos-1, Token.MARKUP_TAG_DELIMITER); + } + case 238: break; + case 62: + { start = zzMarkedPos-1; cssPrevState = zzLexicalState; yybegin(CSS_CHAR_LITERAL); + } + case 239: break; + case 86: + { addToken(Token.MARKUP_TAG_DELIMITER); phpInState = zzLexicalState; yybegin(PHP, LANG_INDEX_PHP); + } + case 240: break; + case 65: + { addToken(Token.RESERVED_WORD); + } + case 241: break; + case 11: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE); + } + case 242: break; + case 47: + { addToken(Token.COMMENT_EOL); addPhpEndToken(INTERNAL_IN_PHP); return firstToken; + } + case 243: break; + case 13: + { yybegin(YYINITIAL); addToken(Token.MARKUP_TAG_DELIMITER); + } + case 244: break; + case 59: + { addToken(Token.DATA_TYPE); + } + case 245: break; + case 53: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; + } + case 246: break; + case 55: + { yybegin(PHP); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 247: break; + case 33: + { addToken(Token.SEPARATOR); + } + case 248: break; + case 115: + { int count = yylength(); + addToken(zzStartRead,zzStartRead+1, Token.MARKUP_TAG_DELIMITER); + zzMarkedPos -= (count-2); //yypushback(count-2); + yybegin(INTAG_CHECK_TAG_NAME); + } + case 249: break; + case 73: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; + } + case 250: break; + case 71: + { /* End of a function */ addToken(Token.SEPARATOR); + } + case 251: break; + case 18: + { addToken(Token.MARKUP_TAG_NAME); + } + case 252: break; + case 10: + { addToken(Token.MARKUP_TAG_ATTRIBUTE); + } + case 253: break; + case 127: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; + } + case 254: break; + case 48: + { start = zzMarkedPos-1; yybegin(PHP_CHAR); + } + case 255: break; + case 105: + { yybegin(phpInState, phpInLangIndex); addToken(Token.MARKUP_TAG_DELIMITER); start = zzMarkedPos; + } + case 256: break; + case 90: + { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); + } + case 257: break; + case 41: + { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + case 258: break; + case 93: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 259: break; + case 15: + { start = zzMarkedPos-1; yybegin(INATTR_SINGLE); + } + case 260: break; + case 117: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 261: break; + case 77: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; + } + case 262: break; + case 12: + { addToken(Token.MARKUP_TAG_DELIMITER); + } + case 263: break; + case 32: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 264: break; + case 85: + { start = zzMarkedPos-2; yybegin(DTD); + } + case 265: break; + case 20: + { addToken(start,zzStartRead, Token.MARKUP_TAG_ATTRIBUTE_VALUE); yybegin(INTAG); + } + case 266: break; + case 49: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; + } + case 267: break; + case 21: + { start = zzMarkedPos-1; yybegin(INATTR_DOUBLE_SCRIPT); + } + case 268: break; + case 44: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; + } + case 269: break; + case 82: + { // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } + case 270: break; + case 60: + { /* Unknown pseudo class */ addToken(Token.DATA_TYPE); + } + case 271: break; + case 1: + { + } + case 272: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case PHP: { + addPhpEndToken(INTERNAL_IN_PHP); return firstToken; } - case 112: - break; - case 28: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + case 8199: break; + case INATTR_SINGLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); return firstToken; } - case 113: - break; - case 14: { - start = zzMarkedPos - 1; - yybegin(INATTR_SINGLE); + case 8200: break; + case JS_CHAR: { + addToken(start,zzStartRead-1, Token.ERROR_CHAR); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 114: - break; - case 10: { - addToken(Token.MARKUP_TAG_ATTRIBUTE); + case 8201: break; + case CSS_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_CSS_STRING - cssPrevState); return firstToken; } - case 115: - break; - case 38: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_PHP_STRING); - return firstToken; + case 8202: break; + case JS_DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } - case 116: - break; - case 19: { - yybegin(INTAG); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + case 8203: break; + case JS_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } - case 117: - break; - case 62: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; + case 8204: break; + case CSS_CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addEndToken(INTERNAL_CSS_CHAR - cssPrevState); return firstToken; } - case 118: - break; - case 25: { - yybegin(INTAG_SCRIPT); - addToken(start, zzStartRead, Token.LITERAL_CHAR); + case 8205: break; + case INTAG_SCRIPT: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_SCRIPT); return firstToken; } - case 119: - break; - case 36: { - addToken(Token.COMMENT_EOL); - addEndToken(INTERNAL_IN_PHP); - return firstToken; + case 8206: break; + case JS_TEMPLATE_LITERAL_EXPR: { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; } - case 120: - break; - case 42: { /* Skip escaped single quotes only, but this should still work. */ + case 8207: break; + case CSS_PROPERTY: { + addEndToken(INTERNAL_CSS_PROPERTY); return firstToken; } - case 121: - break; - case 66: { - start = zzMarkedPos - 4; - yybegin(COMMENT); + case 8208: break; + case CSS_C_STYLE_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_CSS_MLC - cssPrevState); return firstToken; } - case 122: - break; - case 37: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_PHP_MLC); - return firstToken; + case 8209: break; + case PHP_MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addPhpEndToken(INTERNAL_IN_PHP_MLC); return firstToken; } - case 123: - break; - case 55: { - addToken(Token.RESERVED_WORD); + case 8210: break; + case CSS: { + addEndToken(INTERNAL_CSS); return firstToken; } - case 124: - break; - case 41: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - addEndToken(INTERNAL_PHP_CHAR); - return firstToken; + case 8211: break; + case CSS_VALUE: { + addEndToken(INTERNAL_CSS_VALUE); return firstToken; } - case 125: - break; - case 70: { - addToken(zzStartRead, zzStartRead, Token.MARKUP_TAG_DELIMITER); - addToken(zzMarkedPos - 6, zzMarkedPos - 1, Token.MARKUP_TAG_NAME); - start = zzMarkedPos; - yybegin(INTAG_SCRIPT); + case 8212: break; + case COMMENT: { + addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); return firstToken; } - case 126: - break; - case 64: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 2, Token.COMMENT_MULTILINE); + case 8213: break; + case INATTR_DOUBLE_SCRIPT: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); return firstToken; } - case 127: - break; - case 63: { - int count = yylength(); - addToken(zzStartRead, zzStartRead + 1, Token.MARKUP_TAG_DELIMITER); - zzMarkedPos -= (count - 2); // yypushback(count-2); - yybegin(INTAG_CHECK_TAG_NAME); + case 8214: break; + case PHP_STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addPhpEndToken(INTERNAL_IN_PHP_STRING); return firstToken; } - case 128: - break; - case 61: { - yybegin(PHP); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); + case 8215: break; + case JAVASCRIPT: { + addEndToken(INTERNAL_IN_JS); return firstToken; } - case 129: - break; - case 31: { - addToken(Token.SEPARATOR); + case 8216: break; + case INTAG: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 130: - break; - case 30: { - addToken(Token.ERROR_STRING_DOUBLE); - addEndToken(INTERNAL_IN_JS); - return firstToken; + case 8217: break; + case INTAG_CHECK_TAG_NAME: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG); return firstToken; } - case 131: - break; - case 3: { - addNullToken(); - return firstToken; + case 8218: break; + case INATTR_SINGLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_STYLE); return firstToken; } - case 132: - break; - case 21: { - yybegin(JAVASCRIPT); - addToken(Token.MARKUP_TAG_DELIMITER); + case 8219: break; + case DTD: { + addToken(start,zzStartRead-1, Token.MARKUP_DTD); return firstToken; } - case 133: - break; - case 47: { - addToken(Token.MARKUP_TAG_DELIMITER); - yybegin(YYINITIAL); + case 8220: break; + case PHP_CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); addPhpEndToken(INTERNAL_IN_PHP_CHAR); return firstToken; } - case 134: - break; - case 7: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 8221: break; + case JS_EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 135: - break; - case 11: { - addToken(Token.OPERATOR); + case 8222: break; + case INATTR_DOUBLE_STYLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_STYLE); return firstToken; } - case 136: - break; - case 51: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 8223: break; + case INATTR_SINGLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_SINGLE); return firstToken; } - case 137: - break; - case 43: { - yybegin(PHP); - addToken(start, zzStartRead, Token.LITERAL_CHAR); + case 8224: break; + case JS_TEMPLATE_LITERAL: { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; } - case 138: - break; - case 12: { - addToken(Token.MARKUP_TAG_DELIMITER); + case 8225: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 139: - break; - case 67: { - addToken(Token.COMMENT_MULTILINE); + case 8226: break; + case INATTR_DOUBLE: { + addToken(start,zzStartRead-1, Token.MARKUP_TAG_ATTRIBUTE_VALUE); addEndToken(INTERNAL_ATTR_DOUBLE); return firstToken; } - case 140: - break; - case 68: { - addToken(Token.ERROR_STRING_DOUBLE); + case 8227: break; + case JS_STRING: { + addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addEndToken(INTERNAL_IN_JS); return firstToken; } - case 141: - break; - case 1: { + case 8228: break; + case INTAG_STYLE: { + addToken(zzMarkedPos,zzMarkedPos, INTERNAL_INTAG_STYLE); return firstToken; } - case 142: - break; + case 8229: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case INTAG_CHECK_TAG_NAME: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 7573: - break; - case JS_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_JS_MLC); - return firstToken; - } - case 7574: - break; - case INTAG_SCRIPT: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG_SCRIPT); - return firstToken; - } - case 7575: - break; - case PHP_MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addEndToken(INTERNAL_IN_PHP_MLC); - return firstToken; - } - case 7576: - break; - case INATTR_DOUBLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_DOUBLE_QUOTE_SCRIPT); - return firstToken; - } - case 7577: - break; - case INATTR_SINGLE_SCRIPT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_ATTR_SINGLE_QUOTE_SCRIPT); - return firstToken; - } - case 7578: - break; - case PHP_STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_PHP_STRING); - return firstToken; - } - case 7579: - break; - case DTD: { - addToken(start, zzStartRead - 1, Token.VARIABLE); - return firstToken; - } - case 7580: - break; - case INATTR_SINGLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 7581: - break; - case INATTR_DOUBLE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 7582: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 7583: - break; - case PHP_CHAR: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - addEndToken(INTERNAL_PHP_CHAR); - return firstToken; - } - case 7584: - break; - case PHP: { - addEndToken(INTERNAL_IN_PHP); - return firstToken; - } - case 7585: - break; - case INTAG: { - addToken(zzMarkedPos, zzMarkedPos, INTERNAL_INTAG); - return firstToken; - } - case 7586: - break; - case COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 7587: - break; - case JAVASCRIPT: { - addEndToken(INTERNAL_IN_JS); - return firstToken; - } - case 7588: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex old mode 100644 new mode 100755 index 625cedeaa..c4524d1fd --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.flex @@ -2,23 +2,9 @@ * 01/26/2008 * * PerlTokenMaker.java - Scanner for Perl - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                          - *
                        • The generated PerlTokenMaker.java file will contain two + *
                        • The generated PerlTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -157,6 +143,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -164,27 +151,19 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } /** - * Returns whether tokens of the specified type should have "mark - * occurrences" enabled for the current programming language. - * - * @param type The token type. - * @return Whether tokens of this type should have "mark occurrences" - * enabled. + * {@inheritDoc} */ public boolean getMarkOccurrencesOfTokenType(int type) { - return type==Token.IDENTIFIER || type==Token.VARIABLE; + return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; } @@ -251,20 +230,47 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + /** * Refills the input buffer. * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -279,7 +285,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -331,18 +337,20 @@ ErrorNumberFormat = (({IntegerLiteral}|{HexLiteral}|{FloatLiteral}){NonSeparat Separator = ([\(\)\{\}\[\]]) Separator2 = ([\;:,.]) -VariableStart = ([\$\@\%)]) +VariableStart = ([\$\@\%)]"$"?) BracedVariable = ({VariableStart}\{{Identifier}\}) UnbracedVariable = ({VariableStart}{Identifier}) BracedShellVariable = ([\$]\{[\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)\}]) UnbracedShellVariable = ([\$][\&\`\'\+\*\.\/\|\,\\\"\;\#\%\=\-\~\^\:\?\!\@\$\<\>\)\(\[\]\)]) MatchVariable = ([\$]{Digit}) Variable = ({BracedVariable}|{UnbracedVariable}|{BracedShellVariable}|{UnbracedShellVariable}|{MatchVariable}) +Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[msixpogcadlu]*) NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|">>"|"!"|"&"|"=="|":"|">>"|"~"|"|"|"&&"|">>>"|"->") AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +BindingOperator = ("=~"|"!~") FunnyOperator = (([\*][\'\"])|([\&][\'\"])) -Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{FunnyOperator}) +Operator = ({NonAssignmentOperator}|{AssignmentOperator}|{BindingOperator}|{FunnyOperator}) PodCommandsExceptCut = ("="("pod"|"head1"|"head2"|"head3"|"head4"|"over"|"item"|"back"|"begin"|"end"|"for"|"encoding")) @@ -609,23 +617,48 @@ ErrorIdentifier = ({NonSeparator}+) {LineCommentBegin}"!".* { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } {LineCommentBegin}.* { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; } - /* Regexes (/.../, s!...!!, etc.). This is nowhere near exhaustive, */ - /* but is rather just the common ones. */ - /* NOTE: We currently don't match plain /.../. How can we */ - /* distinguish between that and two divisions? It seems this is one */ - /* of those times when the Perl interpreter's "Do what I mean" kicks */ - /* in to decide what the programmer really meant. */ - m"/"[^/]*"/"[msixpogc]* { addToken(Token.FUNCTION); } - m"!"[^!]*"!"[msixpogc]* { addToken(Token.FUNCTION); } - m"|"[^\|]*"|"[msixpogc]* { addToken(Token.FUNCTION); } - m\\[^\\]*\\[cgimosx]* { addToken(Token.FUNCTION); } - s"/"[^/]*"/"[^/]*"/"[msixpogce]* { addToken(Token.FUNCTION); } - s"!"[^!]*"!"[^!]*"!"[msixpogce]* { addToken(Token.FUNCTION); } - s"|"[^\|]*"|"[^\|]*"|"[msixpogce]* { addToken(Token.FUNCTION); } - (tr|y)"/"[^/]*"/"[^/]*"/"[cds]* { addToken(Token.FUNCTION); } - (tr|y)"!"[^!]*"!"[^!]*"!"[cds]* { addToken(Token.FUNCTION); } - (tr|y)"|"[^\|]*"|"[^\|]*"|"[cds]* { addToken(Token.FUNCTION); } - (tr|y)\\[^\\]*\\[^\\]*\\[cds]* { addToken(Token.FUNCTION); } + /* Easily identifiable regexes of the form "/.../". This is not foolproof. */ + {Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* More regexes (m/.../, s!...!!, etc.). This is nowhere near */ + /* exhaustive, but is rather just the common ones. */ + m"/"[^/]*"/"[msixpodualgc]* { addToken(Token.REGEX); } + m"!"[^!]*"!"[msixpodualgc]* { addToken(Token.REGEX); } + m"|"[^\|]*"|"[msixpodualgc]* { addToken(Token.REGEX); } + m\\[^\\]*\\[msixpodualgc]* { addToken(Token.REGEX); } + s"/"[^/]*"/"[^/]*"/"[msixpodualgcer]* { addToken(Token.REGEX); } + s"!"[^!]*"!"[^!]*"!"[msixpodualgcer]* { addToken(Token.REGEX); } + s"|"[^\|]*"|"[^\|]*"|"[msixpodualgcer]* { addToken(Token.REGEX); } + (tr|y)"/"[^/]*"/"[^/]*"/"[cdsr]* { addToken(Token.REGEX); } + (tr|y)"!"[^!]*"!"[^!]*"!"[cdsr]* { addToken(Token.REGEX); } + (tr|y)"|"[^\|]*"|"[^\|]*"|"[cdsr]* { addToken(Token.REGEX); } + (tr|y)\\[^\\]*\\[^\\]*\\[cdsr]* { addToken(Token.REGEX); } + qr"/"[^/]*"/"[msixpodual]* { addToken(Token.REGEX); } + qr"!"[^/]*"!"[msixpodual]* { addToken(Token.REGEX); } + qr"|"[^/]*"|"[msixpodual]* { addToken(Token.REGEX); } + qr\\[^/]*\\[msixpodual]* { addToken(Token.REGEX); } /* "Here-document" syntax. This is only implemented for the common */ /* cases. */ @@ -769,7 +802,7 @@ ErrorIdentifier = ({NonSeparator}+) "=cut" { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } } {PodCommandsExceptCut} { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } } = {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java old mode 100644 new mode 100755 index 27cb88389..c378e08c5 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PerlTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 7/21/10 11:35 PM */ +/* The following code was generated by JFlex 1.4.1 on 3/11/12 12:58 AM */ /* * 01/26/2008 * * PerlTokenMaker.java - Scanner for Perl - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1994 +15,2093 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for Perl. - *

                          - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                          - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                          - * + * Scanner for Perl.

                          + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                          + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                          + * * If you wish to regenerate this file yourself, keep in mind the following: *

                            - *
                          • The generated PerlTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                          • - *
                          • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                          • - *
                          • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                          • + *
                          • The generated PerlTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                          • + *
                          • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                          • + *
                          • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                          • *
                          - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class PerlTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int HEREDOC_EOF_SINGLE_QUOTED = 5; - public static final int HEREDOC_EOT_SINGLE_QUOTED = 7; - public static final int HEREDOC_EOT_UNQUOTED = 6; - public static final int STRING = 1; - public static final int BACKTICKS = 3; - public static final int YYINITIAL = 0; - public static final int HEREDOC_EOF_UNQUOTED = 4; - public static final int CHAR_LITERAL = 2; - public static final int POD = 8; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\12\1\11\1\0\1\12\1\6\22\0\1\12\1\41\1\101" + - "\1\7\1\30\1\24\1\43\1\45\1\21\1\25\1\36\1\32\1\22" + - "\1\17\1\20\1\40\1\3\1\54\1\55\1\54\1\54\3\5\2\2" + - "\1\22\1\22\1\33\1\34\1\37\1\42\1\23\3\4\1\15\1\16" + - "\1\103\5\1\1\14\2\1\1\102\4\1\1\104\3\1\1\13\2\1" + - "\1\21\1\10\1\21\1\35\1\1\1\31\1\53\1\63\1\64\1\50" + - "\1\52\1\70\1\66\1\51\1\60\1\100\1\65\1\72\1\62\1\67" + - "\1\47\1\46\1\74\1\57\1\73\1\61\1\71\1\56\1\76\1\75" + - "\1\77\1\1\1\26\1\44\1\27\1\42\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\11\0\1\1\1\2\2\3\1\1\1\4\1\5\1\6" + - "\1\7\1\2\1\10\1\2\1\1\1\7\1\10\1\1" + - "\1\11\10\7\1\12\31\2\1\13\1\14\1\15\1\16" + - "\2\14\1\17\1\14\1\20\1\21\1\22\1\14\1\23" + - "\2\14\1\24\1\14\1\25\4\14\1\26\1\14\1\27" + - "\1\14\1\30\2\14\1\31\1\14\1\32\1\3\1\33" + - "\1\32\1\33\1\32\1\34\1\32\1\4\1\35\1\36" + - "\1\0\3\36\11\0\1\7\6\2\1\37\2\2\1\37" + - "\34\2\1\1\3\0\2\2\1\40\13\2\1\37\3\2" + - "\1\40\1\37\6\2\1\40\2\2\1\37\3\2\3\0" + - "\21\2\1\1\3\0\1\2\1\15\1\41\1\0\1\41" + - "\1\0\1\20\1\42\1\0\1\42\1\0\1\14\1\43" + - "\1\0\1\43\1\0\3\14\10\0\1\33\1\0\2\34" + - "\16\0\40\2\1\40\1\2\1\0\2\40\5\2\1\40" + - "\10\2\1\37\17\2\3\0\14\2\1\37\7\2\1\0" + - "\1\1\5\0\1\44\1\0\1\44\15\0\1\45\5\0" + - "\1\40\2\2\1\40\15\2\1\40\5\2\2\40\27\2" + - "\1\40\22\2\1\40\1\2\1\0\2\40\1\46\5\0" + - "\1\47\1\50\1\51\6\0\2\2\1\40\36\2\1\40" + - "\11\2\12\0\17\2\1\40\4\2\1\0\1\52\1\53" + - "\1\0\14\2\2\0\5\2\1\0\12\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[573]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int HEREDOC_EOF_SINGLE_QUOTED = 5; + public static final int HEREDOC_EOT_SINGLE_QUOTED = 7; + public static final int HEREDOC_EOT_UNQUOTED = 6; + public static final int STRING = 1; + public static final int BACKTICKS = 3; + public static final int YYINITIAL = 0; + public static final int HEREDOC_EOF_UNQUOTED = 4; + public static final int CHAR_LITERAL = 2; + public static final int POD = 8; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\12\1\11\1\0\1\12\1\6\22\0\1\12\1\46\1\102"+ + "\1\7\1\26\1\24\1\50\1\53\1\21\1\25\1\33\1\41\1\22"+ + "\1\17\1\20\1\32\1\3\1\61\1\62\1\61\1\61\3\5\2\2"+ + "\1\22\1\22\1\42\1\43\1\45\1\47\1\23\3\4\1\15\1\16"+ + "\1\104\5\1\1\14\2\1\1\103\4\1\1\105\3\1\1\13\2\1"+ + "\1\21\1\10\1\21\1\44\1\1\1\31\1\60\1\70\1\35\1\40"+ + "\1\57\1\74\1\72\1\56\1\65\1\101\1\71\1\37\1\67\1\73"+ + "\1\55\1\54\1\76\1\64\1\34\1\66\1\75\1\63\1\77\1\36"+ + "\1\100\1\1\1\27\1\52\1\30\1\51\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\11\0\1\1\1\2\2\3\1\1\1\4\1\5\1\6"+ + "\1\7\1\2\1\10\1\2\1\1\1\7\1\10\1\1"+ + "\1\11\2\7\5\2\10\7\1\12\24\2\1\13\1\14"+ + "\1\15\1\16\3\14\1\17\1\14\1\20\1\21\1\22"+ + "\1\14\1\23\3\14\1\24\1\14\1\25\5\14\1\26"+ + "\1\14\1\27\1\14\1\30\2\14\1\31\1\14\1\32"+ + "\1\3\1\33\1\32\1\33\1\32\1\34\1\32\1\4"+ + "\1\35\1\36\1\1\1\0\1\36\1\0\3\36\3\0"+ + "\1\7\1\0\2\2\2\0\22\2\1\37\1\2\1\40"+ + "\2\2\1\40\4\2\10\0\1\7\7\2\1\40\31\2"+ + "\1\1\1\0\1\2\2\0\1\2\1\37\6\2\1\40"+ + "\2\2\1\37\1\40\14\2\1\1\3\0\1\2\1\15"+ + "\1\41\1\14\1\0\2\41\1\0\1\20\1\42\1\14"+ + "\1\0\2\42\1\0\1\14\1\43\1\14\1\0\2\43"+ + "\1\0\3\14\10\0\1\33\1\0\2\34\1\0\1\44"+ + "\1\0\1\2\2\0\14\2\1\40\6\2\1\37\15\2"+ + "\15\0\33\2\1\37\1\2\1\0\2\45\7\2\1\40"+ + "\10\2\1\1\3\0\5\2\1\0\1\1\5\0\1\46"+ + "\1\0\1\46\11\0\1\45\10\2\1\37\26\2\4\0"+ + "\1\47\5\0\1\37\11\2\1\37\5\2\1\37\17\2"+ + "\1\0\4\45\2\2\1\37\1\2\1\0\2\45\1\50"+ + "\1\51\5\0\16\2\1\37\2\2\1\52\1\53\6\0"+ + "\2\2\1\37\25\2\1\45\2\2\3\0\1\37\7\2"+ + "\7\0\14\2\1\0\4\2\1\54\1\55\1\0\10\2"+ + "\1\0\1\2\1\0\4\2\1\0\12\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[601]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+ + "\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4\0\u038e"+ + "\0\u041a\0\u0460\0\u04a6\0\u038e\0\u038e\0\u04ec\0\u0532\0\u0578"+ + "\0\u05be\0\u038e\0\u0604\0\u064a\0\u0690\0\u06d6\0\u071c\0\u0762"+ + "\0\u07a8\0\u07ee\0\u0834\0\u087a\0\u08c0\0\u0906\0\u094c\0\u038e"+ + "\0\u0992\0\u038e\0\u09d8\0\u0a1e\0\u0a64\0\u0aaa\0\u0af0\0\u0b36"+ + "\0\u0b7c\0\u0bc2\0\u0c08\0\u0c4e\0\u0c94\0\u0cda\0\u0d20\0\u0d66"+ + "\0\u0dac\0\u0df2\0\u0e38\0\u0e7e\0\u0ec4\0\u0f0a\0\u038e\0\u0f50"+ + "\0\u0f96\0\u038e\0\u0fdc\0\u1022\0\u1068\0\u038e\0\u10ae\0\u10f4"+ + "\0\u038e\0\u038e\0\u113a\0\u038e\0\u1180\0\u11c6\0\u120c\0\u038e"+ + "\0\u1252\0\u038e\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0\0\u038e"+ + "\0\u13f6\0\u038e\0\u143c\0\u038e\0\u1482\0\u14c8\0\u038e\0\u150e"+ + "\0\u1554\0\u1554\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c\0\u16b2"+ + "\0\u16f8\0\u173e\0\u1784\0\u17ca\0\u1810\0\u1856\0\u189c\0\u0276"+ + "\0\u038e\0\u17ca\0\u18e2\0\u1928\0\u196e\0\u1928\0\u19b4\0\u19fa"+ + "\0\u1a40\0\u1a86\0\u1acc\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a"+ + "\0\u1c70\0\u1cb6\0\u1cfc\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\u1e5a"+ + "\0\u1ea0\0\u1ee6\0\u1f2c\0\u1f72\0\u1fb8\0\u1ffe\0\u2044\0\u208a"+ + "\0\u20d0\0\u2116\0\u02bc\0\u215c\0\u21a2\0\u21e8\0\u222e\0\u2274"+ + "\0\u22ba\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4"+ + "\0\u24ea\0\u2530\0\u2576\0\u25bc\0\u2602\0\u2648\0\u268e\0\u26d4"+ + "\0\u271a\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u2878\0\u28be\0\u2904"+ + "\0\u294a\0\u2990\0\u29d6\0\u2a1c\0\u2a62\0\u2aa8\0\u2aee\0\u2b34"+ + "\0\u2b7a\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92\0\u2cd8\0\u2d1e\0\u2d64"+ + "\0\u2daa\0\u2df0\0\u2e36\0\u2e7c\0\u2ec2\0\u2f08\0\u2f4e\0\u02bc"+ + "\0\u2f94\0\u2fda\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u317e"+ + "\0\u31c4\0\u320a\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368\0\u33ae"+ + "\0\u33f4\0\u343a\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de"+ + "\0\u3624\0\u366a\0\u36b0\0\u36f6\0\u038e\0\u373c\0\u3782\0\u37c8"+ + "\0\u038e\0\u3782\0\u380e\0\u038e\0\u3854\0\u389a\0\u38e0\0\u038e"+ + "\0\u389a\0\u3926\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u038e\0\u39f8"+ + "\0\u3a84\0\u3aca\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e"+ + "\0\u3cb4\0\u3cfa\0\u3d40\0\u3d86\0\u3dcc\0\u3e12\0\u1554\0\u3e58"+ + "\0\u3e9e\0\u3ee4\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088"+ + "\0\u40ce\0\u4114\0\u415a\0\u41a0\0\u41e6\0\u422c\0\u4272\0\u42b8"+ + "\0\u26d4\0\u42fe\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c\0\u44a2"+ + "\0\u44e8\0\u452e\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c\0\u46d2"+ + "\0\u4718\0\u320a\0\u475e\0\u47a4\0\u47ea\0\u4830\0\u4876\0\u48bc"+ + "\0\u4902\0\u4948\0\u498e\0\u49d4\0\u4a1a\0\u4a60\0\u4aa6\0\u4aec"+ + "\0\u4b32\0\u4b78\0\u4bbe\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6\0\u4d1c"+ + "\0\u4d62\0\u4da8\0\u4dee\0\u4e34\0\u4e7a\0\u4ec0\0\u4f06\0\u4f4c"+ + "\0\u4f92\0\u4fd8\0\u501e\0\u5064\0\u50aa\0\u50f0\0\u5136\0\u517c"+ + "\0\u51c2\0\u5208\0\u524e\0\u5294\0\u52da\0\u5320\0\u5366\0\u26d4"+ + "\0\u53ac\0\u53f2\0\u5438\0\u547e\0\u54c4\0\u550a\0\u5550\0\u5596"+ + "\0\u55dc\0\u5622\0\u5668\0\u56ae\0\u56f4\0\u573a\0\u5780\0\u57c6"+ + "\0\u580c\0\u5852\0\u5898\0\u58de\0\u5924\0\u596a\0\u59b0\0\u59f6"+ + "\0\u5a3c\0\u5a82\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0\0\u5c26"+ + "\0\u5c6c\0\u5cb2\0\u5cf8\0\u5d3e\0\u1252\0\u5d84\0\u13b0\0\u5dca"+ + "\0\u5e10\0\u5e56\0\u5e9c\0\u5ee2\0\u5f28\0\u5f6e\0\u5fb4\0\u5ffa"+ + "\0\u6040\0\u6086\0\u60cc\0\u6112\0\u6158\0\u619e\0\u61e4\0\u622a"+ + "\0\u6270\0\u2c4c\0\u62b6\0\u62fc\0\u6342\0\u6388\0\u63ce\0\u6414"+ + "\0\u645a\0\u64a0\0\u64e6\0\u652c\0\u6572\0\u65b8\0\u65fe\0\u6644"+ + "\0\u668a\0\u66d0\0\u6716\0\u675c\0\u67a2\0\u67e8\0\u682e\0\u6874"+ + "\0\u68ba\0\u6900\0\u6946\0\u698c\0\u038e\0\u69d2\0\u6a18\0\u6a5e"+ + "\0\u6aa4\0\u6aea\0\u6b30\0\u6b76\0\u6bbc\0\u6c02\0\u6c48\0\u6c8e"+ + "\0\u6cd4\0\u6d1a\0\u6d60\0\u6da6\0\u6dec\0\u6e32\0\u6e78\0\u6ebe"+ + "\0\u6f04\0\u6f4a\0\u2a62\0\u6f90\0\u6fd6\0\u701c\0\u7062\0\u70a8"+ + "\0\u70ee\0\u7134\0\u717a\0\u71c0\0\u7206\0\u724c\0\u7292\0\u72d8"+ + "\0\u731e\0\u7364\0\u73aa\0\u73f0\0\u7436\0\u747c\0\u74c2\0\u7508"+ + "\0\u754e\0\u7594\0\u75da\0\u7620\0\u7666\0\u76ac\0\u038e\0\u038e"+ + "\0\u76f2\0\u7738\0\u777e\0\u77c4\0\u780a\0\u7850\0\u7896\0\u78dc"+ + "\0\u7922\0\u7968\0\u79ae\0\u79f4\0\u7a3a\0\u7a80\0\u7ac6\0\u7b0c"+ + "\0\u7b52\0\u7b98\0\u7bde\0\u31c4\0\u7c24\0\u7c6a\0\u038e\0\u038e"+ + "\0\u7cb0\0\u7cf6\0\u7d3c\0\u7d82\0\u7dc8\0\u7e0e\0\u7e54\0\u7e9a"+ + "\0\u2878\0\u7ee0\0\u7f26\0\u7f6c\0\u7fb2\0\u7ff8\0\u803e\0\u8084"+ + "\0\u80ca\0\u8110\0\u8156\0\u819c\0\u81e2\0\u8228\0\u826e\0\u82b4"+ + "\0\u82fa\0\u8340\0\u8386\0\u83cc\0\u8412\0\u8458\0\u849e\0\u84e4"+ + "\0\u852a\0\u8570\0\u85b6\0\u85fc\0\u8642\0\u8688\0\u86ce\0\u8714"+ + "\0\u875a\0\u87a0\0\u87e6\0\u882c\0\u8872\0\u88b8\0\u88fe\0\u8944"+ + "\0\u898a\0\u89d0\0\u8a16\0\u8a5c\0\u8aa2\0\u8ae8\0\u8b2e\0\u8b74"+ + "\0\u8bba\0\u8c00\0\u8c46\0\u8c8c\0\u8cd2\0\u8d18\0\u8d5e\0\u8da4"+ + "\0\u8dea\0\u8e30\0\u8e76\0\u8ebc\0\u038e\0\u038e\0\u8f02\0\u8f48"+ + "\0\u8f8e\0\u8fd4\0\u901a\0\u9060\0\u90a6\0\u90ec\0\u9132\0\u9178"+ + "\0\u91be\0\u9204\0\u924a\0\u9290\0\u92d6\0\u931c\0\u9362\0\u93a8"+ + "\0\u93ee\0\u9434\0\u947a\0\u94c0\0\u9506\0\u954c\0\u9592\0\u95d8"+ + "\0\u961e"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[601]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\105\0\212\0\317\0\u0114\0\u0159\0\u019e\0\u01e3" + - "\0\u0228\0\u026d\0\u02b2\0\u02f7\0\u033c\0\u0381\0\u03c6\0\u0381" + - "\0\u040b\0\u0450\0\u0495\0\u0381\0\u0381\0\u04da\0\u051f\0\u0564" + - "\0\u05a9\0\u0381\0\u05ee\0\u0633\0\u0678\0\u06bd\0\u0702\0\u0747" + - "\0\u0381\0\u078c\0\u0381\0\u07d1\0\u0816\0\u085b\0\u08a0\0\u08e5" + - "\0\u092a\0\u096f\0\u09b4\0\u09f9\0\u0a3e\0\u0a83\0\u0ac8\0\u0b0d" + - "\0\u0b52\0\u0b97\0\u0bdc\0\u0c21\0\u0c66\0\u0cab\0\u0cf0\0\u0d35" + - "\0\u0d7a\0\u0dbf\0\u0e04\0\u0e49\0\u0381\0\u0e8e\0\u0ed3\0\u0381" + - "\0\u0f18\0\u0f5d\0\u0381\0\u0fa2\0\u0fe7\0\u0381\0\u0381\0\u102c" + - "\0\u0381\0\u1071\0\u10b6\0\u0381\0\u10fb\0\u0381\0\u1140\0\u1185" + - "\0\u11ca\0\u120f\0\u0381\0\u1254\0\u0381\0\u1299\0\u0381\0\u12de" + - "\0\u1323\0\u0381\0\u1368\0\u13ad\0\u13ad\0\u13ad\0\u13f2\0\u1437" + - "\0\u147c\0\u14c1\0\u1506\0\u154b\0\u1590\0\u15d5\0\u161a\0\u165f" + - "\0\u026d\0\u0381\0\u16a4\0\u16e9\0\u172e\0\u1773\0\u17b8\0\u17fd" + - "\0\u1842\0\u1887\0\u18cc\0\u1911\0\u1956\0\u199b\0\u19e0\0\u1a25" + - "\0\u1a6a\0\u1aaf\0\u1af4\0\u1b39\0\u1b7e\0\u02b2\0\u1bc3\0\u1c08" + - "\0\u1c4d\0\u1c92\0\u1cd7\0\u1d1c\0\u1d61\0\u1da6\0\u1deb\0\u1e30" + - "\0\u1e75\0\u1eba\0\u1eff\0\u1f44\0\u1f89\0\u1fce\0\u2013\0\u2058" + - "\0\u209d\0\u20e2\0\u2127\0\u216c\0\u21b1\0\u21f6\0\u223b\0\u2280" + - "\0\u22c5\0\u230a\0\u234f\0\u2394\0\u23d9\0\u241e\0\u2463\0\u24a8" + - "\0\u02b2\0\u24ed\0\u2532\0\u2577\0\u25bc\0\u2601\0\u2646\0\u268b" + - "\0\u26d0\0\u2715\0\u275a\0\u279f\0\u27e4\0\u2829\0\u286e\0\u28b3" + - "\0\u28f8\0\u293d\0\u2982\0\u29c7\0\u2a0c\0\u2a51\0\u2a96\0\u2adb" + - "\0\u2b20\0\u2b65\0\u2baa\0\u2bef\0\u2c34\0\u2c79\0\u2cbe\0\u2d03" + - "\0\u2d48\0\u2d8d\0\u2dd2\0\u2e17\0\u2e5c\0\u2ea1\0\u2ee6\0\u2f2b" + - "\0\u2f70\0\u2fb5\0\u2ffa\0\u303f\0\u3084\0\u30c9\0\u310e\0\u3153" + - "\0\u3198\0\u31dd\0\u3222\0\u3267\0\u32ac\0\u32f1\0\u3336\0\u337b" + - "\0\u0381\0\u33c0\0\u3405\0\u0381\0\u344a\0\u0381\0\u348f\0\u34d4" + - "\0\u0381\0\u3519\0\u355e\0\u35a3\0\u35e8\0\u0381\0\u362d\0\u3672" + - "\0\u36b7\0\u36fc\0\u3741\0\u3786\0\u37cb\0\u3810\0\u3855\0\u389a" + - "\0\u38df\0\u3924\0\u3969\0\u39ae\0\u13ad\0\u39f3\0\u3a38\0\u3a7d" + - "\0\u3ac2\0\u3b07\0\u3b4c\0\u3b91\0\u3bd6\0\u3c1b\0\u3c60\0\u3ca5" + - "\0\u3cea\0\u3d2f\0\u3d74\0\u3db9\0\u3dfe\0\u3e43\0\u3e88\0\u3ecd" + - "\0\u3f12\0\u3f57\0\u3f9c\0\u3fe1\0\u4026\0\u406b\0\u40b0\0\u40f5" + - "\0\u413a\0\u417f\0\u41c4\0\u4209\0\u424e\0\u4293\0\u42d8\0\u431d" + - "\0\u4362\0\u43a7\0\u43ec\0\u4431\0\u4476\0\u44bb\0\u1af4\0\u4500" + - "\0\u4545\0\u458a\0\u45cf\0\u4614\0\u1af4\0\u4659\0\u469e\0\u46e3" + - "\0\u4728\0\u476d\0\u47b2\0\u47f7\0\u483c\0\u4881\0\u48c6\0\u490b" + - "\0\u4950\0\u4995\0\u49da\0\u4a1f\0\u4a64\0\u4aa9\0\u28f8\0\u4aee" + - "\0\u4b33\0\u4b78\0\u4bbd\0\u4c02\0\u4c47\0\u4c8c\0\u4cd1\0\u4d16" + - "\0\u4d5b\0\u4da0\0\u4de5\0\u4e2a\0\u4e6f\0\u4eb4\0\u4ef9\0\u4f3e" + - "\0\u4f83\0\u4fc8\0\u500d\0\u5052\0\u5097\0\u50dc\0\u5121\0\u5166" + - "\0\u51ab\0\u51f0\0\u5235\0\u527a\0\u52bf\0\u5304\0\u5349\0\u538e" + - "\0\u53d3\0\u5418\0\u545d\0\u54a2\0\u54e7\0\u552c\0\u5571\0\u55b6" + - "\0\u55fb\0\u5640\0\u5685\0\u56ca\0\u570f\0\u10fb\0\u5754\0\u120f" + - "\0\u5799\0\u57de\0\u5823\0\u5868\0\u58ad\0\u58f2\0\u5937\0\u597c" + - "\0\u59c1\0\u5a06\0\u5a4b\0\u5a90\0\u5ad5\0\u0381\0\u5b1a\0\u5b5f" + - "\0\u5ba4\0\u5be9\0\u5c2e\0\u5c73\0\u5cb8\0\u5cfd\0\u21b1\0\u5d42" + - "\0\u5d87\0\u5dcc\0\u5e11\0\u5e56\0\u5e9b\0\u5ee0\0\u5f25\0\u5f6a" + - "\0\u5faf\0\u5ff4\0\u6039\0\u607e\0\u60c3\0\u6108\0\u614d\0\u6192" + - "\0\u61d7\0\u621c\0\u1f44\0\u6261\0\u62a6\0\u62eb\0\u6330\0\u6375" + - "\0\u63ba\0\u63ff\0\u6444\0\u6489\0\u64ce\0\u6513\0\u6558\0\u659d" + - "\0\u65e2\0\u6627\0\u666c\0\u66b1\0\u66f6\0\u673b\0\u6780\0\u67c5" + - "\0\u680a\0\u684f\0\u6894\0\u68d9\0\u691e\0\u6963\0\u69a8\0\u69ed" + - "\0\u6a32\0\u6a77\0\u6abc\0\u6b01\0\u6b46\0\u6b8b\0\u6bd0\0\u6c15" + - "\0\u6c5a\0\u6c9f\0\u6ce4\0\u6d29\0\u6d6e\0\u6db3\0\u6df8\0\u6e3d" + - "\0\u6e82\0\u6ec7\0\u6f0c\0\u0381\0\u6f51\0\u6f96\0\u6fdb\0\u7020" + - "\0\u7065\0\u0381\0\u0381\0\u0381\0\u70aa\0\u70ef\0\u7134\0\u7179" + - "\0\u71be\0\u7203\0\u7248\0\u728d\0\u1d1c\0\u72d2\0\u7317\0\u735c" + - "\0\u73a1\0\u73e6\0\u742b\0\u7470\0\u74b5\0\u74fa\0\u753f\0\u7584" + - "\0\u75c9\0\u760e\0\u7653\0\u7698\0\u76dd\0\u7722\0\u7767\0\u77ac" + - "\0\u77f1\0\u7836\0\u787b\0\u78c0\0\u7905\0\u794a\0\u798f\0\u79d4" + - "\0\u7a19\0\u7a5e\0\u7aa3\0\u286e\0\u7ae8\0\u7b2d\0\u7b72\0\u7bb7" + - "\0\u7bfc\0\u7c41\0\u7c86\0\u7ccb\0\u7d10\0\u7d55\0\u7d9a\0\u7ddf" + - "\0\u7e24\0\u7e69\0\u7eae\0\u7ef3\0\u7f38\0\u7f7d\0\u7fc2\0\u8007" + - "\0\u804c\0\u8091\0\u80d6\0\u811b\0\u8160\0\u81a5\0\u81ea\0\u822f" + - "\0\u8274\0\u82b9\0\u82fe\0\u8343\0\u8388\0\u83cd\0\u8412\0\u8457" + - "\0\u849c\0\u84e1\0\u8526\0\u856b\0\u0381\0\u0381\0\u85b0\0\u85f5" + - "\0\u863a\0\u867f\0\u86c4\0\u8709\0\u874e\0\u8793\0\u87d8\0\u881d" + - "\0\u8862\0\u88a7\0\u88ec\0\u8931\0\u8976\0\u89bb\0\u8a00\0\u8a45" + - "\0\u8a8a\0\u8acf\0\u8b14\0\u8b59\0\u8b9e\0\u8be3\0\u8c28\0\u8c6d" + - "\0\u8cb2\0\u8cf7\0\u8d3c\0\u8d81\0\u8dc6"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[573]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\12\1\13\1\14\1\15\1\13\1\14\1\16\1\17"+ + "\1\12\1\20\1\21\4\13\1\22\1\23\1\24\1\25"+ + "\1\26\1\27\1\30\1\31\2\24\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\50\1\45\1\52"+ + "\1\53\1\54\1\55\1\56\1\57\2\14\1\60\1\61"+ + "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71"+ + "\1\72\1\73\1\74\1\75\1\76\1\77\3\13\10\100"+ + "\1\101\1\102\11\100\2\103\1\104\1\105\53\100\1\106"+ + "\3\100\10\107\1\110\1\111\41\107\1\112\32\107\10\113"+ + "\1\101\1\114\11\113\2\115\1\116\1\117\2\113\1\120"+ + "\54\113\10\121\1\101\1\122\4\121\1\123\4\121\2\124"+ + "\1\125\1\126\57\121\10\127\1\101\1\130\4\127\1\131"+ + "\67\127\10\121\1\101\1\132\4\121\1\133\4\121\2\124"+ + "\1\125\1\126\57\121\10\127\1\101\1\134\4\127\1\135"+ + "\67\127\11\136\1\137\31\136\1\140\42\136\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\5\12\13\0\26\12\1\0\4\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\26\13\1\0\3\13\2\141\2\14\1\141\1\14"+ + "\1\0\2\141\2\0\1\141\1\142\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\142"+ + "\1\143\13\0\3\141\1\144\1\141\2\14\11\141\1\143"+ + "\5\141\1\0\1\141\1\143\3\141\1\146\1\147\1\141"+ + "\1\147\1\0\2\141\2\0\1\150\1\142\1\143\1\144"+ + "\1\0\1\145\2\0\1\141\2\0\1\141\5\0\2\141"+ + "\1\150\1\142\1\143\13\0\3\141\1\144\1\141\2\147"+ + "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\106\0"+ + "\11\151\1\0\34\151\1\152\37\151\12\0\1\21\112\0"+ + "\1\50\23\0\1\50\1\0\1\50\42\0\2\145\1\0"+ + "\1\145\53\0\2\145\23\0\1\12\1\153\2\12\1\153"+ + "\1\12\1\0\2\12\2\0\4\153\4\0\1\12\2\0"+ + "\1\154\1\155\4\0\5\153\13\0\5\153\2\12\17\153"+ + "\1\0\3\153\1\0\1\156\2\0\1\156\6\0\4\156"+ + "\7\0\1\157\1\155\4\0\5\156\2\0\1\50\10\0"+ + "\5\156\2\0\17\156\1\0\3\156\1\0\1\156\2\0"+ + "\1\156\6\0\4\156\7\0\1\157\1\155\4\0\5\156"+ + "\13\0\5\156\2\0\17\156\1\0\3\156\1\12\1\153"+ + "\2\160\1\153\1\160\1\0\2\160\2\0\4\153\4\161"+ + "\1\160\2\161\1\162\1\163\1\0\3\161\5\153\13\161"+ + "\5\153\2\160\17\153\1\161\3\153\10\164\1\165\21\164"+ + "\2\0\7\164\1\166\42\164\43\0\1\50\7\0\1\50"+ + "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\3\0\1\167\1\0"+ + "\1\13\1\170\1\13\1\171\1\13\5\0\1\172\3\0"+ + "\1\173\1\0\1\174\1\175\1\176\1\177\4\13\1\200"+ + "\1\201\1\202\6\13\1\203\1\204\1\13\1\205\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\206\1\13"+ + "\13\0\1\13\1\207\1\210\1\13\1\211\3\13\1\212"+ + "\2\13\1\213\12\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\214\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\215\1\216\3\13\13\0\1\13\1\217"+ + "\1\13\1\220\1\221\4\13\1\222\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\223\1\13"+ + "\1\224\5\13\1\225\2\13\1\226\4\13\1\227\4\13"+ + "\1\0\3\13\41\0\1\50\1\0\1\50\104\0\1\230"+ + "\1\50\105\0\1\50\5\0\1\50\2\0\1\231\1\232"+ + "\1\233\1\234\5\0\1\235\2\0\1\236\3\0\1\237"+ + "\54\0\1\50\105\0\1\50\1\0\1\240\103\0\1\50"+ + "\5\0\1\50\77\0\1\50\4\0\1\50\2\0\1\50"+ + "\26\0\1\50\3\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\241\2\13\1\242\3\13\1\243\1\244\7\13"+ + "\1\245\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\13"+ + "\1\246\3\13\13\0\1\247\7\13\1\250\10\13\1\251"+ + "\4\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\252\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\253\1\13\1\254\1\255\1\13\13\0\1\13\1\256"+ + "\2\13\1\257\2\13\1\260\7\13\1\261\2\13\1\223"+ + "\3\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\262"+ + "\1\13\1\263\1\13\13\0\12\13\1\264\1\13\1\265"+ + "\2\13\1\266\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\267\1\270\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\271\1\272"+ + "\4\13\1\273\1\13\1\274\12\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\275\15\13\1\276"+ + "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\277\4\13\1\300\1\301\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\1\12\1\302\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\3\0\1\303\1\0\1\304"+ + "\4\13\5\0\1\305\3\0\1\306\1\0\4\13\1\307"+ + "\10\13\1\274\6\13\1\310\1\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\311\1\13\13\0\11\13\1\312"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\313\5\13\1\314\14\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\315\1\13\13\0\1\13\1\316"+ + "\1\13\1\317\4\13\1\320\2\13\1\321\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\322"+ + "\1\13\1\323\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\324\1\13\1\325\1\13\13\0\1\13\1\326"+ + "\7\13\1\327\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\225\1\216\3\13\13\0\12\13\1\330\1\331\3\13"+ + "\1\332\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\10\13\1\333\10\13\1\334\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\2\13\1\335\1\13"+ + "\1\336\3\13\1\337\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\1\12\1\340\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\3\0\1\341\1\0\5\13\5\0\1\342\3\0"+ + "\1\343\1\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\344\24\13\1\0\3\13\10\100"+ + "\2\0\11\100\2\0\1\100\1\0\53\100\1\0\3\100"+ + "\11\345\1\0\74\345\1\0\1\346\2\0\1\346\6\0"+ + "\4\346\7\0\1\347\1\350\4\0\5\346\13\0\5\346"+ + "\2\0\17\346\1\0\3\346\10\100\2\0\11\100\2\0"+ + "\1\100\1\347\53\100\1\0\3\100\1\0\1\346\2\351"+ + "\1\346\1\351\1\0\2\351\2\0\4\346\7\351\1\352"+ + "\1\353\1\0\3\351\5\346\13\351\5\346\2\351\17\346"+ + "\1\351\3\346\10\107\2\0\41\107\1\0\32\107\11\354"+ + "\1\0\74\354\10\113\2\0\11\113\2\0\1\113\1\0"+ + "\2\113\1\0\54\113\1\0\1\355\2\0\1\355\6\0"+ + "\4\355\7\0\1\356\1\357\4\0\5\355\13\0\5\355"+ + "\2\0\17\355\1\0\3\355\10\113\2\0\11\113\2\0"+ + "\1\113\1\356\2\113\1\0\54\113\1\0\1\355\2\360"+ + "\1\355\1\360\1\0\2\360\2\0\4\355\7\360\1\361"+ + "\1\362\1\0\3\360\5\355\13\360\5\355\2\360\17\355"+ + "\1\360\3\355\10\121\2\0\11\121\2\0\1\121\1\0"+ + "\67\121\2\0\11\121\2\0\1\121\1\0\54\121\1\363"+ + "\2\121\1\0\1\364\2\0\1\364\6\0\4\364\7\0"+ + "\1\365\1\366\4\0\5\364\13\0\5\364\2\0\17\364"+ + "\1\0\3\364\10\121\2\0\11\121\2\0\1\121\1\365"+ + "\57\121\1\0\1\364\2\367\1\364\1\367\1\0\2\367"+ + "\2\0\4\364\7\367\1\370\1\371\1\0\3\367\5\364"+ + "\13\367\5\364\2\367\17\364\1\367\3\364\10\127\2\0"+ + "\104\127\2\0\71\127\1\372\2\127\10\121\2\0\11\121"+ + "\2\0\1\121\1\0\54\121\1\373\2\121\10\127\2\0"+ + "\71\127\1\374\2\127\11\136\1\0\31\136\1\0\42\136"+ + "\35\0\1\375\16\0\1\376\1\377\1\u0100\1\u0101\5\0"+ + "\1\u0102\2\0\1\u0103\3\0\1\u0104\11\0\6\141\1\0"+ + "\2\141\2\0\4\141\4\0\1\141\2\0\1\141\5\0"+ + "\5\141\13\0\26\141\1\0\5\141\2\u0105\1\141\1\u0105"+ + "\1\0\2\141\2\0\4\141\1\u0106\3\0\1\141\2\0"+ + "\1\141\5\0\5\141\1\u0106\12\0\5\141\2\u0105\17\141"+ + "\1\0\5\141\2\145\1\141\1\145\1\0\2\141\2\0"+ + "\2\141\1\143\1\144\4\0\1\141\2\0\1\141\5\0"+ + "\4\141\1\143\13\0\3\141\1\144\1\141\2\145\11\141"+ + "\1\143\5\141\1\0\1\141\1\143\3\141\2\146\1\141"+ + "\1\146\1\0\2\141\2\0\2\141\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\4\141\1\143"+ + "\13\0\3\141\1\144\1\141\2\146\11\141\1\143\5\141"+ + "\1\0\1\141\1\143\3\141\1\146\1\147\1\141\1\147"+ + "\1\0\2\141\2\0\1\141\1\u0107\1\143\1\144\1\0"+ + "\1\145\2\0\1\141\2\0\1\141\5\0\3\141\1\u0107"+ + "\1\143\13\0\3\141\1\144\1\141\2\147\11\141\1\143"+ + "\5\141\1\0\1\141\1\143\3\141\4\u0108\1\0\2\141"+ + "\2\0\2\141\2\u0108\4\0\1\141\2\0\1\141\5\0"+ + "\1\141\1\u0108\2\141\1\u0108\13\0\3\141\4\u0108\5\141"+ + "\1\u0108\3\141\1\u0108\5\141\1\0\1\141\1\u0108\1\141"+ + "\11\151\1\0\74\151\11\152\1\0\74\152\1\12\5\153"+ + "\1\0\2\12\2\0\4\153\4\0\1\12\2\0\1\12"+ + "\5\0\5\153\13\0\26\153\1\0\3\153\1\12\1\153"+ + "\2\12\1\153\1\12\1\0\2\12\2\0\4\153\4\0"+ + "\1\12\2\0\1\12\1\155\4\0\5\153\13\0\5\153"+ + "\2\12\17\153\1\0\3\153\1\0\1\u0109\2\0\1\u0109"+ + "\6\0\4\u0109\15\0\5\u0109\13\0\5\u0109\2\0\17\u0109"+ + "\1\0\3\u0109\1\0\5\156\5\0\4\156\15\0\5\156"+ + "\13\0\26\156\1\0\3\156\1\0\1\156\2\0\1\156"+ + "\6\0\4\156\10\0\1\155\4\0\5\156\13\0\5\156"+ + "\2\0\17\156\1\0\3\156\1\0\1\u0109\2\0\1\u0109"+ + "\2\0\2\161\2\0\4\u0109\10\161\1\0\4\161\5\u0109"+ + "\13\161\5\u0109\2\0\17\u0109\1\161\3\u0109\10\164\1\165"+ + "\21\164\1\u010a\64\164\1\0\74\164\32\167\1\u010b\53\167"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\u010c\21\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\320\22\13\1\0\3\13\46\172\1\u010d\37\172\52\173"+ + "\1\u010e\33\173\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u010f\1\13"+ + "\13\0\10\13\1\u0110\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\u0111\3\13\13\0\10\13\1\246\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\u0112\1\13\1\u0113\5\13\1\u0114\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0115\1\13\13\0\3\13"+ + "\1\u0116\6\13\1\u0117\1\u0118\3\13\1\u0119\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\272"+ + "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\310\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\246\14\13\1\u011a\4\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\u011b"+ + "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\246\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u011c\4\13\13\0\13\13\1\u011d\12\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u011e\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\310\4\13\13\0"+ + "\17\13\1\u011f\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\4\13\1\u0120\13\0\1\13\1\u0121\6\13\1\u0122\2\13"+ + "\1\u0123\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u0124\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\24\13\1\u0125\1\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\223\25\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\223"+ + "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u0126\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\20\13\1\u0127\5\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0128\3\13\13\0\16\13\1\310"+ + "\7\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0129\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u012a\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u012b\4\13\13\0\17\13\1\u012c\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u012d\1\13\13\0"+ + "\20\13\1\u012e\5\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\310\22\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\13\13\1\u012f\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\307"+ + "\12\13\1\0\3\13\12\0\1\u0130\3\0\1\u0131\12\0"+ + "\1\u0132\11\0\1\50\7\0\1\u0133\26\0\1\u0134\60\0"+ + "\1\u0135\113\0\1\u0136\101\0\1\u0137\121\0\1\u0138\100\0"+ + "\1\u0139\76\0\1\u013a\1\u013b\102\0\1\u013c\73\0\1\50"+ + "\1\0\1\45\40\0\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ + "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u013d\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u013e\7\13\1\u013f"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\225\25\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\u0140"+ + "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\310\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\3\13\1\u0141\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\4\13\1\310\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\310\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\2\13"+ + "\1\310\2\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0142\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\310\2\13\1\267"+ + "\5\13\1\u0143\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u0144\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\20\13\1\310\5\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\1\13\1\u0140\3\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u0145\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0146\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u0147\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\4\13\1\u0148\21\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0149"+ + "\21\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\310\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\223\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\310\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\3\13\1\u014a\1\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\1\u014b\1\u014c\2\13\1\u014d"+ + "\13\0\4\13\1\u014e\2\13\1\u014f\2\13\1\u0150\4\13"+ + "\1\u0151\1\310\1\13\1\u0152\1\u0153\2\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\17\13\1\u0119\6\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0154\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0120\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u0155\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\55\13\0\12\13\1\310\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u0156\1\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\1\12"+ + "\1\340\2\0\4\13\4\0\1\12\2\0\1\12\3\0"+ + "\1\341\1\0\5\13\5\0\1\342\3\0\1\343\1\0"+ + "\21\13\1\u0157\4\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\u0158\7\13\1\u0159\12\13\1\0"+ + "\3\13\6\302\1\u015a\1\302\1\u015b\2\u015a\4\302\4\u015a"+ + "\1\302\2\u015a\1\302\5\u015a\5\302\13\u015a\26\302\1\u015a"+ + "\3\302\32\303\1\u015c\53\303\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\16\13\1\u015d\7\13\1\0\3\13\46\305\1\u015c"+ + "\37\305\52\306\1\u015c\33\306\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\310\25\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\3\13\1\u015e\22\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u015f\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\24\13\1\265"+ + "\1\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u0145"+ + "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0160\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u0161\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u0162"+ + "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\307\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\330\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\223\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\2\13\1\u012a\2\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0155\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0163\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\10\13\1\u0164\15\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u0165\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\11\13\1\u0166\14\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\u0167\21\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u0168\2\13\1\u0169\1\u016a\13\0\1\u016b"+ + "\11\13\1\u016c\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\1\12\1\u016d\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\3\0\1\u016e\1\0\5\13\5\0\1\u016f\3\0\1\u0170"+ + "\1\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0171\24\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\11\13\1\u0172\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\201\1\u0173"+ + "\5\13\1\u0174\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\11\13\1\u0175\14\13\1\0\3\13\6\340"+ + "\1\u0176\1\340\1\u0177\2\u0176\4\340\4\u0176\1\340\2\u0176"+ + "\1\340\5\u0176\5\340\13\u0176\26\340\1\u0176\3\340\32\341"+ + "\1\u0178\53\341\46\342\1\u0179\37\342\52\343\1\u017a\33\343"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\201\14\13"+ + "\1\0\3\13\1\0\5\346\5\0\4\346\15\0\5\346"+ + "\13\0\26\346\1\0\3\346\1\0\1\346\2\0\1\346"+ + "\6\0\4\346\10\0\1\350\4\0\5\346\13\0\5\346"+ + "\2\0\17\346\1\0\3\346\1\0\1\u017b\2\0\1\u017b"+ + "\6\0\4\u017b\15\0\5\u017b\13\0\5\u017b\2\0\17\u017b"+ + "\1\0\3\u017b\1\0\1\u017b\2\0\1\u017b\2\0\2\351"+ + "\2\0\4\u017b\10\351\1\0\4\351\5\u017b\13\351\5\u017b"+ + "\2\0\17\u017b\1\351\3\u017b\1\0\5\355\5\0\4\355"+ + "\15\0\5\355\13\0\26\355\1\0\3\355\1\0\1\355"+ + "\2\0\1\355\6\0\4\355\10\0\1\357\4\0\5\355"+ + "\13\0\5\355\2\0\17\355\1\0\3\355\1\0\1\u017c"+ + "\2\0\1\u017c\6\0\4\u017c\15\0\5\u017c\13\0\5\u017c"+ + "\2\0\17\u017c\1\0\3\u017c\1\0\1\u017c\2\0\1\u017c"+ + "\2\0\2\360\2\0\4\u017c\10\360\1\0\4\360\5\u017c"+ + "\13\360\5\u017c\2\0\17\u017c\1\360\3\u017c\10\121\2\0"+ + "\11\121\2\0\1\121\1\0\55\121\1\u017d\1\121\1\0"+ + "\5\364\5\0\4\364\15\0\5\364\13\0\26\364\1\0"+ + "\3\364\1\0\1\364\2\0\1\364\6\0\4\364\10\0"+ + "\1\366\4\0\5\364\13\0\5\364\2\0\17\364\1\0"+ + "\3\364\1\0\1\u017e\2\0\1\u017e\6\0\4\u017e\15\0"+ + "\5\u017e\13\0\5\u017e\2\0\17\u017e\1\0\3\u017e\1\0"+ + "\1\u017e\2\0\1\u017e\2\0\2\367\2\0\4\u017e\10\367"+ + "\1\0\4\367\5\u017e\13\367\5\u017e\2\0\17\u017e\1\367"+ + "\3\u017e\10\127\2\0\72\127\1\u017f\1\127\10\121\2\0"+ + "\11\121\2\0\1\121\1\0\56\121\1\u017d\10\127\2\0"+ + "\73\127\1\u017f\75\0\1\u0180\65\0\1\u0181\113\0\1\u0182"+ + "\101\0\1\u0183\121\0\1\u0184\100\0\1\u0185\76\0\1\u0186"+ + "\1\u0187\102\0\1\u0188\30\0\2\141\2\u0105\1\141\1\u0105"+ + "\1\0\2\141\2\0\2\141\1\143\1\141\4\0\1\141"+ + "\2\0\1\141\5\0\4\141\1\143\13\0\5\141\2\u0105"+ + "\11\141\1\143\5\141\1\0\1\141\1\143\1\141\2\0"+ + "\2\u0105\1\0\1\u0105\53\0\2\u0105\23\0\2\141\4\u0108"+ + "\1\0\2\141\2\0\1\141\1\u0107\2\u0108\4\0\1\141"+ + "\2\0\1\141\5\0\1\141\1\u0108\1\141\1\u0107\1\u0108"+ + "\13\0\3\141\4\u0108\5\141\1\u0108\3\141\1\u0108\5\141"+ + "\1\0\1\141\1\u0108\1\141\1\0\5\u0109\5\0\4\u0109"+ + "\11\0\1\161\3\0\5\u0109\13\0\26\u0109\1\0\3\u0109"+ + "\34\0\5\u010a\13\0\2\u010a\2\0\1\u010a\4\0\1\u010a"+ + "\1\0\1\u010a\2\0\1\u010a\2\0\1\u010a\10\0\32\u010b"+ + "\1\u0189\53\u010b\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\3\13\1\u018a\1\13"+ + "\13\0\26\13\1\0\3\13\46\u010d\1\u0189\37\u010d\52\u010e"+ + "\1\u0189\33\u010e\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\u018b\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u018c\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\15\13\1\u018d\10\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\20\13\1\246\5\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\13\1\u0155\3\13"+ + "\13\0\10\13\1\u018e\5\13\1\u014b\4\13\1\u018f\2\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u0190\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0191\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\15\13\1\u0192\10\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\1\u0193\4\13\13\0\1\u0194\1\13"+ + "\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0155\3\13\13\0\1\13\1\307"+ + "\14\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\4\13\1\u0198\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u0199\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u019a\1\u019b\3\13\13\0\1\13\1\u019c"+ + "\6\13\1\u018e\1\13\1\u019d\10\13\1\u018f\2\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u019e\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\u019f\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u01a0\4\13\1\u0115\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\251\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\310"+ + "\12\13\1\307\7\13\1\201\2\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u01a1\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u0119"+ + "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\3\13\1\u01a2"+ + "\1\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\246\25\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\246\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01a3\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u01a4\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\16\13\1\u01a5\7\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u01a6\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\15\13\1\310\10\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\u0175\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u01a7\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\u01a8\3\13\13\0\1\13\1\u019c\24\13"+ + "\1\0\3\13\12\0\1\u0130\16\0\1\u0132\21\0\1\u0133"+ + "\26\0\1\u0134\106\0\1\u01a9\20\0\1\u01aa\105\0\1\u01ab"+ + "\105\0\1\u01ac\127\0\1\u01ad\124\0\1\u013c\106\0\1\u01ae"+ + "\62\0\1\u01af\2\0\1\u01ad\124\0\1\u01b0\120\0\1\u01b1"+ + "\50\0\1\u01b2\134\0\1\u01ad\21\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\15\13\1\u01b3\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01b4\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u01b5"+ + "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\2\13\1\310\23\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\u0192\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\223\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\1\u01b6\4\13\13\0\12\13"+ + "\1\310\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\223\5\13\1\u01b7\14\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\310\1\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\u01b8\4\13\13\0"+ + "\1\u01b9\1\13\1\u0195\13\13\1\u0196\1\u0197\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0125"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u01ba\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\u01bb\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\21\13\1\u01bc\4\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\246"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\7\13\1\310\16\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\223\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\u01bd\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u01be\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\21\13"+ + "\1\u01bf\4\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0166\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\21\13\1\u01c0\4\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01c1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\55\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u0145\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\3\13\1\u0192\1\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u01c2\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01c3"+ + "\22\13\1\0\3\13\10\u015a\1\u015c\75\u015a\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\5\u015b\13\0\2\u015b\2\12\1\u015b\4\12\1\u015b\1\12"+ + "\1\u015b\2\12\1\u015b\2\12\1\u015b\4\12\1\0\3\12"+ + "\34\0\5\u015c\13\0\2\u015c\2\0\1\u015c\4\0\1\u015c"+ + "\1\0\1\u015c\2\0\1\u015c\2\0\1\u015c\10\0\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\272\1\u0155\3\13\13\0\10\13\1\u01c4"+ + "\5\13\1\u014b\7\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\265\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\4\13\1\310\13\0\13\13\1\u01c5\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\14\13\1\310"+ + "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\310\24\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\u01c6\1\310\1\13\1\u01c7\1\13\13\0\1\u01c8\1\13"+ + "\1\u01c9\13\13\1\u01ca\1\u01cb\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u012c\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01cc"+ + "\7\13\1\u01cd\1\13\1\310\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\3\13\1\u01ce\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\13\13\1\225"+ + "\12\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\u012c\4\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\2\13\1\u01cf\23\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01d0\5\13\1\u01d1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\256\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0163\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\11\13\1\u01d2\14\13\1\0\3\13"+ + "\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d\4\u01d3\1\u016d"+ + "\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\5\u016d\13\u01d3\26\u016d"+ + "\1\u01d3\3\u016d\32\u016e\1\u01d5\53\u016e\32\u016f\1\0\13\u016f"+ + "\1\u01d6\37\u016f\32\u0170\1\0\17\u0170\1\u01d7\33\u0170\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01d8\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\u01d9\1\13\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\12\13\1\u01da\13\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u01db\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\225\13\13\1\0"+ + "\3\13\10\u0176\1\u01dc\75\u0176\6\u0177\1\u01dc\1\u0177\1\u01dd"+ + "\2\u01dc\4\u0177\4\u01dc\1\u0177\2\u01dc\1\u0177\5\u01dc\5\u0177"+ + "\13\u01dc\26\u0177\1\u01dc\3\u0177\32\u0178\1\u01de\53\u0178\46\u0179"+ + "\1\u01de\37\u0179\52\u017a\1\u01de\33\u017a\1\0\5\u017b\5\0"+ + "\4\u017b\11\0\1\351\3\0\5\u017b\13\0\26\u017b\1\0"+ + "\3\u017b\1\0\5\u017c\5\0\4\u017c\11\0\1\360\3\0"+ + "\5\u017c\13\0\26\u017c\1\0\3\u017c\1\0\5\u017e\5\0"+ + "\4\u017e\11\0\1\367\3\0\5\u017e\13\0\26\u017e\1\0"+ + "\3\u017e\66\0\1\u01df\57\0\1\u01e0\124\0\1\u0188\106\0"+ + "\1\u01e1\62\0\1\u01e2\2\0\1\u01e0\124\0\1\u01e3\120\0"+ + "\1\u01e4\50\0\1\u01e5\134\0\1\u01e0\55\0\5\u0189\13\0"+ + "\2\u0189\1\0\2\u0189\3\0\2\u0189\1\0\1\u0189\2\0"+ + "\1\u0189\2\0\1\u0189\10\0\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\251\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\13\1\225\3\13\13\0\12\13\1\310\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u01e6\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u01e7\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01e8\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\337\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\u01e9\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\246"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u01ea\1\13\1\u01eb\22\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ec"+ + "\5\13\1\u01ed\4\13\1\u01ee\2\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u01ef\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u01ee"+ + "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\u01f0\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\24\13\1\310\1\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\251\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u01f1"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\4\13\1\314\21\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\u01a6\25\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u01ba\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u01d1\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\3\13"+ + "\1\u0192\22\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u01f2\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\246\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\251\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\u01f3\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u01f4\1\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u0140\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\201\22\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u01f5\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\3\13"+ + "\1\u01f6\1\13\13\0\26\13\1\0\3\13\104\0\1\u01f7"+ + "\1\u01f8\103\0\1\u01f9\105\0\1\u01fa\105\0\1\u01fb\42\0"+ + "\1\u01fc\122\0\1\u01fd\117\0\1\u01ad\103\0\1\u01fe\111\0"+ + "\1\u01ad\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u01ff\21\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0200\24\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\12\13\1\u0201\13\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\12\13\1\265\13\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\20\13"+ + "\1\223\5\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u01eb\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\10\13\1\u0202\12\13\1\u01ee\2\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\13\13"+ + "\1\310\12\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\6\13\1\310\17\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\265\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0203\1\u0120\13\0\1\u0204"+ + "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u0205\15\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\201\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\11\13\1\u0206\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\17\13\1\u0207"+ + "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u0208"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\13\1\u014c\3\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u0209\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u020a"+ + "\1\13\1\u020b\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u020c\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\u020d\2\13\1\u020e\4\13"+ + "\1\u020f\5\13\1\u01ed\4\13\1\u0210\2\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0211\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\u0212\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0213\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0214\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\3\13\1\u0215\1\13\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0161\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\11\13\1\u0112\14\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u0216\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u012c\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\3\13\1\223\1\13\13\0"+ + "\3\13\1\310\22\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3"+ + "\1\0\53\u01d3\6\u016d\1\u01d3\1\u016d\1\u01d4\2\u01d3\4\u016d"+ + "\4\u01d3\1\u016d\2\u01d3\1\u016d\3\u01d3\1\0\1\u01d3\1\u01d4"+ + "\1\u016d\3\u01d4\13\u01d3\2\u01d4\2\u016d\1\u01d4\4\u016d\1\u01d4"+ + "\1\u016d\1\u01d4\5\u016d\1\u01d4\4\u016d\1\u01d3\3\u016d\34\0"+ + "\1\u01d5\1\0\3\u01d5\13\0\2\u01d5\2\0\1\u01d5\4\0"+ + "\1\u01d5\1\0\1\u01d5\5\0\1\u01d5\10\0\32\u016f\1\0"+ + "\1\u016f\1\u01d6\1\u016f\3\u01d6\5\u016f\1\u01d6\5\u016f\2\u01d6"+ + "\2\u016f\1\u01d6\4\u016f\1\u01d6\1\u016f\1\u01d6\5\u016f\1\u01d6"+ + "\10\u016f\32\u0170\1\0\1\u0170\1\u01d7\1\u0170\3\u01d7\11\u0170"+ + "\1\u01d7\1\u0170\2\u01d7\2\u0170\1\u01d7\4\u0170\1\u01d7\1\u0170"+ + "\1\u01d7\5\u0170\1\u01d7\10\u0170\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0218\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\223\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\u020d\25\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\4\13\1\u0219"+ + "\21\13\1\0\3\13\10\u01dc\1\u01de\75\u01dc\6\12\1\0"+ + "\2\12\2\0\4\12\4\0\1\12\2\0\1\12\5\0"+ + "\2\u01dd\2\12\1\u01dd\13\0\10\12\1\u01dd\15\12\1\0"+ + "\3\12\34\0\2\u01de\2\0\1\u01de\23\0\1\u01de\61\0"+ + "\1\u021a\122\0\1\u021b\117\0\1\u01e0\103\0\1\u021c\111\0"+ + "\1\u01e0\14\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\256\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u021d\13\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\4\13\1\u0119\21\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u021e\24\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\1\13\1\u021f\3\13"+ + "\13\0\26\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\10\13\1\u0220\15\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u0221\7\13\1\u0222\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\10\13"+ + "\1\307\15\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\3\13\1\u0223\22\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\1\u01f0\4\13\13\0\26\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\12\13\1\u01ee\13\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u012c"+ + "\22\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\17\13\1\u0224\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\1\246\4\13\13\0\26\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0119\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\1\13\1\u0205\24\13"+ + "\1\0\3\13\104\0\1\u0225\1\u0226\104\0\1\u0227\1\u0228"+ + "\104\0\1\u0229\1\u022a\61\0\2\u01ad\63\0\1\u022b\140\0"+ + "\1\u01ad\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\16\13"+ + "\1\225\7\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\12\13\1\u022c\13\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u0221\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\11\13\1\u022d\14\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\11\13"+ + "\1\244\14\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\1\225"+ + "\4\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\225\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\4\13\1\274\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\u0175\21\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\4\13\1\225\13\0"+ + "\26\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\13\1\u022e"+ + "\3\13\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\10\13\1\u022f\15\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\16\13\1\344\7\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0119"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\3\13\1\u0230\22\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\u0231\7\13\1\u0222\14\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223"+ + "\13\13\1\u0232\1\13\1\u020d\4\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\u0213\4\13\13\0\26\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\12\13"+ + "\1\u020d\1\u0232\6\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u0233\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\1\13\1\u0234\3\13\13\0\26\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0235"+ + "\14\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\1\223\4\13"+ + "\13\0\26\13\1\0\3\13\10\u01d3\1\u0217\21\u01d3\1\0"+ + "\1\u01d3\1\u0217\1\u01d3\3\u0217\13\u01d3\2\u0217\2\u01d3\1\u0217"+ + "\4\u01d3\1\u0217\1\u01d3\1\u0217\5\u01d3\1\u0217\10\u01d3\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\13\13\1\u0236\12\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\10\13\1\u0237"+ + "\15\13\1\0\3\13\61\0\2\u01e0\63\0\1\u0238\140\0"+ + "\1\u01e0\12\0\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\1\u0239"+ + "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\23\13\1\201\2\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\15\13\1\u023a\10\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\7\13\1\u01ee\16\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\12\13\1\u023b"+ + "\13\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\1\13\1\u023c\24\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\17\13\1\246\6\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\21\13\1\u01d9\4\13\1\0"+ + "\3\13\31\0\1\u01f7\105\0\1\u01f8\127\0\1\u023d\105\0"+ + "\1\u023e\134\0\1\u01f7\105\0\1\u01f8\70\0\1\u023f\20\0"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\24\13\1\244\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\17\13"+ + "\1\u0240\6\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\15\13\1\u0241\10\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\7\13\1\u0242\16\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0243\15\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u0244\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u01ba\21\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0223\10\13\1\u0245\11\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\2\13"+ + "\1\223\23\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\17\13\1\225\6\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\3\13\1\u0246\22\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\10\13\1\u0247\15\13"+ + "\1\0\3\13\65\0\1\u0248\20\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\4\13\1\u0120\21\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\13\1\u0125\24\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\1\13\1\u01ee"+ + "\24\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0"+ + "\4\13\4\0\1\12\2\0\1\12\5\0\5\13\13\0"+ + "\10\13\1\u0249\15\13\1\0\3\13\73\0\1\u024a\12\0"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\310\11\13"+ + "\1\310\10\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\1\13\1\u0125\15\13\1\u0151\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ + "\1\u024b\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\17\13\1\u0151\6\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\1\13\1\u024c\24\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\24\13\1\u024d\1\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\12\13"+ + "\1\u024e\13\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0198\21\13\1\0\3\13\73\0\1\u024f"+ + "\12\0\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\5\13\13\0\11\13\1\u0250"+ + "\14\13\1\0\3\13\72\0\1\u01ad\13\0\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\24\13\1\u0251\1\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\3\13\1\u0223\10\13"+ + "\1\u0252\11\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\5\13"+ + "\13\0\4\13\1\u0253\12\13\1\u0151\6\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\4\13\1\310\21\13"+ + "\1\0\3\13\72\0\1\u01e0\13\0\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\12\13\1\u0198\13\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\1\u0254\16\13\1\u0151\6\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\24\13"+ + "\1\u0255\1\13\1\0\3\13\1\12\5\13\1\0\2\12"+ + "\2\0\4\13\4\0\1\12\2\0\1\12\5\0\4\13"+ + "\1\u0256\13\0\26\13\1\0\3\13\1\12\5\13\1\0"+ + "\2\12\2\0\4\13\4\0\1\12\2\0\1\12\5\0"+ + "\5\13\13\0\1\13\1\204\24\13\1\0\3\13\1\12"+ + "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\2\0"+ + "\1\12\5\0\5\13\13\0\17\13\1\u0257\6\13\1\0"+ + "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0"+ + "\1\12\2\0\1\12\5\0\4\13\1\251\13\0\26\13"+ + "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13"+ + "\4\0\1\12\2\0\1\12\5\0\5\13\13\0\4\13"+ + "\1\u0166\14\13\1\u0258\4\13\1\0\3\13\1\12\5\13"+ + "\1\0\2\12\2\0\4\13\4\0\1\12\2\0\1\12"+ + "\5\0\5\13\13\0\13\13\1\u0259\12\13\1\0\3\13"+ + "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12"+ + "\2\0\1\12\5\0\5\13\13\0\14\13\1\u01a2\11\13"+ + "\1\0\3\13"; + + private static int [] zzUnpackTrans() { + int [] result = new int[38500]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\11\0\4\1\1\11\1\1\1\11\3\1\2\11\4\1"+ + "\1\11\15\1\1\11\1\1\1\11\24\1\1\11\2\1"+ + "\1\11\3\1\1\11\2\1\2\11\1\1\1\11\3\1"+ + "\1\11\1\1\1\11\5\1\1\11\1\1\1\11\1\1"+ + "\1\11\2\1\1\11\15\1\1\0\1\1\1\0\1\1"+ + "\1\11\1\1\3\0\1\1\1\0\2\1\2\0\34\1"+ + "\10\0\43\1\1\0\1\1\2\0\32\1\3\0\1\1"+ + "\1\11\2\1\1\0\1\11\1\1\1\0\1\11\2\1"+ + "\1\0\1\11\1\1\1\0\3\1\1\0\1\11\1\1"+ + "\1\0\3\1\10\0\1\1\1\0\2\1\1\0\1\1"+ + "\1\0\1\1\2\0\41\1\15\0\35\1\1\0\23\1"+ + "\3\0\5\1\1\0\1\1\5\0\1\1\1\0\1\1"+ + "\11\0\40\1\4\0\1\11\5\0\40\1\1\0\10\1"+ + "\1\0\2\1\2\11\5\0\21\1\2\11\6\0\33\1"+ + "\3\0\10\1\7\0\14\1\1\0\4\1\2\11\1\0"+ + "\10\1\1\0\1\1\1\0\4\1\1\0\12\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[601]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\12\1\13\1\14\1\15\1\13\1\14\1\16\1\17" + - "\1\12\1\20\1\21\4\13\1\22\1\23\1\24\1\25" + - "\1\26\1\27\1\30\2\24\1\31\1\32\1\33\1\34" + - "\1\35\1\36\1\37\1\40\2\36\1\41\1\42\1\36" + - "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\2\14" + - "\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\61" + - "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71" + - "\1\72\1\73\1\74\1\75\3\13\10\76\1\77\1\100" + - "\11\76\2\101\3\76\1\102\50\76\1\103\3\76\10\104" + - "\1\105\1\106\33\104\1\107\37\104\10\110\1\77\1\111" + - "\11\110\2\112\3\110\1\113\1\114\53\110\10\115\1\77" + - "\1\116\4\115\1\117\4\115\2\120\3\115\1\121\54\115" + - "\10\122\1\77\1\123\4\122\1\124\66\122\10\115\1\77" + - "\1\125\4\115\1\126\4\115\2\120\3\115\1\121\54\115" + - "\10\122\1\77\1\127\4\122\1\130\66\122\11\131\1\132" + - "\22\131\1\133\50\131\6\12\1\0\2\12\2\0\4\12" + - "\4\0\1\12\4\0\1\12\15\0\33\12\1\0\4\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\33\13\1\0\3\13\2\134\2\14\1\134" + - "\1\14\1\0\2\134\2\0\1\134\1\135\1\136\1\137" + - "\1\0\1\140\2\0\1\134\4\0\1\134\15\0\2\134" + - "\1\136\1\134\1\137\1\134\2\14\12\134\1\136\1\134" + - "\1\135\6\134\1\0\1\134\1\136\3\134\1\141\1\142" + - "\1\134\1\142\1\0\2\134\2\0\1\143\1\135\1\136" + - "\1\137\1\0\1\140\2\0\1\134\4\0\1\134\15\0" + - "\2\134\1\136\1\134\1\137\1\134\2\142\12\134\1\136" + - "\1\134\1\135\2\134\1\143\3\134\1\0\1\134\1\136" + - "\1\134\105\0\11\144\1\0\27\144\1\145\43\144\12\0" + - "\1\21\111\0\1\41\14\0\1\41\2\0\1\41\47\0" + - "\2\140\1\0\1\140\46\0\2\140\27\0\1\12\1\146" + - "\2\12\1\146\1\12\1\0\2\12\2\0\4\146\4\0" + - "\1\12\2\0\1\147\1\0\1\12\15\0\6\146\2\12" + - "\23\146\1\0\3\146\1\0\1\150\2\0\1\150\6\0" + - "\4\150\7\0\1\147\5\0\1\41\11\0\6\150\2\0" + - "\23\150\1\0\3\150\1\0\1\150\2\0\1\150\6\0" + - "\4\150\7\0\1\147\17\0\6\150\2\0\23\150\1\0" + - "\3\150\1\12\1\146\2\151\1\146\1\151\1\0\2\151" + - "\2\0\4\146\4\152\1\151\2\152\1\153\1\0\1\151" + - "\15\152\6\146\2\151\23\146\1\152\3\146\32\0\1\41" + - "\1\0\1\41\103\0\1\154\1\41\104\0\1\41\11\0" + - "\1\155\1\156\1\0\1\157\1\160\5\0\1\161\2\0" + - "\1\162\4\0\1\163\50\0\1\41\104\0\1\41\10\0" + - "\1\41\33\0\1\41\37\0\1\41\2\0\1\164\101\0" + - "\1\41\6\0\1\41\1\0\1\41\33\0\1\41\3\0" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\165\3\13\1\166\3\13" + - "\1\167\1\170\10\13\1\171\7\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\172\10\13\1\173\4\13\1\174\4\13" + - "\1\175\7\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\176\2\13\1\177\5\13\1\200\2\13\1\201\5\13" + - "\1\202\7\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\203\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\204\3\13\1\205\2\13\1\206\10\13\1\207\2\13" + - "\1\210\1\211\1\176\1\212\3\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\213\1\13\1\214\1\215\2\13" + - "\1\216\2\13\1\217\6\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\220\1\221\25\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\222\1\223\4\13\1\224\1\13" + - "\1\225\16\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\226\17\13\1\227\1\176\10\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\230\4\13\1\231\1\232\20\13" + - "\1\0\3\13\1\12\5\13\1\0\1\12\1\233\2\0" + - "\4\13\4\0\1\12\4\0\1\12\7\0\1\234\1\235" + - "\2\0\1\236\1\0\5\13\1\237\11\13\1\225\5\13" + - "\1\240\3\13\1\241\1\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\12\13\1\242\11\13\1\243\6\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\244\1\13\1\245\1\13" + - "\1\246\3\13\1\247\2\13\1\250\7\13\1\251\6\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\252\5\13" + - "\1\253\20\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\254\2\13\1\255\4\13\1\256\2\13\1\257\7\13" + - "\1\260\6\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\261\2\13\1\262\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\13\1\263\10\13\1\264\3\13\1\265\5\13" + - "\1\266\6\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\13\13" + - "\1\267\1\270\1\13\1\271\2\13\1\272\3\13\1\200" + - "\5\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\1\13\1\273" + - "\2\13\1\274\1\275\4\13\1\276\3\13\1\271\6\13" + - "\1\277\5\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\7\0\1\300" + - "\1\301\2\0\1\302\1\0\1\303\1\304\1\13\1\305" + - "\1\306\4\13\1\307\1\310\1\311\2\13\1\312\4\13" + - "\1\313\1\314\1\13\1\315\2\13\1\316\1\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\23\13\1\317\7\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\13\1\320\31\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\3\13\1\321\1\13\1\322" + - "\3\13\1\323\21\13\1\0\3\13\1\12\5\13\1\0" + - "\1\12\1\324\2\0\4\13\4\0\1\12\4\0\1\12" + - "\7\0\1\325\1\326\2\0\1\327\1\0\33\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\13\1\330\31\13\1\0" + - "\3\13\10\76\2\0\11\76\2\0\3\76\1\0\50\76" + - "\1\0\3\76\11\331\1\0\73\331\1\0\1\332\2\0" + - "\1\332\6\0\4\332\7\0\1\333\17\0\6\332\2\0" + - "\23\332\1\0\3\332\1\0\1\332\2\334\1\332\1\334" + - "\1\0\2\334\2\0\4\332\7\334\1\335\1\0\16\334" + - "\6\332\2\334\23\332\1\334\3\332\10\104\2\0\33\104" + - "\1\0\37\104\11\336\1\0\73\336\10\110\2\0\11\110" + - "\2\0\3\110\2\0\53\110\1\0\1\337\2\0\1\337" + - "\6\0\4\337\7\0\1\340\17\0\6\337\2\0\23\337" + - "\1\0\3\337\1\0\1\337\2\341\1\337\1\341\1\0" + - "\2\341\2\0\4\337\7\341\1\342\1\0\16\341\6\337" + - "\2\341\23\337\1\341\3\337\10\115\2\0\11\115\2\0" + - "\3\115\1\0\64\115\2\0\11\115\2\0\3\115\1\0" + - "\51\115\1\343\2\115\1\0\1\344\2\0\1\344\6\0" + - "\4\344\7\0\1\345\17\0\6\344\2\0\23\344\1\0" + - "\3\344\1\0\1\344\2\346\1\344\1\346\1\0\2\346" + - "\2\0\4\344\7\346\1\347\1\0\16\346\6\344\2\346" + - "\23\344\1\346\3\344\10\122\2\0\103\122\2\0\70\122" + - "\1\350\2\122\10\115\2\0\11\115\2\0\3\115\1\0" + - "\51\115\1\351\2\115\10\122\2\0\70\122\1\352\2\122" + - "\11\131\1\0\22\131\1\0\50\131\46\0\1\353\1\354" + - "\1\0\1\355\1\356\5\0\1\357\2\0\1\360\1\361" + - "\3\0\1\362\14\0\6\134\1\0\2\134\2\0\4\134" + - "\4\0\1\134\4\0\1\134\15\0\33\134\1\0\5\134" + - "\2\363\1\134\1\363\1\0\2\134\2\0\4\134\1\364" + - "\3\0\1\134\4\0\1\134\1\0\1\364\13\0\6\134" + - "\2\363\23\134\1\0\5\134\2\140\1\134\1\140\1\0" + - "\2\134\2\0\2\134\1\136\1\137\4\0\1\134\4\0" + - "\1\134\15\0\2\134\1\136\1\134\1\137\1\134\2\140" + - "\12\134\1\136\10\134\1\0\1\134\1\136\3\134\2\141" + - "\1\134\1\141\1\0\2\134\2\0\2\134\1\136\1\137" + - "\1\0\1\140\2\0\1\134\4\0\1\134\15\0\2\134" + - "\1\136\1\134\1\137\1\134\2\141\12\134\1\136\10\134" + - "\1\0\1\134\1\136\3\134\1\141\1\142\1\134\1\142" + - "\1\0\2\134\2\0\1\134\1\365\1\136\1\137\1\0" + - "\1\140\2\0\1\134\4\0\1\134\15\0\2\134\1\136" + - "\1\134\1\137\1\134\2\142\12\134\1\136\1\134\1\365" + - "\6\134\1\0\1\134\1\136\3\134\4\366\1\0\2\134" + - "\2\0\2\134\2\366\4\0\1\134\4\0\1\134\15\0" + - "\2\134\1\366\1\134\4\366\5\134\2\366\3\134\1\366" + - "\10\134\1\0\1\134\1\366\1\134\11\144\1\0\73\144" + - "\11\145\1\0\73\145\1\12\5\146\1\0\2\12\2\0" + - "\4\146\4\0\1\12\4\0\1\12\15\0\33\146\1\0" + - "\3\146\1\0\1\367\2\0\1\367\6\0\4\367\27\0" + - "\6\367\2\0\23\367\1\0\3\367\1\0\5\150\5\0" + - "\4\150\27\0\33\150\1\0\3\150\1\0\1\367\2\0" + - "\1\367\2\0\2\152\2\0\4\367\7\152\1\0\17\152" + - "\6\367\2\0\23\367\1\152\3\367\12\0\1\370\3\0" + - "\1\371\12\0\1\372\2\0\1\41\10\0\1\373\33\0" + - "\1\374\52\0\1\375\113\0\1\376\100\0\1\377\121\0" + - "\1\u0100\76\0\1\u0101\75\0\1\u0102\1\u0103\100\0\1\u0104" + - "\71\0\1\41\2\0\1\36\45\0\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\241\24\13\1\241\5\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\16\13\1\u0105\14\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\13\1\u0106\10\13\1\u0107\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\200\32\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\25\13\1\u0108\5\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\u0109\26\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\2\13\1\241\30\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\241\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\241\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\22\13\1\u010a\1\13\1\u010b\6\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\4\13\1\241\26\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\14\13\1\u010c\16\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\14\13\1\237\16\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\27\13\1\241\3\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\22\13\1\241\10\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\16\13\1\u0108\14\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\5\13\1\u010d\25\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\2\13\1\u010e\30\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\25\13\1\u010f\5\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\5\13\1\u0110\25\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\241\3\13\1\220\5\13" + - "\1\u0111\20\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\5\13" + - "\1\u0112\25\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\25\13" + - "\1\241\5\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\16\13" + - "\1\u0113\14\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\2\13" + - "\1\176\30\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\5\13" + - "\1\u0114\25\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\16\13" + - "\1\241\14\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\24\13" + - "\1\u0115\6\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\2\13" + - "\1\u0116\2\13\1\u0117\2\13\1\u0118\2\13\1\u0119\2\13" + - "\1\u011a\2\13\1\u011b\1\241\2\13\1\u011c\1\u011d\1\13" + - "\1\u011e\2\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u011f\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u0120\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\2\13" + - "\1\u0121\30\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\16\13" + - "\1\u0122\14\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\2\13" + - "\1\47\10\13\1\241\17\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\24\13\1\u0123\6\13\1\0\3\13\1\12\5\13" + - "\1\0\1\12\1\324\2\0\4\13\4\0\1\12\4\0" + - "\1\12\7\0\1\325\1\326\2\0\1\327\1\0\23\13" + - "\1\u0124\7\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u0125\7\13\1\u0126\16\13\1\0\3\13\6\233\1\u0127" + - "\1\233\1\u0128\2\u0127\4\233\4\u0127\1\233\4\u0127\1\233" + - "\15\u0127\33\233\1\u0127\3\233\40\234\1\u0129\44\234\41\235" + - "\1\u0129\43\235\44\236\1\u0129\40\236\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\241\32\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\20\13" + - "\1\u012a\12\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u012b\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u012c\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u012d\3\13\1\241\5\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\13\1\u012e\1\u0121\6\13\1\u012f\2\13\1\u0130" + - "\16\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\24\13\1\u0131" + - "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\31\13\1\u0132" + - "\1\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\1\176\32\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\13\1\u0133\31\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\31\13\1\214\1\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\24\13\1\u010d\6\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\u0134\17\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\u0135\17\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\237\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\267\17\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\13\1\u0136\31\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\176\17\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\27\13\1\u0137\3\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\11\13\1\u0138\21\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\24\13\1\u0139\6\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\21\13\1\u0122\11\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\13\1\u013a\31\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\12\13\1\u013b\20\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\5\13\1\u013c\25\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\22\13\1\u013d\10\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\u013e\1\13\1\u013f" + - "\10\13\1\u0140\10\13\1\u0141\1\u0142\5\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\16\13\1\u0143\1\13\1\241\12\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\21\13\1\u0144\11\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\25\13\1\u0137\5\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\21\13\1\u0145\3\13" + - "\1\u0146\5\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\13\13" + - "\1\u0147\17\13\1\0\3\13\40\300\1\u0148\44\300\41\301" + - "\1\u0149\43\301\44\302\1\u014a\40\302\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\11\13\1\u014b\12\13\1\u014c\6\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\174\4\13\1\u014d\14\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\12\13\1\u014e\1\13\1\u014f" + - "\6\13\1\u0150\7\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\4\13\1\u0151\6\13\1\u0152\1\u0153\4\13\1\u011f\2\13" + - "\1\u0154\6\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\5\13" + - "\1\223\25\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\241\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\5\13" + - "\1\174\15\13\1\u0155\7\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\5\13\1\u0156\25\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\15\13\1\u0157\15\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\256\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\11\13\1\174\21\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\14\13\1\u0158\10\13\1\u0159\5\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\u015a\31\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\11\13\1\176\21\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\12\13\1\u015b\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\11\13\1\310\1\u015c\6\13\1\u015d" + - "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\12\13\1\u015e" + - "\20\13\1\0\3\13\6\324\1\u015f\1\324\1\u0160\2\u015f" + - "\4\324\4\u015f\1\324\4\u015f\1\324\15\u015f\33\324\1\u015f" + - "\3\324\40\325\1\u0161\44\325\41\326\1\u0162\43\326\44\327" + - "\1\u0163\40\327\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\12\13\1\310\20\13" + - "\1\0\3\13\1\0\5\332\5\0\4\332\27\0\33\332" + - "\1\0\3\332\1\0\1\u0164\2\0\1\u0164\6\0\4\u0164" + - "\27\0\6\u0164\2\0\23\u0164\1\0\3\u0164\1\0\1\u0164" + - "\2\0\1\u0164\2\0\2\334\2\0\4\u0164\7\334\1\0" + - "\17\334\6\u0164\2\0\23\u0164\1\334\3\u0164\1\0\5\337" + - "\5\0\4\337\27\0\33\337\1\0\3\337\1\0\1\u0165" + - "\2\0\1\u0165\6\0\4\u0165\27\0\6\u0165\2\0\23\u0165" + - "\1\0\3\u0165\1\0\1\u0165\2\0\1\u0165\2\0\2\341" + - "\2\0\4\u0165\7\341\1\0\17\341\6\u0165\2\0\23\u0165" + - "\1\341\3\u0165\10\115\2\0\11\115\2\0\3\115\1\0" + - "\52\115\1\u0166\1\115\1\0\5\344\5\0\4\344\27\0" + - "\33\344\1\0\3\344\1\0\1\u0167\2\0\1\u0167\6\0" + - "\4\u0167\27\0\6\u0167\2\0\23\u0167\1\0\3\u0167\1\0" + - "\1\u0167\2\0\1\u0167\2\0\2\346\2\0\4\u0167\7\346" + - "\1\0\17\346\6\u0167\2\0\23\u0167\1\346\3\u0167\10\122" + - "\2\0\71\122\1\u0168\1\122\10\115\2\0\11\115\2\0" + - "\3\115\1\0\53\115\1\u0166\10\122\2\0\72\122\1\u0168" + - "\47\0\1\u0169\113\0\1\u016a\100\0\1\u016b\121\0\1\u016c" + - "\76\0\1\u016d\75\0\1\u016e\1\u016f\122\0\1\u0170\62\0" + - "\1\u0171\35\0\2\134\2\363\1\134\1\363\1\0\2\134" + - "\2\0\2\134\1\136\1\134\4\0\1\134\4\0\1\134" + - "\15\0\2\134\1\136\3\134\2\363\12\134\1\136\10\134" + - "\1\0\1\134\1\136\1\134\2\0\2\363\1\0\1\363" + - "\46\0\2\363\27\0\2\134\4\366\1\0\2\134\2\0" + - "\1\134\1\365\2\366\4\0\1\134\4\0\1\134\15\0" + - "\2\134\1\366\1\134\4\366\5\134\2\366\3\134\1\366" + - "\1\134\1\365\6\134\1\0\1\134\1\366\1\134\1\0" + - "\5\367\5\0\4\367\10\0\1\152\16\0\33\367\1\0" + - "\3\367\12\0\1\370\16\0\1\372\13\0\1\373\33\0" + - "\1\374\105\0\1\u0172\20\0\1\u0173\104\0\1\u0174\104\0" + - "\1\u0175\136\0\1\u0176\106\0\1\u0104\105\0\1\u0177\101\0" + - "\1\u0176\13\0\1\u0178\72\0\1\u0179\120\0\1\u017a\102\0" + - "\1\u017b\77\0\1\u0176\25\0\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\17\13" + - "\1\u017c\13\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\13\13" + - "\1\u017d\17\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u017e\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\3\13" + - "\1\241\27\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\21\13" + - "\1\u017f\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\12\13" + - "\1\u0180\20\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u015e\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\u0181\14\13\1\u0182\14\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\24\13\1\241\6\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\u0183\2\13\1\u0184\14\13\1\u0185\1\u0186\3\13" + - "\1\u0187\5\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\176\5\13\1\u0188\20\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\16\13\1\176\14\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\13\13\1\241\11\13\1\u0189\5\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\21\13\1\u018a\11\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\u0132\26\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\11\13\1\u018b\21\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\23\13\1\u018c\7\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\176\31\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\2\13\1\u018d\30\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\u018e\26\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\23\13\1\u018f\7\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\10\13\1\241\22\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\5\13\1\u013b\25\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\174\26\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\23\13\1\u0190\7\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\12\13\1\u0191\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\2\13\1\47\30\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\12\13\1\175\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\13\13\1\u010d\17\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\24\13\1\u017f\6\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\21\13\1\u0192\11\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\u0193\26\13\1\0\3\13" + - "\10\u0127\1\u0194\74\u0127\6\12\1\0\2\12\2\0\4\12" + - "\4\0\1\12\4\0\1\12\15\0\1\12\1\u0128\10\12" + - "\1\u0128\1\12\1\u0128\1\12\1\u0128\1\12\1\u0128\4\12" + - "\1\u0128\1\12\1\u0128\3\12\1\0\3\12\46\0\2\u0129" + - "\10\0\1\u0129\1\0\1\u0129\1\0\1\u0129\1\0\1\u0129" + - "\4\0\1\u0129\1\0\1\u0129\7\0\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\11\13\1\u0195\4\13\1\u0122\1\13\1\u011c\4\13\1\223" + - "\5\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\2\13\1\241" + - "\11\13\1\u0196\16\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\25\13\1\214\5\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\13\13\1\u0197\5\13\1\u0154\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\241\13\13\1\237\13\13\1\310\2\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\13\1\u0198\31\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\13\1\u011f\31\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\24\13\1\u0199\6\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\174\32\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\25\13\1\u019a\5\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\13\1\241\31\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\u019b\2\13\1\u019c\12\13" + - "\1\241\1\13\1\u019d\1\u019e\2\13\1\u019f\1\u01a0\5\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\15\13\1\241\15\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\u01a1\7\13" + - "\1\u01a2\2\13\1\241\13\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\u01a3\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\16\13\1\u0145\14\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\14\13\1\200\16\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\25\13\1\u0145\5\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\12\13\1\u01a4\20\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\5\13\1\u013a\25\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\204\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\12\13\1\u01a5\20\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\u01a6\5\13\1\u01a7\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\3\13\1\u01a8\27\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\5\13\1\u01a9\25\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\20\13\1\u01aa\12\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\17\13\1\241\13\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\13\13\1\u01ab\17\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\5\13\1\174\25\13\1\0\3\13" + - "\40\u0148\1\u01ac\44\u0148\41\u0149\1\u01ac\43\u0149\44\u014a\1\u01ac" + - "\40\u014a\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\12\13\1\u01ad\20\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\12\13\1\u01ae\20\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\17\13\1\u01af\13\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\22\13\1\174\10\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\11\13\1\u01b0\4\13\1\u0122" + - "\1\13\1\u011c\7\13\1\u01b1\2\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u01b2\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\17\13\1\u017f\13\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\u01b3\2\13\1\u0184\14\13\1\u0185\1\u0186" + - "\3\13\1\u01b4\5\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\13\1\237\14\13\1\u0122\1\13\1\u011c\12\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\4\13\1\u01b5\26\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\2\13\1\u01b6\30\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\24\13\1\u01b7\6\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\25\13\1\u01b8\5\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\24\13\1\u01b9\6\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\13\1\u0181\7\13\1\u01b0" + - "\1\13\1\u01ba\2\13\1\u01bb\6\13\1\u01bc\2\13\1\u01b1" + - "\2\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\u01bd" + - "\17\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\24\13\1\u01be" + - "\6\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\u01bf" + - "\17\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\u01c0" + - "\17\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\200" + - "\17\13\1\0\3\13\10\u015f\1\u01c1\74\u015f\6\u0160\1\u01c1" + - "\1\u0160\1\u01c2\2\u01c1\4\u0160\4\u01c1\1\u0160\4\u01c1\1\u0160" + - "\15\u01c1\33\u0160\1\u01c1\3\u0160\40\u0161\1\u01c3\44\u0161\41\u0162" + - "\1\u01c3\43\u0162\44\u0163\1\u01c3\40\u0163\1\0\5\u0164\5\0" + - "\4\u0164\10\0\1\334\16\0\33\u0164\1\0\3\u0164\1\0" + - "\5\u0165\5\0\4\u0165\10\0\1\341\16\0\33\u0165\1\0" + - "\3\u0165\1\0\5\u0167\5\0\4\u0167\10\0\1\346\16\0" + - "\33\u0167\1\0\3\u0167\50\0\1\u01c4\106\0\1\u0171\105\0" + - "\1\u01c5\101\0\1\u01c4\13\0\1\u01c6\72\0\1\u01c7\120\0" + - "\1\u01c8\102\0\1\u01c9\101\0\1\u01ca\102\0\1\u01c4\130\0" + - "\1\u01cb\1\u01cc\102\0\1\u01cd\104\0\1\u01ce\104\0\1\u01cf" + - "\52\0\1\u01d0\103\0\1\u01d1\117\0\1\u0176\102\0\1\u01d2" + - "\111\0\1\u0176\17\0\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\5\13\1\u01d3" + - "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\1\13\1\u01d4" + - "\31\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\u01d5" + - "\17\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\21\13\1\u01d6" + - "\11\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\1\u01ab\32\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\24\13\1\u01d7\6\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\11\13\1\u01d8\16\13" + - "\1\u01d9\2\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\13" + - "\1\u01da\31\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\11\13" + - "\1\u01d9\21\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u01db\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u01dc\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\22\13" + - "\1\176\10\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\13\13" + - "\1\214\17\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\7\13" + - "\1\241\23\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\14\13" + - "\1\241\16\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\214\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\1\u01dd" + - "\1\13\1\u0121\21\13\1\u01de\6\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\u01df\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\310\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\12\13\1\u01e0\20\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\u01e1\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\16\13\1\u01e2\14\13\1\0\3\13\47\0" + - "\1\u0194\10\0\1\u0194\1\0\1\u0194\1\0\1\u0194\1\0" + - "\1\u0194\4\0\1\u0194\1\0\1\u0194\7\0\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\16\13\1\u011a\14\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\13\1\u01e3\31\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\12\13\1\u01e4\20\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\13\1\174\31\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\175\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\4\13\1\u017f\26\13\1\0\3\13\1\12\5\13" + - "\1\0\2\12\2\0\4\13\4\0\1\12\4\0\1\12" + - "\15\0\1\u01e5\3\13\1\u01e6\4\13\1\u01e7\6\13\1\u01e8" + - "\7\13\1\u01e9\2\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\13\1\u01ea\31\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\11\13\1\u01eb\21\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\4\13\1\u01ec\26\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\13\1\u01ed\31\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\13\1\u01ee\2\13\1\u01ef\26\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\5\13\1\u01f0\25\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\24\13\1\u01f1\6\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\u0134\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\u01f2\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\241\17\13\1\176\6\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\25\13\1\u01f3\5\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\21\13\1\u0145\11\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\12\13\1\u014e\20\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\24\13\1\u01f4\6\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\13\13\1\u0108\17\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\4\13\1\310\26\13\1\0" + - "\3\13\46\0\2\u01ac\2\0\1\u01ac\5\0\1\u01ac\1\0" + - "\1\u01ac\1\0\1\u01ac\1\0\1\u01ac\4\0\1\u01ac\1\0" + - "\1\u01ac\7\0\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\21\13\1\u01f5\11\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\241\2\13" + - "\1\200\14\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u01f6\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\4\13" + - "\1\u01f7\26\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\11\13" + - "\1\323\21\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\2\13" + - "\1\u01f8\30\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\11\13" + - "\1\u01f9\6\13\1\u01e8\7\13\1\u01d9\2\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\u01fa\2\13\1\u01dc\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\16\13\1\174\14\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\31\13\1\241\1\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\5\13\1\175\25\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\13\13\1\175\17\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\12\13\1\u01a7\20\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\u018b\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\5\13\1\253\25\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\u01fb\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\u01fc\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\176\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\1\u01e5\32\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\5\13\1\u01fd\25\13\1\0" + - "\3\13\10\u01c1\1\u01c3\74\u01c1\6\12\1\0\2\12\2\0" + - "\4\12\4\0\1\12\4\0\1\12\15\0\2\12\1\u01c2" + - "\13\12\1\u01c2\6\12\1\u01c2\5\12\1\0\3\12\50\0" + - "\1\u01c3\13\0\1\u01c3\6\0\1\u01c3\61\0\1\u01fe\103\0" + - "\1\u01ff\117\0\1\u01c4\102\0\1\u0200\111\0\1\u01c4\122\0" + - "\1\u0201\1\u0202\103\0\1\u0203\1\u0204\103\0\1\u0205\1\u0206" + - "\54\0\2\u0176\77\0\1\u0207\123\0\1\u0176\15\0\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\20\13\1\200\12\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u0208\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\u011f\26\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u01df\31\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u0209\31\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\u020a\26\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\25\13\1\u01db\5\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u01d9\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\u020b\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\12\13\1\170\20\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\12\13\1\u020c\20\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\25\13\1\200\5\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\200\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\2\13\1\225\30\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\5\13\1\u015e\25\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\2\13\1\200\30\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\u020d\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\12\13\1\u011f\20\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\u020e\26\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u020f\10\13\1\u0210\20\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\11\13\1\237\21\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\4\13\1\u020a\14\13\1\u0211" + - "\1\13\1\u01e5\7\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\25\13\1\u01ec\5\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\4\13\1\u020a\13\13\1\u01e5\1\u0211\11\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\13\13\1\u0212\17\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\20\13\1\330\12\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\16\13\1\u0213\14\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\11\13\1\u0214\21\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\16\13\1\u0215\14\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\12\13\1\u0216\20\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\25\13\1\174\5\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\25\13\1\176\5\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\13\13\1\204\17\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\13\13\1\u0217\17\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\5\13\1\u011f\25\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\u0218\31\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\u0209\10\13\1\u0210\20\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\16\13\1\u0219\14\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\4\13\1\u0145\26\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\14\13\1\u021a\16\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\11\13\1\u021b\21\13" + - "\1\0\3\13\54\0\2\u01c4\77\0\1\u021c\123\0\1\u01c4" + - "\46\0\1\u01cb\104\0\1\u01cc\120\0\1\u021d\104\0\1\u021e" + - "\140\0\1\u01cb\104\0\1\u01cc\63\0\1\u021f\24\0\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\31\13\1\170\1\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u0220\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\174\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\10\13\1\u01d9\22\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\u0221\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\23\13\1\u01be\7\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\u0222\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u0223\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u0224\31\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\5\13\1\u018b\25\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\4\13\1\u020a\10\13\1\u0225\15\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\17\13\1\u0226\13\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\10\13\1\u0227\22\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\3\13\1\176\27\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\21\13\1\200\11\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\1\u0228\32\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\30\13\1\310\2\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\17\13\1\u0229\13\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\u022a\26\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\11\13\1\u022b\21\13\1\0\3\13" + - "\60\0\1\u022c\113\0\1\u022d\15\0\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\1\13\1\u01d9\31\13\1\0\3\13\1\12\5\13\1\0" + - "\2\12\2\0\4\13\4\0\1\12\4\0\1\12\15\0" + - "\4\13\1\241\12\13\1\241\13\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\21\13\1\u011b\11\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u022e\31\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\11\13\1\u022f\21\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\31\13\1\u0230\1\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\13\1\u0132\17\13\1\u011b\11\13\1\0" + - "\3\13\1\12\5\13\1\0\2\12\2\0\4\13\4\0" + - "\1\12\4\0\1\12\15\0\4\13\1\u020a\10\13\1\u0231" + - "\15\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\5\13\1\u0121" + - "\25\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\1\13\1\u0132" + - "\31\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\13\13\1\u0232" + - "\17\13\1\0\3\13\1\12\5\13\1\0\2\12\2\0" + - "\4\13\4\0\1\12\4\0\1\12\15\0\5\13\1\u01b6" + - "\25\13\1\0\3\13\67\0\1\u0233\103\0\1\u0176\16\0" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\4\13\1\u020a\10\13\1\u0234\15\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\12\13\1\u0235\20\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\5\13\1\u0236\13\13" + - "\1\u011b\11\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\31\13" + - "\1\u0237\1\13\1\0\3\13\1\12\5\13\1\0\2\12" + - "\2\0\4\13\4\0\1\12\4\0\1\12\15\0\5\13" + - "\1\241\25\13\1\0\3\13\66\0\1\u01c4\16\0\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\31\13\1\u0238\1\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\13\13\1\u01b6\17\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\2\13\1\u0239\30\13\1\0\3\13\1\12" + - "\5\13\1\0\2\12\2\0\4\13\4\0\1\12\4\0" + - "\1\12\15\0\1\u023a\20\13\1\u011b\11\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\21\13\1\u023b\11\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\2\13\1\175\30\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\1\13\1\315\31\13\1\0\3\13" + - "\1\12\5\13\1\0\2\12\2\0\4\13\4\0\1\12" + - "\4\0\1\12\15\0\5\13\1\u013b\15\13\1\u023c\7\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\14\13\1\u023d\16\13" + - "\1\0\3\13\1\12\5\13\1\0\2\12\2\0\4\13" + - "\4\0\1\12\4\0\1\12\15\0\15\13\1\u0199\15\13" + - "\1\0\3\13"; - - private static int[] zzUnpackTrans() { - int[] result = new int[36363]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; + + /** + * Token type specific to PerlTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; + + /** + * Token type specific to PerlTokenMaker; this signals we are in a POD + * block. + */ + public static final int INTERNAL_POD = -5; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PerlTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * {@inheritDoc} + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return super.getMarkOccurrencesOfTokenType(type) || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_POD: + state = POD; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether a regular expression token can follow the specified + * token. + * + * @param t The token to check, which may be null. + * @return Whether a regular expression token may follow this one. + */ + private static final boolean regexCanFollow(Token t) { + char ch; + // We basically try to mimic Eclipse's JS editor's behavior here. + return t==null || + //t.isOperator() || + (t.length()==1 && ( + (ch=t.charAt(0))=='=' || + ch=='(' || + ch==',' || + ch=='?' || + ch==':' || + ch=='[' || + ch=='!' || + ch=='&' + )) || + /* Operators "==", "===", "!=", "!==", etc. */ + (t.getType()==Token.OPERATOR && + ((ch=t.charAt(t.length()-1))=='=' || ch=='~')); + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PerlTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PerlTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 174) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\11\0\4\1\1\11\1\1\1\11\3\1\2\11\4\1" + - "\1\11\6\1\1\11\1\1\1\11\31\1\1\11\2\1" + - "\1\11\2\1\1\11\2\1\2\11\1\1\1\11\2\1" + - "\1\11\1\1\1\11\4\1\1\11\1\1\1\11\1\1" + - "\1\11\2\1\1\11\14\1\1\0\2\1\1\11\11\0" + - "\50\1\3\0\41\1\3\0\22\1\3\0\1\1\1\11" + - "\1\1\1\0\1\11\1\0\1\11\1\1\1\0\1\11" + - "\1\0\2\1\1\0\1\11\1\0\3\1\10\0\1\1" + - "\1\0\2\1\16\0\42\1\1\0\40\1\3\0\24\1" + - "\1\0\1\1\5\0\1\1\1\0\1\1\15\0\1\11" + - "\5\0\105\1\1\0\2\1\1\11\5\0\3\11\6\0" + - "\53\1\12\0\24\1\1\0\2\11\1\0\14\1\2\0" + - "\5\1\1\0\12\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[573]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + throw new Error(message); + } - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - /** the textposition at the last accepting state */ - private int zzMarkedPos; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** the current text position in the buffer */ - private int zzCurrentPos; + zzMarkedPos -= number; + } - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /* user code: */ + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Token type specific to PerlTokenMaker; this signals that we are inside an unquoted/double quoted/backtick EOF - * heredoc. - */ - public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Token type specific to PerlTokenMaker; this signals that we are inside an single quoted EOF heredoc. - */ - public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + zzAction = -1; - /** - * Token type specific to PerlTokenMaker; this signals that we are inside an unquoted/double quoted/backtick EOT - * heredoc. - */ - public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -3; + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Token type specific to PerlTokenMaker; this signals that we are inside an single quoted EOT heredoc. - */ - public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -4; - - /** - * Token type specific to PerlTokenMaker; this signals we are in a POD block. - */ - public static final int INTERNAL_POD = -5; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public PerlTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + zzState = zzLexicalState; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "#", null }; - } - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return type == Token.IDENTIFIER || type == Token.VARIABLE; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR_LITERAL; - start = text.offset; - break; - case Token.LITERAL_BACKQUOTE: - state = BACKTICKS; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOF_UNQUOTED: - state = HEREDOC_EOF_UNQUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: - state = HEREDOC_EOF_SINGLE_QUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOT_UNQUOTED: - state = HEREDOC_EOT_UNQUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: - state = HEREDOC_EOT_SINGLE_QUOTED; - start = text.offset; - break; - case INTERNAL_POD: - state = POD; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public PerlTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public PerlTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 174) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 2: { - addToken(Token.IDENTIFIER); - } - case 44: - break; - case 34: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 45: - break; - case 39: { - if (start == zzStartRead) { - addToken(Token.COMMENT_DOCUMENTATION); - yybegin(YYINITIAL); - } - } - case 46: - break; - case 26: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 47: - break; - case 11: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 48: - break; - case 36: { - if (start == zzStartRead) { - addToken(Token.PREPROCESSOR); - addNullToken(); - return firstToken; - } - } - case 49: - break; - case 32: { - addToken(Token.FUNCTION); - } - case 50: - break; - case 30: { - addToken(Token.VARIABLE); - } - case 51: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 52: - break; - case 24: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); - return firstToken; + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 53: - break; - case 4: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 54: - break; - case 29: { - addToken(Token.PREPROCESSOR); - addNullToken(); - return firstToken; - } - case 55: - break; - case 38: { - if (start == zzStartRead) { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - } - case 56: - break; - case 42: { - start = zzStartRead; - yybegin(HEREDOC_EOF_SINGLE_QUOTED); - } - case 57: - break; - case 43: { - start = zzStartRead; - yybegin(HEREDOC_EOT_SINGLE_QUOTED); - } - case 58: - break; - case 40: { - start = zzStartRead; - yybegin(HEREDOC_EOF_UNQUOTED); - } - case 59: - break; - case 13: { /* Skip escaped chars. */ - } - case 60: - break; - case 18: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 61: - break; - case 28: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 62: - break; - case 21: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); - return firstToken; - } - case 63: - break; - case 6: { - addToken(Token.WHITESPACE); - } - case 64: - break; - case 10: { - start = zzMarkedPos - 1; - yybegin(CHAR_LITERAL); - } - case 65: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 66: - break; - case 33: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 67: - break; - case 20: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_BACKQUOTE); - } - case 68: - break; - case 15: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 69: - break; - case 16: { /* Skip escaped single quotes only, but this should still work. */ - } - case 70: - break; - case 23: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); - return firstToken; - } - case 71: - break; - case 35: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 72: - break; - case 37: { - addToken(Token.COMMENT_EOL); - start = zzMarkedPos; - yybegin(POD); - } - case 73: - break; - case 31: { - addToken(Token.RESERVED_WORD); - } - case 74: - break; - case 19: { - addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); - return firstToken; - } - case 75: - break; - case 8: { - addToken(Token.SEPARATOR); - } - case 76: - break; - case 5: { - addNullToken(); - return firstToken; - } - case 77: - break; - case 7: { - addToken(Token.OPERATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 2: + { addToken(Token.IDENTIFIER); + } + case 46: break; + case 34: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 47: break; + case 40: + { if (start==zzStartRead) { addToken(Token.COMMENT_DOCUMENTATION); yybegin(YYINITIAL); } + } + case 48: break; + case 26: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 49: break; + case 11: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 50: break; + case 38: + { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } + } + case 51: break; + case 31: + { addToken(Token.FUNCTION); + } + case 52: break; + case 36: + { boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (regexCanFollow(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + case 53: break; + case 30: + { addToken(Token.VARIABLE); + } + case 54: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 55: break; + case 24: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 56: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 57: break; + case 29: + { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; + } + case 58: break; + case 41: + { if (start==zzStartRead) { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + } + case 59: break; + case 44: + { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); + } + case 60: break; + case 45: + { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); + } + case 61: break; + case 42: + { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); + } + case 62: break; + case 13: + { /* Skip escaped chars. */ + } + case 63: break; + case 37: + { addToken(Token.REGEX); + } + case 64: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 65: break; + case 28: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 66: break; + case 21: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 67: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 68: break; + case 10: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 69: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 70: break; + case 33: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 71: break; + case 20: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 72: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 73: break; + case 16: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 74: break; + case 23: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 75: break; + case 35: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.PREPROCESSOR); addToken(temp,zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 76: break; + case 39: + { addToken(Token.COMMENT_EOL); start = zzMarkedPos; yybegin(POD); + } + case 77: break; + case 32: + { addToken(Token.RESERVED_WORD); + } + case 78: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 79: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 80: break; + case 5: + { addNullToken(); return firstToken; + } + case 81: break; + case 7: + { addToken(Token.OPERATOR); + } + case 82: break; + case 17: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 83: break; + case 25: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; + } + case 84: break; + case 27: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 85: break; + case 43: + { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); + } + case 86: break; + case 9: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 87: break; + case 12: + { + } + case 88: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 89: break; + case 22: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 90: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case HEREDOC_EOF_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } - case 78: - break; - case 17: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; + case 602: break; + case HEREDOC_EOT_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } - case 79: - break; - case 25: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addEndToken(INTERNAL_POD); - return firstToken; + case 603: break; + case HEREDOC_EOT_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } - case 80: - break; - case 27: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 604: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 81: - break; - case 41: { - start = zzStartRead; - yybegin(HEREDOC_EOT_UNQUOTED); + case 605: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } - case 82: - break; - case 9: { - start = zzMarkedPos - 1; - yybegin(BACKTICKS); + case 606: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 83: - break; - case 12: { + case 607: break; + case HEREDOC_EOF_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } - case 84: - break; - case 14: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; + case 608: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 85: - break; - case 22: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); - return firstToken; + case 609: break; + case POD: { + addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_POD); return firstToken; } - case 86: - break; + case 610: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case HEREDOC_EOF_SINGLE_QUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); - return firstToken; - } - case 574: - break; - case HEREDOC_EOT_SINGLE_QUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); - return firstToken; - } - case 575: - break; - case HEREDOC_EOT_UNQUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); - return firstToken; - } - case 576: - break; - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 577: - break; - case BACKTICKS: { - addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); - return firstToken; - } - case 578: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 579: - break; - case HEREDOC_EOF_UNQUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); - return firstToken; - } - case 580: - break; - case CHAR_LITERAL: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 581: - break; - case POD: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - addEndToken(INTERNAL_POD); - return firstToken; - } - case 582: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex old mode 100644 new mode 100755 index f898d5835..8b398f42d --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.flex @@ -2,23 +2,9 @@ * 11/07/2008 * * PlainTextTokenMaker.flex - Scanner for plain text files. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -120,7 +106,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return null, as there are no comments in plain text. */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return null; } @@ -163,7 +150,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -176,7 +163,7 @@ import org.fife.ui.rsyntaxtextarea.*; * false. * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -191,7 +178,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -221,7 +208,7 @@ LineTerminator = ([\n]) URLGenDelim = ([:\/\?#\[\]@]) URLSubDelim = ([\!\$&'\(\)\*\+,;=]) -URLUnreserved = ([a-zA-Z0-9\-\.\~]) +URLUnreserved = ({LetterOrDigit}|[_\-\.\~]) URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) URLCharacters = ({URLCharacter}*) URLEndCharacter = ([\/\$]|{LetterOrDigit}) diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java old mode 100644 new mode 100755 index 13d86c9a4..b2a9a5f34 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PlainTextTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 1/20/09 10:04 AM */ +/* The following code was generated by JFlex 1.4.1 on 12/9/11 6:40 PM */ /* * 11/07/2008 * * PlainTextTokenMaker.flex - Scanner for plain text files. - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,611 +15,634 @@ import org.fife.ui.rsyntaxtextarea.*; + /** * Scanner for plain text files. - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker), so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                          - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                          - * + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker), so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                          + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                          + * * If you wish to regenerate this file yourself, keep in mind the following: *

                            - *
                          • The generated PlainTextTokenMaker.java file will contain two definitions of both - * zzRefill and yyreset. You should hand-delete the second of each definition (the ones - * generated by the lexer), as these generated methods modify the input buffer, which we'll never have to do.
                          • - *
                          • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                          • - *
                          • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                          • + *
                          • The generated PlainTextTokenMaker.java file will contain + * two definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                          • + *
                          • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                          • + *
                          • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                          • *
                          - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class PlainTextTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int YYINITIAL = 0; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\1\6\1\4" + - "\7\4\1\4\1\21\1\5\12\1\1\17\1\4\1\0\1\4\1\0" + - "\2\4\32\1\1\4\1\0\1\4\3\0\4\1\1\16\1\13\1\1" + - "\1\7\1\14\2\1\1\15\3\1\1\11\2\1\1\12\1\10\2\1" + - "\1\20\3\1\3\0\1\4\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\0\2\1\1\2\1\3\14\1\1\0\1\4\2\0"; - - private static int[] zzUnpackAction() { - int[] result = new int[21]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\1\6\1\4"+ + "\7\4\1\4\1\21\1\5\12\1\1\17\1\4\1\0\1\4\1\0"+ + "\2\4\32\1\1\4\1\0\1\4\1\0\1\4\1\0\4\1\1\16"+ + "\1\13\1\1\1\7\1\14\2\1\1\15\3\1\1\11\2\1\1\12"+ + "\1\10\2\1\1\20\3\1\3\0\1\4\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\2\1\1\2\1\3\14\1\1\0\1\4\2\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[21]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\22\0\44\0\22\0\66\0\110\0\132\0\154"+ + "\0\176\0\220\0\242\0\264\0\306\0\330\0\352\0\374"+ + "\0\u010e\0\u0120\0\u0132\0\u0144\0\u0132"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[21]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\22\0\44\0\22\0\66\0\110\0\132\0\154" + - "\0\176\0\220\0\242\0\264\0\306\0\330\0\352\0\374" + - "\0\u010e\0\u0120\0\u0132\0\u0144\0\u0132"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[21]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\5\3\2\1\6\3\3\1\7"+ + "\3\3\1\2\1\10\1\2\23\0\1\3\5\0\10\3"+ + "\1\0\1\3\4\0\1\5\17\0\1\3\5\0\1\3"+ + "\1\11\6\3\1\0\1\3\2\0\1\3\5\0\1\3"+ + "\1\12\3\3\1\13\2\3\1\0\1\3\2\0\1\3"+ + "\5\0\10\3\1\0\1\14\2\0\1\3\5\0\1\3"+ + "\1\15\6\3\1\0\1\3\2\0\1\3\5\0\2\3"+ + "\1\16\5\3\1\0\1\3\2\0\1\3\5\0\6\3"+ + "\1\17\1\3\1\0\1\3\2\0\1\3\5\0\10\3"+ + "\1\0\1\20\2\0\1\3\5\0\2\3\1\21\5\3"+ + "\1\0\1\3\2\0\1\3\5\0\10\3\1\22\1\3"+ + "\2\0\1\3\5\0\7\3\1\16\1\0\1\3\2\0"+ + "\1\3\5\0\10\3\1\0\1\3\1\23\1\0\1\3"+ + "\5\0\3\3\1\16\4\3\1\22\1\3\6\0\1\24"+ + "\15\0\1\23\2\0\1\25\12\23\1\25\1\23\1\25"+ + "\5\0\1\23\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[342]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\1\11\1\1\1\11\15\1\1\0\1\1\2\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[21]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\4\1\5\3\2\1\6\3\3\1\7" + - "\3\3\1\2\1\10\1\2\23\0\1\3\5\0\10\3" + - "\1\0\1\3\4\0\1\5\17\0\1\3\5\0\1\3" + - "\1\11\6\3\1\0\1\3\2\0\1\3\5\0\1\3" + - "\1\12\3\3\1\13\2\3\1\0\1\3\2\0\1\3" + - "\5\0\10\3\1\0\1\14\2\0\1\3\5\0\1\3" + - "\1\15\6\3\1\0\1\3\2\0\1\3\5\0\2\3" + - "\1\16\5\3\1\0\1\3\2\0\1\3\5\0\6\3" + - "\1\17\1\3\1\0\1\3\2\0\1\3\5\0\10\3" + - "\1\0\1\20\2\0\1\3\5\0\2\3\1\21\5\3" + - "\1\0\1\3\2\0\1\3\5\0\10\3\1\22\1\3" + - "\2\0\1\3\5\0\7\3\1\16\1\0\1\3\2\0" + - "\1\3\5\0\10\3\1\0\1\3\1\23\1\0\1\3" + - "\5\0\3\3\1\16\4\3\1\22\1\3\6\0\1\24" + - "\15\0\1\23\2\0\1\25\12\23\1\25\1\23\1\25" + - "\5\0\1\23\14\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[342]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PlainTextTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @param link Whether this token is a hyperlink. + */ + private void addToken(int tokenType, boolean link) { + int so = zzStartRead + offsetShift; + super.addToken(zzBuffer, zzStartRead,zzMarkedPos-1, tokenType, so, link); + zzStartRead = zzMarkedPos; + } + + + /** + * Always returns Token.NULL, as there are no multiline + * tokens in properties files. + * + * @param text The line of tokens to examine. + * @param initialTokenType The token type to start with (i.e., the value + * of getLastTokenTypeOnLine for the line before + * text). + * @return Token.NULL. + */ + @Override + public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { + return Token.NULL; + } + + + /** + * Returns the text to place at the beginning and end of a + * line to "comment" it in a this programming language. + * + * @return null, as there are no comments in plain text. + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return null; + } + + + /** + * Always returns false, as you never want "mark occurrences" + * working in plain text files. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return false; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + s = text; + try { + yyreset(zzReader); + yybegin(YYINITIAL); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PlainTextTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PlainTextTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 94) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\11\1\1\1\11\15\1\1\0\1\1\2\0"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[21]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } + throw new Error(message); + } - /** the input device */ - private java.io.Reader zzReader; - /** the current state of the DFA */ - private int zzState; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + zzMarkedPos -= number; + } - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - /** the textposition at the last accepting state */ - private int zzMarkedPos; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** the current text position in the buffer */ - private int zzCurrentPos; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + while (true) { + zzMarkedPosL = zzMarkedPos; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + zzAction = -1; - /* user code: */ + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public PlainTextTokenMaker() { - } + zzState = zzLexicalState; - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @param link - * Whether this token is a hyperlink. - */ - private void addToken(int tokenType, boolean link) { - int so = zzStartRead + offsetShift; - super.addToken(zzBuffer, zzStartRead, zzMarkedPos - 1, tokenType, so, link); - zzStartRead = zzMarkedPos; - } - - /** - * Always returns Token.NULL, as there are no multiline tokens in properties files. - * - * @param text - * The line of tokens to examine. - * @param initialTokenType - * The token type to start with (i.e., the value of getLastTokenTypeOnLine for the line - * before text). - * @return Token.NULL. - */ - public int getLastTokenTypeOnLine(Segment text, int initialTokenType) { - return Token.NULL; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return null, as there are no comments in plain text. - */ - public String[] getLineCommentStartAndEnd() { - return null; - } - - /** - * Always returns false, as you never want "mark occurrences" working in plain text files. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return false; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - s = text; - try { - yyreset(zzReader); - yybegin(YYINITIAL); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public PlainTextTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public PlainTextTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 90) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 3: { - addToken(Token.WHITESPACE, false); - } - case 5: - break; - case 2: { - addNullToken(); - return firstToken; + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 6: - break; - case 4: { - addToken(Token.IDENTIFIER, true); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 7: - break; - case 1: { - addToken(Token.IDENTIFIER, false); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 3: + { addToken(Token.WHITESPACE, false); + } + case 5: break; + case 2: + { addNullToken(); return firstToken; + } + case 6: break; + case 4: + { addToken(Token.IDENTIFIER, true); + } + case 7: break; + case 1: + { addToken(Token.IDENTIFIER, false); + } + case 8: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; } - case 8: - break; + case 22: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 22: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex old mode 100644 new mode 100755 index 1169d29ca..5a4bcf4df --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.flex @@ -2,23 +2,9 @@ * 03/21/2005 * * PropertiesFileTokenMaker.java - Scanner for properties files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -71,7 +57,6 @@ import org.fife.ui.rsyntaxtextarea.*; %public %class PropertiesFileTokenMaker %extends AbstractJFlexTokenMaker -%implements TokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -119,6 +104,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -126,13 +112,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } @@ -172,7 +155,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java old mode 100644 new mode 100755 index b0fad5f31..38eb70bfa --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PropertiesFileTokenMaker.java @@ -4,23 +4,9 @@ * 03/21/2005 * * PropertiesFileTokenMaker.java - Scanner for properties files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,646 +15,647 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * This class splits up text into tokens representing a Java properties file. - *

                          - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                          - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                          - * + * This class splits up text into tokens representing a Java properties file.

                          + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                          + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                          + * * If you wish to regenerate this file yourself, keep in mind the following: *

                            - *
                          • The generated PropertiesFileTokenMaker.java file will contain two definitions of both - * zzRefill and yyreset. You should hand-delete the second of each definition (the ones - * generated by the lexer), as these generated methods modify the input buffer, which we'll never have to do. - *
                          • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway. - *
                          • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance. + *
                          • The generated PropertiesFileTokenMaker.java file will + * contain two definitions of both zzRefill and + * yyreset. You should hand-delete the second of each + * definition (the ones generated by the lexer), as these generated + * methods modify the input buffer, which we'll never have to do. + *
                          • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway. + *
                          • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance. *
                          - * + * * @author Robert Futrell * @version 0.4 - * + * */ -public class PropertiesFileTokenMaker extends AbstractJFlexTokenMaker implements TokenMaker { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int VALUE = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\3\0\1\5" + - "\22\0\1\1\2\0\1\1\36\0\1\6\36\0\1\7\1\0\1\10" + - "\uff82\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\1\1\0\1\1\1\2\1\3\1\4\1\5\1\6" + - "\1\7\1\10\1\6\1\5\1\10"; - - private static int[] zzUnpackAction() { - int[] result = new int[13]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\11\0\22\0\33\0\44\0\55\0\66\0\77" + - "\0\110\0\121\0\33\0\33\0\33"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[13]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\3\1\4\1\0\1\5\1\6\4\3\5\7\1\10" + - "\1\11\1\12\1\7\1\3\4\0\4\3\14\0\1\5" + - "\5\0\2\6\1\0\6\6\5\7\3\0\1\7\5\10" + - "\1\13\3\10\2\14\1\0\6\14\10\12\1\15"; - - private static int[] zzUnpackTrans() { - int[] result = new int[90]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\1\1\0\1\1\1\11\6\1\3\11"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[13]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public PropertiesFileTokenMaker() { - super(); +public class PropertiesFileTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int VALUE = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\2\25\0\1\3\1\4\1\0\1\4\3\0\1\5"+ + "\22\0\1\1\2\0\1\1\36\0\1\6\36\0\1\7\1\0\1\10"+ + "\uff82\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\1\1\0\1\1\1\2\1\3\1\4\1\5\1\6"+ + "\1\7\1\10\1\6\1\5\1\10"; + + private static int [] zzUnpackAction() { + int [] result = new int[13]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\11\0\22\0\33\0\44\0\55\0\66\0\77"+ + "\0\110\0\121\0\33\0\33\0\33"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[13]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\3\1\4\1\0\1\5\1\6\4\3\5\7\1\10"+ + "\1\11\1\12\1\7\1\3\4\0\4\3\14\0\1\5"+ + "\5\0\2\6\1\0\6\6\5\7\3\0\1\7\5\10"+ + "\1\13\3\10\2\14\1\0\6\14\10\12\1\15"; + + private static int [] zzUnpackTrans() { + int [] result = new int[90]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\1\1\0\1\1\1\11\6\1\3\11"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[13]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "#", null }; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PropertiesFileTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = VALUE; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + * @exception IOException if any I/O-Error occurs. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PropertiesFileTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PropertiesFileTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 42) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = VALUE; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + throw new Error(message); + } - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public PropertiesFileTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public PropertiesFileTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 42) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + zzMarkedPos -= number; + } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) - zzReader.close(); - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 7: { - addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 9: - break; - case 2: { - start = zzMarkedPos; - addToken(Token.OPERATOR); - yybegin(VALUE); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 10: - break; - case 8: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addToken(temp, zzMarkedPos - 1, Token.VARIABLE); - start = zzMarkedPos; - } - case 11: - break; - case 3: { - addToken(Token.WHITESPACE); - } - case 12: - break; - case 6: { - addToken(start, zzMarkedPos - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - start = zzMarkedPos; - } - case 13: - break; - case 1: { - addToken(Token.RESERVED_WORD); - } - case 14: - break; - case 5: { + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 7: + { addToken(start, zzEndRead, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 9: break; + case 2: + { start = zzMarkedPos; addToken(Token.OPERATOR); yybegin(VALUE); + } + case 10: break; + case 8: + { int temp=zzStartRead; addToken(start, zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addToken(temp, zzMarkedPos-1, Token.VARIABLE); start = zzMarkedPos; + } + case 11: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 12: break; + case 6: + { addToken(start, zzMarkedPos-1, Token.LITERAL_STRING_DOUBLE_QUOTE); start = zzMarkedPos; + } + case 13: break; + case 1: + { addToken(Token.RESERVED_WORD); + } + case 14: break; + case 5: + { + } + case 15: break; + case 4: + { addToken(Token.COMMENT_EOL); + } + case 16: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; } - case 15: - break; - case 4: { - addToken(Token.COMMENT_EOL); + case 14: break; + case VALUE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addNullToken(); return firstToken; } - case 16: - break; + case 15: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 14: - break; - case VALUE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addNullToken(); - return firstToken; - } - case 15: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex old mode 100644 new mode 100755 index b4821a3d2..d8602681f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.flex @@ -2,23 +2,9 @@ * 12/06/2005 * * PythonTokenMaker.java - Token maker for the Python programming language. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -26,7 +12,6 @@ import java.io.*; import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; -import org.fife.ui.rsyntaxtextarea.DefaultToken; import org.fife.ui.rsyntaxtextarea.Token; import org.fife.ui.rsyntaxtextarea.TokenMaker; @@ -42,7 +27,6 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; %public %class PythonTokenMaker %extends AbstractJFlexTokenMaker -%implements TokenMaker %unicode %type org.fife.ui.rsyntaxtextarea.Token @@ -90,6 +74,7 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -97,13 +82,10 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } @@ -145,7 +127,7 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -161,7 +143,7 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -186,9 +168,8 @@ import org.fife.ui.rsyntaxtextarea.TokenMaker; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java old mode 100644 new mode 100755 index 633507627..aa7dfaf1e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/PythonTokenMaker.java @@ -4,23 +4,9 @@ * 12/06/2005 * * PythonTokenMaker.java - Token maker for the Python programming language. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -28,1092 +14,1075 @@ import javax.swing.text.Segment; import org.fife.ui.rsyntaxtextarea.AbstractJFlexTokenMaker; -import org.fife.ui.rsyntaxtextarea.DefaultToken; import org.fife.ui.rsyntaxtextarea.Token; -import org.fife.ui.rsyntaxtextarea.TokenMaker; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** * Scanner for the Python programming language. - * + * * @author Robert Futrell * @version 0.3 */ -public class PythonTokenMaker extends AbstractJFlexTokenMaker implements TokenMaker { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int YYINITIAL = 0; - public static final int LONG_STRING_2 = 2; - public static final int LONG_STRING_1 = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\34\1\12\1\0\1\34\1\32\22\0\1\34\1\64\1\11" + - "\1\33\1\0\1\63\1\67\1\10\1\57\1\57\1\62\1\61\1\64" + - "\1\27\1\24\1\63\1\16\7\21\2\3\1\64\1\72\1\65\1\60" + - "\1\66\1\64\1\71\4\23\1\26\1\23\3\2\1\31\1\2\1\15" + - "\5\2\1\6\2\2\1\7\2\2\1\20\2\2\1\57\1\13\1\57" + - "\1\64\1\1\1\0\1\35\1\42\1\44\1\37\1\25\1\22\1\52" + - "\1\54\1\46\1\30\1\43\1\14\1\51\1\36\1\45\1\47\1\2" + - "\1\4\1\40\1\41\1\5\1\55\1\53\1\17\1\50\1\56\1\57" + - "\1\70\1\57\1\64\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\1\1\1\2\1\3\4\2\2\4\1\5\1\2" + - "\1\3\2\2\1\6\1\2\1\6\1\7\1\10\21\2" + - "\1\11\10\6\1\2\2\12\2\4\1\13\1\3\1\14" + - "\1\13\1\14\4\2\2\4\1\0\2\4\1\0\4\2" + - "\1\13\1\3\1\13\12\2\1\15\27\2\1\15\3\2" + - "\2\15\1\16\1\15\15\2\3\0\2\14\1\0\12\2" + - "\1\4\1\17\1\20\3\2\1\3\15\2\1\15\22\2" + - "\1\21\14\2\1\22\1\23\1\14\6\2\1\21\3\2" + - "\1\15\36\2\1\15\17\2\1\15\6\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[265]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; +public class PythonTokenMaker extends AbstractJFlexTokenMaker { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int LONG_STRING_2 = 2; + public static final int LONG_STRING_1 = 1; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\34\1\12\1\0\1\34\1\32\22\0\1\34\1\64\1\11"+ + "\1\33\1\0\1\63\1\67\1\10\1\57\1\57\1\62\1\61\1\64"+ + "\1\27\1\24\1\63\1\16\7\21\2\3\1\64\1\72\1\65\1\60"+ + "\1\66\1\64\1\71\4\23\1\26\1\23\3\2\1\31\1\2\1\15"+ + "\5\2\1\6\2\2\1\7\2\2\1\20\2\2\1\57\1\13\1\57"+ + "\1\64\1\1\1\0\1\35\1\42\1\44\1\37\1\25\1\22\1\52"+ + "\1\54\1\46\1\30\1\43\1\14\1\51\1\36\1\45\1\47\1\2"+ + "\1\4\1\40\1\41\1\5\1\55\1\53\1\17\1\50\1\56\1\57"+ + "\1\70\1\57\1\64\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\3\0\1\1\1\2\1\3\4\2\2\4\1\5\1\2"+ + "\1\3\2\2\1\6\1\2\1\6\1\7\1\10\21\2"+ + "\1\11\10\6\1\2\2\12\2\4\1\13\1\3\1\14"+ + "\1\13\1\14\4\2\2\4\1\0\2\4\1\0\4\2"+ + "\1\13\1\3\1\13\12\2\1\15\27\2\1\15\3\2"+ + "\2\15\1\16\1\15\15\2\3\0\2\14\1\0\12\2"+ + "\1\4\1\17\1\20\3\2\1\3\15\2\1\15\22\2"+ + "\1\21\14\2\1\22\1\23\1\14\6\2\1\21\3\2"+ + "\1\15\36\2\1\15\17\2\1\15\6\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[265]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\73\0\166\0\261\0\354\0\u0127\0\u0162\0\u019d"+ + "\0\u01d8\0\u0213\0\u024e\0\u0289\0\261\0\u02c4\0\u02ff\0\u033a"+ + "\0\u0375\0\u03b0\0\u03eb\0\u0426\0\u0461\0\u049c\0\u04d7\0\u0512"+ + "\0\u054d\0\u0588\0\u05c3\0\u05fe\0\u0639\0\u0674\0\u06af\0\u06ea"+ + "\0\u0725\0\u0760\0\u079b\0\u07d6\0\u0811\0\u084c\0\u0887\0\261"+ + "\0\u08c2\0\u08fd\0\u0938\0\261\0\u0973\0\u09ae\0\u09e9\0\u0a24"+ + "\0\261\0\u0a5f\0\u0a9a\0\u0ad5\0\u0b10\0\u0b4b\0\u0b4b\0\u0b86"+ + "\0\u0bc1\0\u0b4b\0\u0bfc\0\u0c37\0\u0c72\0\u0cad\0\u0ce8\0\u0d23"+ + "\0\u0d5e\0\u0d99\0\u0dd4\0\u0e0f\0\u0e4a\0\u0e85\0\u0ec0\0\u0efb"+ + "\0\u0f36\0\u0f71\0\u0fac\0\u0fe7\0\u1022\0\u105d\0\u1098\0\u10d3"+ + "\0\u110e\0\u1149\0\u1184\0\u11bf\0\u11fa\0\u1235\0\u1270\0\u12ab"+ + "\0\u12e6\0\u1321\0\u135c\0\u1397\0\u13d2\0\u140d\0\u1448\0\u1483"+ + "\0\u14be\0\u14f9\0\u1534\0\u156f\0\u15aa\0\u15e5\0\u1620\0\u165b"+ + "\0\u1696\0\u16d1\0\u170c\0\u1747\0\u1782\0\u17bd\0\u17f8\0\u1833"+ + "\0\u186e\0\354\0\u18a9\0\354\0\u18e4\0\u191f\0\u195a\0\u1995"+ + "\0\u19d0\0\u1a0b\0\u1a46\0\u1a81\0\u1abc\0\u1af7\0\u1b32\0\u1b6d"+ + "\0\u1ba8\0\u1be3\0\u1c1e\0\u1c59\0\u1c94\0\261\0\u1ccf\0\u1d0a"+ + "\0\u1d45\0\u1d80\0\u1dbb\0\u1df6\0\u1e31\0\u1e6c\0\u1ea7\0\u1ee2"+ + "\0\u1f1d\0\u1f58\0\261\0\261\0\261\0\u1f93\0\u1fce\0\u2009"+ + "\0\u2044\0\u207f\0\u20ba\0\u20f5\0\u2130\0\u216b\0\u21a6\0\u21e1"+ + "\0\u221c\0\u2257\0\u2292\0\u22cd\0\u2308\0\u2343\0\u237e\0\u23b9"+ + "\0\u23f4\0\u242f\0\u237e\0\u246a\0\u24a5\0\u24e0\0\u251b\0\u2556"+ + "\0\u2591\0\u25cc\0\u2607\0\u2642\0\u267d\0\u26b8\0\u26f3\0\u272e"+ + "\0\u2769\0\u27a4\0\u27df\0\u281a\0\u2855\0\u2890\0\u28cb\0\u2906"+ + "\0\u2941\0\u297c\0\u29b7\0\u29f2\0\u2a2d\0\u2a68\0\261\0\261"+ + "\0\u2aa3\0\u2ade\0\u2b19\0\u2b54\0\u17bd\0\u2b8f\0\u2bca\0\354"+ + "\0\u2c05\0\u2c40\0\u2c7b\0\u2cb6\0\u2cf1\0\u2d2c\0\u2d67\0\u2da2"+ + "\0\u2ddd\0\u2e18\0\u2e53\0\u2e8e\0\u2ec9\0\u2f04\0\u2f3f\0\u2f7a"+ + "\0\u2fb5\0\u2ff0\0\u302b\0\u3066\0\u30a1\0\u30dc\0\u3117\0\u3152"+ + "\0\u318d\0\u31c8\0\u3203\0\u323e\0\u3279\0\u32b4\0\u32ef\0\u332a"+ + "\0\u3365\0\u33a0\0\u33db\0\u3416\0\u3451\0\u348c\0\u34c7\0\u3502"+ + "\0\u353d\0\u3578\0\u35b3\0\u35ee\0\u33db\0\u3629\0\u3664\0\u369f"+ + "\0\u36da\0\u3715\0\u1270\0\u3750\0\u378b\0\u37c6\0\u3801\0\u383c"+ + "\0\u3877"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[265]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\73\0\166\0\261\0\354\0\u0127\0\u0162\0\u019d" + - "\0\u01d8\0\u0213\0\u024e\0\u0289\0\261\0\u02c4\0\u02ff\0\u033a" + - "\0\u0375\0\u03b0\0\u03eb\0\u0426\0\u0461\0\u049c\0\u04d7\0\u0512" + - "\0\u054d\0\u0588\0\u05c3\0\u05fe\0\u0639\0\u0674\0\u06af\0\u06ea" + - "\0\u0725\0\u0760\0\u079b\0\u07d6\0\u0811\0\u084c\0\u0887\0\261" + - "\0\u08c2\0\u08fd\0\u0938\0\261\0\u0973\0\u09ae\0\u09e9\0\u0a24" + - "\0\261\0\u0a5f\0\u0a9a\0\u0ad5\0\u0b10\0\u0b4b\0\u0b4b\0\u0b86" + - "\0\u0bc1\0\u0b4b\0\u0bfc\0\u0c37\0\u0c72\0\u0cad\0\u0ce8\0\u0d23" + - "\0\u0d5e\0\u0d99\0\u0dd4\0\u0e0f\0\u0e4a\0\u0e85\0\u0ec0\0\u0efb" + - "\0\u0f36\0\u0f71\0\u0fac\0\u0fe7\0\u1022\0\u105d\0\u1098\0\u10d3" + - "\0\u110e\0\u1149\0\u1184\0\u11bf\0\u11fa\0\u1235\0\u1270\0\u12ab" + - "\0\u12e6\0\u1321\0\u135c\0\u1397\0\u13d2\0\u140d\0\u1448\0\u1483" + - "\0\u14be\0\u14f9\0\u1534\0\u156f\0\u15aa\0\u15e5\0\u1620\0\u165b" + - "\0\u1696\0\u16d1\0\u170c\0\u1747\0\u1782\0\u17bd\0\u17f8\0\u1833" + - "\0\u186e\0\354\0\u18a9\0\354\0\u18e4\0\u191f\0\u195a\0\u1995" + - "\0\u19d0\0\u1a0b\0\u1a46\0\u1a81\0\u1abc\0\u1af7\0\u1b32\0\u1b6d" + - "\0\u1ba8\0\u1be3\0\u1c1e\0\u1c59\0\u1c94\0\261\0\u1ccf\0\u1d0a" + - "\0\u1d45\0\u1d80\0\u1dbb\0\u1df6\0\u1e31\0\u1e6c\0\u1ea7\0\u1ee2" + - "\0\u1f1d\0\u1f58\0\261\0\261\0\261\0\u1f93\0\u1fce\0\u2009" + - "\0\u2044\0\u207f\0\u20ba\0\u20f5\0\u2130\0\u216b\0\u21a6\0\u21e1" + - "\0\u221c\0\u2257\0\u2292\0\u22cd\0\u2308\0\u2343\0\u237e\0\u23b9" + - "\0\u23f4\0\u242f\0\u237e\0\u246a\0\u24a5\0\u24e0\0\u251b\0\u2556" + - "\0\u2591\0\u25cc\0\u2607\0\u2642\0\u267d\0\u26b8\0\u26f3\0\u272e" + - "\0\u2769\0\u27a4\0\u27df\0\u281a\0\u2855\0\u2890\0\u28cb\0\u2906" + - "\0\u2941\0\u297c\0\u29b7\0\u29f2\0\u2a2d\0\u2a68\0\261\0\261" + - "\0\u2aa3\0\u2ade\0\u2b19\0\u2b54\0\u17bd\0\u2b8f\0\u2bca\0\354" + - "\0\u2c05\0\u2c40\0\u2c7b\0\u2cb6\0\u2cf1\0\u2d2c\0\u2d67\0\u2da2" + - "\0\u2ddd\0\u2e18\0\u2e53\0\u2e8e\0\u2ec9\0\u2f04\0\u2f3f\0\u2f7a" + - "\0\u2fb5\0\u2ff0\0\u302b\0\u3066\0\u30a1\0\u30dc\0\u3117\0\u3152" + - "\0\u318d\0\u31c8\0\u3203\0\u323e\0\u3279\0\u32b4\0\u32ef\0\u332a" + - "\0\u3365\0\u33a0\0\u33db\0\u3416\0\u3451\0\u348c\0\u34c7\0\u3502" + - "\0\u353d\0\u3578\0\u35b3\0\u35ee\0\u33db\0\u3629\0\u3664\0\u369f" + - "\0\u36da\0\u3715\0\u1270\0\u3750\0\u378b\0\u37c6\0\u3801\0\u383c" + - "\0\u3877"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[265]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\4\2\5\1\6\1\7\1\10\1\11\1\12\1\13"+ + "\1\14\1\15\1\4\1\16\1\5\1\17\1\20\1\5"+ + "\1\6\1\21\1\5\1\22\1\23\1\5\1\24\2\5"+ + "\1\4\1\25\1\26\1\27\1\30\1\31\1\32\1\33"+ + "\1\34\1\5\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ + "\1\53\1\51\1\54\1\55\1\56\1\57\1\60\2\61"+ + "\10\62\1\63\62\62\11\64\1\65\61\64\74\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\14\0\3\66\1\6\4\66\3\0\1\66\2\67\1\6"+ + "\2\66\1\6\2\66\1\70\2\71\1\0\2\72\1\0"+ + "\1\66\1\0\22\66\12\0\1\66\2\0\7\5\1\13"+ + "\1\14\2\0\10\5\1\0\1\73\1\5\1\0\2\5"+ + "\3\0\1\74\7\5\1\75\11\5\15\0\3\5\1\11"+ + "\1\5\1\11\1\5\1\13\1\14\2\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\76\20\5\15\0"+ + "\7\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\3\5\1\11\1\5\1\11"+ + "\1\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\14\0\10\77\1\100\1\77\1\0"+ + "\1\101\57\77\11\102\1\103\1\0\1\104\57\102\1\0"+ + "\7\5\4\0\10\5\1\0\1\105\1\5\1\0\2\5"+ + "\3\0\1\106\7\5\1\107\1\110\10\5\14\0\3\66"+ + "\1\111\4\66\3\0\1\66\2\67\1\112\2\113\1\112"+ + "\2\66\1\70\2\71\1\0\2\72\1\0\1\66\1\0"+ + "\22\66\12\0\1\66\2\0\3\5\1\114\3\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\115\3\5\4\0\1\116\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\117\1\120\10\5\17\0"+ + "\1\70\12\0\1\70\2\0\1\70\52\0\7\5\4\0"+ + "\1\121\2\5\1\122\4\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\123\16\5\1\124\1\5\43\0\1\54"+ + "\30\0\1\54\12\0\12\25\1\0\60\25\34\0\1\26"+ + "\37\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\125\1\5\1\126\1\5\1\127\4\5"+ + "\1\130\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\131\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\132\1\5\1\0\2\5\3\0"+ + "\10\5\1\133\1\134\10\5\15\0\4\5\1\135\2\5"+ + "\4\0\1\136\7\5\1\0\1\137\1\5\1\0\2\5"+ + "\3\0\4\5\1\140\4\5\1\141\5\5\1\142\2\5"+ + "\15\0\3\5\1\143\1\144\2\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\13\5\1\145\6\5\15\0"+ + "\3\5\1\146\1\147\2\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\150\11\5\15\0\7\5"+ + "\4\0\1\151\7\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\152\7\5\1\153\3\5\1\154\2\5\1\155\2\5"+ + "\15\0\3\5\1\156\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\5\5\1\157\1\5\1\160\2\5"+ + "\1\161\7\5\15\0\7\5\4\0\6\5\1\162\1\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\163\1\164"+ + "\1\165\1\166\7\5\1\167\5\5\15\0\3\5\1\170"+ + "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\171\7\5\1\172\11\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\173\10\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\174\10\5\1\105\10\5\15\0\7\5\4\0"+ + "\1\175\7\5\1\0\1\137\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\17\5\1\176\2\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\177\1\5\1\0\2\5\3\0\1\200"+ + "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\201\7\5\1\202\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\11\5"+ + "\1\154\10\5\74\0\1\54\72\0\2\54\71\0\1\54"+ + "\1\0\1\54\75\0\1\51\73\0\1\51\73\0\1\54"+ + "\73\0\1\54\2\0\10\62\1\0\62\62\10\0\1\203"+ + "\62\0\11\64\1\0\61\64\11\0\1\204\61\0\10\66"+ + "\3\0\11\66\1\0\2\66\1\0\2\66\1\0\1\66"+ + "\1\0\22\66\12\0\1\66\4\0\1\70\12\0\1\70"+ + "\2\0\1\70\3\0\2\205\1\0\2\206\41\0\3\66"+ + "\1\207\4\66\3\0\3\66\1\207\2\66\1\207\2\66"+ + "\1\0\2\66\1\210\2\66\1\0\1\66\1\0\22\66"+ + "\2\0\1\210\7\0\1\66\2\0\7\5\4\0\1\211"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\2\5\1\212"+ + "\1\5\1\213\5\5\1\214\7\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\5\1\215"+ + "\7\5\1\216\4\5\1\217\3\5\15\0\4\5\1\220"+ + "\2\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\221\5\5\1\222\10\5\14\0"+ + "\10\77\1\223\1\77\1\0\1\101\57\77\10\0\1\224"+ + "\62\0\12\77\1\0\60\77\11\102\1\223\1\0\1\104"+ + "\57\102\11\0\1\225\61\0\12\102\1\0\60\102\1\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\164\20\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\14\5\1\226\5\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\227\5\5\1\230\12\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\160"+ + "\16\5\14\0\3\66\1\111\4\66\3\0\3\66\1\111"+ + "\2\66\1\111\2\66\1\70\2\71\1\0\2\72\1\0"+ + "\1\66\1\0\22\66\12\0\1\66\1\0\3\66\1\111"+ + "\4\66\3\0\1\66\2\67\1\112\2\66\1\112\2\66"+ + "\1\70\2\71\1\0\2\72\1\0\1\66\1\0\22\66"+ + "\12\0\1\66\1\0\3\66\1\231\4\66\3\0\3\66"+ + "\1\231\2\66\3\231\1\0\2\231\1\0\2\66\1\0"+ + "\1\66\1\0\1\231\1\66\1\231\2\66\1\231\1\66"+ + "\1\231\12\66\12\0\1\66\2\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\232\21\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\10\5\1\233\11\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\10\5\1\234\11\5\15\0"+ + "\3\5\1\162\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\1\235\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\236\20\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\3\5\1\237\5\5\1\240\10\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\241\1\5\1\0\2\5\3\0"+ + "\7\5\1\242\12\5\15\0\4\5\1\243\2\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\244\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\2\5\1\162\17\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ + "\1\245\16\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\164\16\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\246\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\162\15\5\15\0\7\5"+ + "\4\0\1\247\5\5\1\162\1\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\4\5\1\250\2\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\164\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\7\5\1\160\10\5\1\251\1\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\12\5\1\166\1\5\1\164\5\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\252"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\4\5\1\253\15\5\15\0\3\5\1\164"+ + "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\254\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\15\5\1\255\4\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\256\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\13\5\1\162\6\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\257\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\12\5\1\260\7\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\261\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\6\5\1\262\1\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\10\5\1\244"+ + "\11\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\263\21\5\15\0\7\5\4\0\1\264"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\1\265\1\5\1\0\2\5"+ + "\3\0\1\5\1\266\12\5\1\267\5\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\164\7\5\15\0\3\5\1\164\3\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\270\21\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\2\5\1\164\17\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\1\271\1\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ + "\1\164\15\5\15\0\7\5\4\0\10\5\1\0\1\105"+ + "\1\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\272"+ + "\5\5\1\273\7\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\3\5\1\274\5\5\1\275"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\1\214\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\12\5\1\276\7\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\10\5\1\277\1\300\10\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\301"+ + "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\16\5\1\164\3\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\302\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\3\5\1\164\4\5\1\0\2\5"+ + "\1\0\2\5\3\0\12\5\1\164\7\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\303\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\304\10\5\15\0\7\5"+ + "\4\0\3\5\1\164\4\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\305\16\5\15\0\3\5"+ + "\1\127\3\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\306\10\5\24\0\1\307"+ + "\73\0\1\310\64\0\1\311\12\0\1\311\2\0\1\311"+ + "\5\0\1\210\31\0\1\210\11\0\3\66\1\207\4\66"+ + "\3\0\3\66\1\207\2\66\1\207\2\66\1\0\2\66"+ + "\1\0\2\72\1\0\1\66\1\0\22\66\12\0\1\66"+ + "\4\0\1\311\12\0\1\311\2\0\1\311\52\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\312\11\5\15\0\4\5\1\252\2\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\4\5"+ + "\1\313\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\3\5\1\164\3\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\15\5"+ + "\1\260\4\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\3\5\1\237\16\5\15\0\1\314"+ + "\6\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\5\1\315\20\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\141"+ + "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\7\5\1\316\12\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\317"+ + "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\15\5\1\320\4\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\321\21\5"+ + "\14\0\3\66\1\231\4\66\3\0\1\66\2\67\1\231"+ + "\2\66\3\231\1\0\2\231\1\0\2\66\1\0\1\66"+ + "\1\0\1\231\1\66\1\231\2\66\1\231\1\66\1\231"+ + "\12\66\12\0\1\66\2\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\215\20\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\14\5\1\162\5\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\322\21\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\164\1\5\1\0\2\5\3\0"+ + "\4\5\1\166\15\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\323\21\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\162\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\6\5\1\162\1\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\324"+ + "\12\5\15\0\7\5\4\0\10\5\1\0\1\325\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\14\5\1\326\5\5"+ + "\15\0\7\5\4\0\1\164\7\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\1\327\1\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\1\330\7\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\331\21\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\5\5\1\332\14\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\14\5\1\333\5\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\7\5\1\260\12\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\4\5\1\334\15\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\5\1\335\20\5"+ + "\15\0\3\5\1\322\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\260"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\1\164\1\5\1\0\2\5"+ + "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\336\21\5\15\0\7\5\4\0"+ + "\6\5\1\166\1\5\1\0\2\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\337\16\5\15\0\7\5\4\0"+ + "\1\340\7\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\3\5\1\252\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\4\5\1\341\15\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\12\5\1\342\7\5\15\0\3\5\1\320\3\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\1\343\1\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\1\344\1\5\1\0\2\5\3\0\22\5\15\0\4\5"+ + "\1\160\2\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\22\5\15\0\4\5\1\345\2\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\5"+ + "\1\346\20\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\10\5\1\327\11\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\347\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\5\1\131\20\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5"+ + "\1\162\16\5\15\0\7\5\4\0\1\125\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\350"+ + "\14\5\15\0\7\5\4\0\1\237\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\1\331\16\5\1\164"+ + "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\2\5\1\320\17\5\17\0\1\311\12\0"+ + "\1\311\2\0\1\311\6\0\2\206\42\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\1\315\21\5"+ + "\15\0\3\5\1\351\3\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\352\10\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\10\5\1\353\6\5\1\214\2\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\2\5"+ + "\1\354\17\5\15\0\7\5\4\0\1\127\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\320"+ + "\15\5\15\0\7\5\4\0\1\355\7\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\6\5"+ + "\1\356\1\5\1\0\2\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\12\5\1\131\7\5\15\0\7\5\4\0\10\5"+ + "\1\0\1\357\1\5\1\0\2\5\3\0\22\5\15\0"+ + "\3\5\1\131\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\13\5\1\164\6\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\4\5\1\360\15\5\15\0\7\5\4\0\1\361\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5"+ + "\1\315\11\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\11\5\1\362\10\5\15\0\7\5"+ + "\4\0\10\5\1\0\1\306\1\5\1\0\2\5\3\0"+ + "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\6\5\1\162\13\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\363"+ + "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\364\21\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\11\5\1\365\10\5"+ + "\15\0\7\5\4\0\1\366\7\5\1\0\2\5\1\0"+ + "\2\5\3\0\11\5\1\257\10\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\160"+ + "\12\5\15\0\3\5\1\105\3\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\367"+ + "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\370\16\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\371\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\372\21\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\1\5\1\162\20\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\5\1\373\20\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\2\5\1\260\17\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\162\21\5\15\0\7\5\4\0\1\143\7\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\257"+ + "\10\5\15\0\3\5\1\374\3\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\214"+ + "\15\5\15\0\7\5\4\0\10\5\1\0\1\320\1\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\7\5\1\375\12\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\14\5\1\376\5\5\15\0\7\5\4\0\10\5"+ + "\1\0\2\5\1\0\2\5\3\0\5\5\1\257\14\5"+ + "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5"+ + "\3\0\1\5\1\377\20\5\15\0\7\5\4\0\10\5"+ + "\1\0\1\177\1\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\7\5\1\u0100\12\5\15\0\7\5\4\0\10\5\1\0"+ + "\2\5\1\0\2\5\3\0\4\5\1\u0101\15\5\15\0"+ + "\3\5\1\u0102\3\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\22\5\15\0\7\5\4\0\1\u0103\7\5"+ + "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5"+ + "\1\273\7\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\1\u0104\21\5\15\0\7\5\4\0"+ + "\10\5\1\0\1\u0105\1\5\1\0\2\5\3\0\22\5"+ + "\15\0\4\5\1\237\2\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\u0106"+ + "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0"+ + "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0"+ + "\1\u0107\21\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\330\15\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5"+ + "\1\260\15\5\15\0\7\5\4\0\10\5\1\0\2\5"+ + "\1\0\2\5\3\0\4\5\1\u0108\15\5\15\0\7\5"+ + "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\u0109"+ + "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\1\5\1\252\20\5\15\0\7\5\4\0"+ + "\10\5\1\0\2\5\1\0\2\5\3\0\17\5\1\333"+ + "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0"+ + "\2\5\3\0\3\5\1\127\16\5\14\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[14514]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\2\5\1\6\1\7\1\10\1\11\1\12\1\13" + - "\1\14\1\15\1\4\1\16\1\5\1\17\1\20\1\5" + - "\1\6\1\21\1\5\1\22\1\23\1\5\1\24\2\5" + - "\1\4\1\25\1\26\1\27\1\30\1\31\1\32\1\33" + - "\1\34\1\5\1\35\1\36\1\37\1\40\1\41\1\42" + - "\1\43\1\44\1\45\1\46\1\47\1\50\1\51\1\52" + - "\1\53\1\51\1\54\1\55\1\56\1\57\1\60\2\61" + - "\10\62\1\63\62\62\11\64\1\65\61\64\74\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5" + - "\14\0\3\66\1\6\4\66\3\0\1\66\2\67\1\6" + - "\2\66\1\6\2\66\1\70\2\71\1\0\2\72\1\0" + - "\1\66\1\0\22\66\12\0\1\66\2\0\7\5\1\13" + - "\1\14\2\0\10\5\1\0\1\73\1\5\1\0\2\5" + - "\3\0\1\74\7\5\1\75\11\5\15\0\3\5\1\11" + - "\1\5\1\11\1\5\1\13\1\14\2\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\1\5\1\76\20\5\15\0" + - "\7\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\3\5\1\11\1\5\1\11" + - "\1\5\1\13\1\14\2\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\14\0\10\77\1\100\1\77\1\0" + - "\1\101\57\77\11\102\1\103\1\0\1\104\57\102\1\0" + - "\7\5\4\0\10\5\1\0\1\105\1\5\1\0\2\5" + - "\3\0\1\106\7\5\1\107\1\110\10\5\14\0\3\66" + - "\1\111\4\66\3\0\1\66\2\67\1\112\2\113\1\112" + - "\2\66\1\70\2\71\1\0\2\72\1\0\1\66\1\0" + - "\22\66\12\0\1\66\2\0\3\5\1\114\3\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\3\5\1\115\3\5\4\0\1\116\7\5\1\0\2\5" + - "\1\0\2\5\3\0\10\5\1\117\1\120\10\5\17\0" + - "\1\70\12\0\1\70\2\0\1\70\52\0\7\5\4\0" + - "\1\121\2\5\1\122\4\5\1\0\2\5\1\0\2\5" + - "\3\0\1\5\1\123\16\5\1\124\1\5\43\0\1\54" + - "\30\0\1\54\12\0\12\25\1\0\60\25\34\0\1\26" + - "\37\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\1\5\1\125\1\5\1\126\1\5\1\127\4\5" + - "\1\130\7\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\10\5\1\131\11\5\15\0\7\5" + - "\4\0\10\5\1\0\1\132\1\5\1\0\2\5\3\0" + - "\10\5\1\133\1\134\10\5\15\0\4\5\1\135\2\5" + - "\4\0\1\136\7\5\1\0\1\137\1\5\1\0\2\5" + - "\3\0\4\5\1\140\4\5\1\141\5\5\1\142\2\5" + - "\15\0\3\5\1\143\1\144\2\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\13\5\1\145\6\5\15\0" + - "\3\5\1\146\1\147\2\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\10\5\1\150\11\5\15\0\7\5" + - "\4\0\1\151\7\5\1\0\2\5\1\0\2\5\3\0" + - "\1\152\7\5\1\153\3\5\1\154\2\5\1\155\2\5" + - "\15\0\3\5\1\156\3\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\5\5\1\157\1\5\1\160\2\5" + - "\1\161\7\5\15\0\7\5\4\0\6\5\1\162\1\5" + - "\1\0\2\5\1\0\2\5\3\0\1\5\1\163\1\164" + - "\1\165\1\166\7\5\1\167\5\5\15\0\3\5\1\170" + - "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\171\7\5\1\172\11\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\11\5\1\173\10\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\1\174\10\5\1\105\10\5\15\0\7\5\4\0" + - "\1\175\7\5\1\0\1\137\1\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\17\5\1\176\2\5\15\0\7\5\4\0" + - "\10\5\1\0\1\177\1\5\1\0\2\5\3\0\1\200" + - "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\201\7\5\1\202\11\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\11\5" + - "\1\154\10\5\74\0\1\54\72\0\2\54\71\0\1\54" + - "\1\0\1\54\75\0\1\51\73\0\1\51\73\0\1\54" + - "\73\0\1\54\2\0\10\62\1\0\62\62\10\0\1\203" + - "\62\0\11\64\1\0\61\64\11\0\1\204\61\0\10\66" + - "\3\0\11\66\1\0\2\66\1\0\2\66\1\0\1\66" + - "\1\0\22\66\12\0\1\66\4\0\1\70\12\0\1\70" + - "\2\0\1\70\3\0\2\205\1\0\2\206\41\0\3\66" + - "\1\207\4\66\3\0\3\66\1\207\2\66\1\207\2\66" + - "\1\0\2\66\1\210\2\66\1\0\1\66\1\0\22\66" + - "\2\0\1\210\7\0\1\66\2\0\7\5\4\0\1\211" + - "\7\5\1\0\2\5\1\0\2\5\3\0\2\5\1\212" + - "\1\5\1\213\5\5\1\214\7\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\1\5\1\215" + - "\7\5\1\216\4\5\1\217\3\5\15\0\4\5\1\220" + - "\2\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\3\5\1\221\5\5\1\222\10\5\14\0" + - "\10\77\1\223\1\77\1\0\1\101\57\77\10\0\1\224" + - "\62\0\12\77\1\0\60\77\11\102\1\223\1\0\1\104" + - "\57\102\11\0\1\225\61\0\12\102\1\0\60\102\1\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\5\1\164\20\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\14\5\1\226\5\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\5\1\227\5\5\1\230\12\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\160" + - "\16\5\14\0\3\66\1\111\4\66\3\0\3\66\1\111" + - "\2\66\1\111\2\66\1\70\2\71\1\0\2\72\1\0" + - "\1\66\1\0\22\66\12\0\1\66\1\0\3\66\1\111" + - "\4\66\3\0\1\66\2\67\1\112\2\66\1\112\2\66" + - "\1\70\2\71\1\0\2\72\1\0\1\66\1\0\22\66" + - "\12\0\1\66\1\0\3\66\1\231\4\66\3\0\3\66" + - "\1\231\2\66\3\231\1\0\2\231\1\0\2\66\1\0" + - "\1\66\1\0\1\231\1\66\1\231\2\66\1\231\1\66" + - "\1\231\12\66\12\0\1\66\2\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\1\232\21\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\10\5\1\233\11\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\10\5\1\234\11\5\15\0" + - "\3\5\1\162\3\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\7\5\4\0\1\235\7\5" + - "\1\0\2\5\1\0\2\5\3\0\1\5\1\236\20\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\3\5\1\237\5\5\1\240\10\5\15\0\7\5" + - "\4\0\10\5\1\0\1\241\1\5\1\0\2\5\3\0" + - "\7\5\1\242\12\5\15\0\4\5\1\243\2\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\244\21\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\2\5\1\162\17\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5" + - "\1\245\16\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\3\5\1\164\16\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5" + - "\1\246\7\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\4\5\1\162\15\5\15\0\7\5" + - "\4\0\1\247\5\5\1\162\1\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\4\5\1\250\2\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\3\5\1\164\3\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\7\5\1\160\10\5\1\251\1\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\12\5\1\166\1\5\1\164\5\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\252" + - "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\4\5\1\253\15\5\15\0\3\5\1\164" + - "\3\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\254\21\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\15\5\1\255\4\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5" + - "\1\256\11\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\13\5\1\162\6\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5" + - "\1\257\7\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\12\5\1\260\7\5\15\0\7\5" + - "\4\0\10\5\1\0\1\261\1\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\6\5\1\262\1\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\10\5\1\244" + - "\11\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\263\21\5\15\0\7\5\4\0\1\264" + - "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\7\5\4\0\10\5\1\0\1\265\1\5\1\0\2\5" + - "\3\0\1\5\1\266\12\5\1\267\5\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5" + - "\1\164\7\5\15\0\3\5\1\164\3\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\1\270\21\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\2\5\1\164\17\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\1\271\1\5\3\0\22\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5" + - "\1\164\15\5\15\0\7\5\4\0\10\5\1\0\1\105" + - "\1\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\272" + - "\5\5\1\273\7\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\3\5\1\274\5\5\1\275" + - "\10\5\15\0\7\5\4\0\10\5\1\0\1\214\1\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\12\5\1\276\7\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\10\5\1\277\1\300\10\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\301" + - "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\16\5\1\164\3\5\15\0\7\5\4\0" + - "\10\5\1\0\1\302\1\5\1\0\2\5\3\0\22\5" + - "\15\0\7\5\4\0\3\5\1\164\4\5\1\0\2\5" + - "\1\0\2\5\3\0\12\5\1\164\7\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5" + - "\1\303\11\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\11\5\1\304\10\5\15\0\7\5" + - "\4\0\3\5\1\164\4\5\1\0\2\5\1\0\2\5" + - "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\3\5\1\305\16\5\15\0\3\5" + - "\1\127\3\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\11\5\1\306\10\5\24\0\1\307" + - "\73\0\1\310\64\0\1\311\12\0\1\311\2\0\1\311" + - "\5\0\1\210\31\0\1\210\11\0\3\66\1\207\4\66" + - "\3\0\3\66\1\207\2\66\1\207\2\66\1\0\2\66" + - "\1\0\2\72\1\0\1\66\1\0\22\66\12\0\1\66" + - "\4\0\1\311\12\0\1\311\2\0\1\311\52\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5" + - "\1\312\11\5\15\0\4\5\1\252\2\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\4\5" + - "\1\313\2\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\22\5\15\0\3\5\1\164\3\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\15\5" + - "\1\260\4\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\3\5\1\237\16\5\15\0\1\314" + - "\6\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\5\1\315\20\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\141" + - "\10\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\7\5\1\316\12\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\317" + - "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\15\5\1\320\4\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\1\321\21\5" + - "\14\0\3\66\1\231\4\66\3\0\1\66\2\67\1\231" + - "\2\66\3\231\1\0\2\231\1\0\2\66\1\0\1\66" + - "\1\0\1\231\1\66\1\231\2\66\1\231\1\66\1\231" + - "\12\66\12\0\1\66\2\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\1\5\1\215\20\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\14\5\1\162\5\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\1\322\21\5\15\0\7\5" + - "\4\0\10\5\1\0\1\164\1\5\1\0\2\5\3\0" + - "\4\5\1\166\15\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\1\323\21\5\15\0\7\5" + - "\4\0\10\5\1\0\1\162\1\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\6\5\1\162\1\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\324" + - "\12\5\15\0\7\5\4\0\10\5\1\0\1\325\1\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\14\5\1\326\5\5" + - "\15\0\7\5\4\0\1\164\7\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0" + - "\1\327\1\5\1\0\2\5\3\0\22\5\15\0\7\5" + - "\4\0\1\330\7\5\1\0\2\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\331\21\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\5\5\1\332\14\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\14\5\1\333\5\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\7\5\1\260\12\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\4\5\1\334\15\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\1\5\1\335\20\5" + - "\15\0\3\5\1\322\3\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\260" + - "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\7\5\4\0\10\5\1\0\1\164\1\5\1\0\2\5" + - "\3\0\22\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\1\336\21\5\15\0\7\5\4\0" + - "\6\5\1\166\1\5\1\0\2\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\3\5\1\337\16\5\15\0\7\5\4\0" + - "\1\340\7\5\1\0\2\5\1\0\2\5\3\0\22\5" + - "\15\0\3\5\1\252\3\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\4\5\1\341\15\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\12\5\1\342\7\5\15\0\3\5\1\320\3\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\22\5" + - "\15\0\7\5\4\0\10\5\1\0\1\343\1\5\1\0" + - "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0" + - "\1\344\1\5\1\0\2\5\3\0\22\5\15\0\4\5" + - "\1\160\2\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\22\5\15\0\4\5\1\345\2\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\5" + - "\1\346\20\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\10\5\1\327\11\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5" + - "\1\347\7\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\1\5\1\131\20\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\3\5" + - "\1\162\16\5\15\0\7\5\4\0\1\125\7\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\350" + - "\14\5\15\0\7\5\4\0\1\237\7\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\1\331\16\5\1\164" + - "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\2\5\1\320\17\5\17\0\1\311\12\0" + - "\1\311\2\0\1\311\6\0\2\206\42\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\1\315\21\5" + - "\15\0\3\5\1\351\3\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\11\5\1\352\10\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\10\5\1\353\6\5\1\214\2\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\2\5" + - "\1\354\17\5\15\0\7\5\4\0\1\127\7\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\320" + - "\15\5\15\0\7\5\4\0\1\355\7\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\6\5" + - "\1\356\1\5\1\0\2\5\1\0\2\5\3\0\22\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\12\5\1\131\7\5\15\0\7\5\4\0\10\5" + - "\1\0\1\357\1\5\1\0\2\5\3\0\22\5\15\0" + - "\3\5\1\131\3\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\13\5\1\164\6\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\4\5\1\360\15\5\15\0\7\5\4\0\1\361\7\5" + - "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\10\5" + - "\1\315\11\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\11\5\1\362\10\5\15\0\7\5" + - "\4\0\10\5\1\0\1\306\1\5\1\0\2\5\3\0" + - "\22\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\6\5\1\162\13\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\3\5\1\363" + - "\16\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\364\21\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\11\5\1\365\10\5" + - "\15\0\7\5\4\0\1\366\7\5\1\0\2\5\1\0" + - "\2\5\3\0\11\5\1\257\10\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\7\5\1\160" + - "\12\5\15\0\3\5\1\105\3\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\5\5\1\367" + - "\14\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\3\5\1\370\16\5\15\0\7\5\4\0" + - "\10\5\1\0\1\371\1\5\1\0\2\5\3\0\22\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\1\372\21\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\1\5\1\162\20\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\5\1\373\20\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\2\5\1\260\17\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\162\21\5\15\0\7\5\4\0\1\143\7\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\11\5\1\257" + - "\10\5\15\0\3\5\1\374\3\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\22\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\4\5\1\214" + - "\15\5\15\0\7\5\4\0\10\5\1\0\1\320\1\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\7\5\1\375\12\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\14\5\1\376\5\5\15\0\7\5\4\0\10\5" + - "\1\0\2\5\1\0\2\5\3\0\5\5\1\257\14\5" + - "\15\0\7\5\4\0\10\5\1\0\2\5\1\0\2\5" + - "\3\0\1\5\1\377\20\5\15\0\7\5\4\0\10\5" + - "\1\0\1\177\1\5\1\0\2\5\3\0\22\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\7\5\1\u0100\12\5\15\0\7\5\4\0\10\5\1\0" + - "\2\5\1\0\2\5\3\0\4\5\1\u0101\15\5\15\0" + - "\3\5\1\u0102\3\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\22\5\15\0\7\5\4\0\1\u0103\7\5" + - "\1\0\2\5\1\0\2\5\3\0\22\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\12\5" + - "\1\273\7\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\1\u0104\21\5\15\0\7\5\4\0" + - "\10\5\1\0\1\u0105\1\5\1\0\2\5\3\0\22\5" + - "\15\0\4\5\1\237\2\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\22\5\15\0\7\5\4\0\1\u0106" + - "\7\5\1\0\2\5\1\0\2\5\3\0\22\5\15\0" + - "\7\5\4\0\10\5\1\0\2\5\1\0\2\5\3\0" + - "\1\u0107\21\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\4\5\1\330\15\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\4\5" + - "\1\260\15\5\15\0\7\5\4\0\10\5\1\0\2\5" + - "\1\0\2\5\3\0\4\5\1\u0108\15\5\15\0\7\5" + - "\4\0\10\5\1\0\2\5\1\0\2\5\3\0\1\u0109" + - "\21\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\1\5\1\252\20\5\15\0\7\5\4\0" + - "\10\5\1\0\2\5\1\0\2\5\3\0\17\5\1\333" + - "\2\5\15\0\7\5\4\0\10\5\1\0\2\5\1\0" + - "\2\5\3\0\3\5\1\127\16\5\14\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[14514]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\10\1\1\11\32\1\1\11\3\1\1\11" + - "\4\1\1\11\17\1\1\0\2\1\1\0\76\1\3\0" + - "\1\11\1\1\1\0\12\1\3\11\61\1\2\11\101\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[265]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public PythonTokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "#", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = LONG_STRING_2; - break; - case Token.LITERAL_CHAR: - state = LONG_STRING_1; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\3\0\1\11\10\1\1\11\32\1\1\11\3\1\1\11"+ + "\4\1\1\11\17\1\1\0\2\1\1\0\76\1\3\0"+ + "\1\11\1\1\1\0\12\1\3\11\61\1\2\11\101\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[265]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public PythonTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = LONG_STRING_2; + break; + case Token.LITERAL_CHAR: + state = LONG_STRING_1; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public PythonTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public PythonTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 168) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public PythonTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public PythonTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 168) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 5: { - addNullToken(); - return firstToken; - } - case 20: - break; - case 10: { - addToken(Token.LITERAL_CHAR); - } - case 21: - break; - case 8: { - addToken(Token.WHITESPACE); - } - case 22: - break; - case 12: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 23: - break; - case 13: { - addToken(Token.RESERVED_WORD); - } - case 24: - break; - case 9: { - addToken(Token.SEPARATOR); - } - case 25: - break; - case 15: { - yybegin(LONG_STRING_1); - addToken(Token.LITERAL_CHAR); - } - case 26: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 27: - break; - case 14: { - addToken(Token.FUNCTION); - } - case 28: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 29: - break; - case 17: { - addToken(Token.DATA_TYPE); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 30: - break; - case 4: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 31: - break; - case 7: { - addToken(Token.COMMENT_EOL); - } - case 32: - break; - case 11: { - addToken(Token.ERROR_NUMBER_FORMAT); - } - case 33: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 34: - break; - case 6: { - addToken(Token.OPERATOR); - } - case 35: - break; - case 19: { - yybegin(YYINITIAL); - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 5: + { addNullToken(); return firstToken; + } + case 20: break; + case 10: + { addToken(Token.LITERAL_CHAR); + } + case 21: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 22: break; + case 12: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 23: break; + case 13: + { addToken(Token.RESERVED_WORD); + } + case 24: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 25: break; + case 15: + { yybegin(LONG_STRING_1); addToken(Token.LITERAL_CHAR); + } + case 26: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 27: break; + case 14: + { addToken(Token.FUNCTION); + } + case 28: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 29: break; + case 17: + { addToken(Token.DATA_TYPE); + } + case 30: break; + case 4: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 31: break; + case 7: + { addToken(Token.COMMENT_EOL); + } + case 32: break; + case 11: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 33: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 34: break; + case 6: + { addToken(Token.OPERATOR); + } + case 35: break; + case 19: + { yybegin(YYINITIAL); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 36: break; + case 16: + { yybegin(LONG_STRING_2); addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 37: break; + case 18: + { yybegin(YYINITIAL); addToken(Token.LITERAL_CHAR); + } + case 38: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; } - case 36: - break; - case 16: { - yybegin(LONG_STRING_2); - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + case 266: break; + case LONG_STRING_2: { + if (firstToken==null) { + addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + return firstToken; } - case 37: - break; - case 18: { - yybegin(YYINITIAL); - addToken(Token.LITERAL_CHAR); + case 267: break; + case LONG_STRING_1: { + if (firstToken==null) { + addToken(Token.LITERAL_CHAR); + } + return firstToken; } - case 38: - break; + case 268: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 266: - break; - case LONG_STRING_2: { - if (firstToken == null) { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - return firstToken; - } - case 267: - break; - case LONG_STRING_1: { - if (firstToken == null) { - addToken(Token.LITERAL_CHAR); - } - return firstToken; - } - case 268: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex old mode 100644 new mode 100755 index 6494da1ae..3c6e6dedf --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.flex @@ -2,23 +2,9 @@ * 09/11/2008 * * RubyTokenMaker.java - Scanner for Ruby - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                            - *
                          • The generated RubyTokenMaker.java file will contain two + *
                          • The generated RubyTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -202,6 +188,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -209,13 +196,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "#", null }; } @@ -328,7 +312,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -339,9 +323,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -356,7 +339,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -404,7 +387,7 @@ DecimalLiteral1 = ("0d"{Digit}({DigitOrUnderscore}*{Digit})?) DecimalLiteral2 = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?) DecimalLiteral = ({BinaryIntLiteral}|{OctalLiteral}|{DecimalLiteral1}|{DecimalLiteral2}) HexLiteral = ("0x"{HexDigit}([0-9a-zA-Z_]*{HexDigit})?) -FloatLiteral = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?[Ee]({Digit}({DigitOrUnderscore}*{Digit})?)?) +FloatLiteral = ({NonzeroDigit}({DigitOrUnderscore}*{Digit})?[Ee][+-]?({Digit}({DigitOrUnderscore}*{Digit})?)?) Separator = ([\(\)\{\}]) Operator1 = ("::"|"."|"["|"]"|"-"|"+"|"!"|"~"|"*"|"/"|"%"|"<<"|">>"|"&"|"|"|"^") diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java old mode 100644 new mode 100755 index 115f1e15d..062329d65 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 1/20/09 10:04 AM */ +/* The following code was generated by JFlex 1.4.1 on 6/21/15 11:19 AM */ /* * 09/11/2008 * * RubyTokenMaker.java - Scanner for Ruby - * Copyright (C) 2008 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1759 +15,1668 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for Ruby. - *

                            - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                            - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                            - * + * Scanner for Ruby.

                            + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                            + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                            + * * If you wish to regenerate this file yourself, keep in mind the following: *

                              - *
                            • The generated RubyTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                            • - *
                            • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                            • - *
                            • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                            • + *
                            • The generated RubyTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                            • + *
                            • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                            • + *
                            • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                            • *
                            - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class RubyTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int HEREDOC_EOF_SINGLE_QUOTED = 11; - public static final int DOCCOMMENT = 14; - public static final int HEREDOC_EOT_SINGLE_QUOTED = 13; - public static final int HEREDOC_EOT_UNQUOTED = 12; - public static final int STRING_Q_SLASH = 5; - public static final int STRING_Q_BANG = 2; - public static final int STRING_Q_LT = 7; - public static final int STRING = 1; - public static final int BACKTICKS = 9; - public static final int YYINITIAL = 0; - public static final int HEREDOC_EOF_UNQUOTED = 10; - public static final int STRING_Q_CURLY_BRACE = 3; - public static final int STRING_Q_PAREN = 4; - public static final int HEREDOC_EOF_DOUBLE_QUOTED = 11; - public static final int CHAR_LITERAL = 8; - public static final int HEREDOC_EOT_DOUBLE_QUOTED = 13; - public static final int STRING_Q_SQUARE_BRACKET = 6; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\24\1\23\1\0\1\24\1\7\22\0\1\24\1\44\1\105" + - "\1\10\1\55\1\47\1\52\1\106\1\110\1\35\1\43\1\43\1\57" + - "\1\42\1\37\1\46\1\3\1\4\6\6\2\2\1\36\1\57\1\50" + - "\1\25\1\51\1\103\1\56\1\66\1\61\1\5\1\60\1\34\1\63" + - "\1\62\1\1\1\64\2\1\1\1\1\1\1\65\1\67\1\1\1\107" + - "\1\1\1\72\1\70\1\1\1\1\1\107\3\1\1\40\1\11\1\41" + - "\1\54\1\12\1\112\1\20\1\26\1\75\1\32\1\16\1\17\1\27" + - "\1\101\1\30\1\1\1\74\1\21\1\76\1\31\1\71\1\100\1\104" + - "\1\14\1\22\1\13\1\15\1\73\1\102\1\33\1\77\1\1\1\111" + - "\1\53\1\113\1\45\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\17\0\1\1\1\2\2\3\1\2\1\4\10\2\1\5" + - "\1\6\1\7\6\2\1\10\1\2\11\7\2\1\11\2" + - "\1\11\1\2\1\12\1\13\1\14\1\15\1\16\1\17" + - "\1\20\1\15\1\21\1\15\1\22\1\15\1\23\1\15" + - "\1\24\1\15\1\25\1\15\1\26\1\15\1\27\1\30" + - "\1\31\1\15\1\32\1\33\1\15\1\34\1\15\1\35" + - "\1\36\1\15\1\37\1\15\1\40\1\15\1\1\1\41" + - "\1\3\4\1\30\2\1\0\7\2\1\42\5\2\1\43" + - "\1\7\1\0\1\44\1\45\1\46\1\47\1\50\1\51" + - "\2\7\3\52\1\0\1\1\4\2\1\7\12\2\1\16" + - "\1\27\2\15\1\0\1\41\2\3\1\53\24\2\1\42" + - "\7\2\1\11\6\2\1\0\10\2\1\42\5\0\20\2" + - "\1\54\1\0\4\1\1\55\1\2\1\11\16\2\1\11" + - "\5\2\1\0\3\2\4\0\11\2\1\56\12\2\1\0" + - "\2\2\1\57\1\60\3\0\2\2\1\11\5\2\1\61" + - "\1\2\6\0\4\2\1\62\1\63\1\11\7\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[344]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int HEREDOC_EOF_SINGLE_QUOTED = 11; + public static final int DOCCOMMENT = 14; + public static final int HEREDOC_EOT_SINGLE_QUOTED = 13; + public static final int HEREDOC_EOT_UNQUOTED = 12; + public static final int STRING_Q_SLASH = 5; + public static final int STRING_Q_BANG = 2; + public static final int STRING_Q_LT = 7; + public static final int STRING = 1; + public static final int BACKTICKS = 9; + public static final int YYINITIAL = 0; + public static final int HEREDOC_EOF_UNQUOTED = 10; + public static final int STRING_Q_CURLY_BRACE = 3; + public static final int STRING_Q_PAREN = 4; + public static final int HEREDOC_EOF_DOUBLE_QUOTED = 11; + public static final int CHAR_LITERAL = 8; + public static final int HEREDOC_EOT_DOUBLE_QUOTED = 13; + public static final int STRING_Q_SQUARE_BRACKET = 6; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\24\1\23\1\0\1\24\1\7\22\0\1\24\1\44\1\106"+ + "\1\10\1\56\1\50\1\53\1\107\1\111\1\36\1\46\1\35\1\60"+ + "\1\43\1\40\1\47\1\3\1\4\6\6\2\2\1\37\1\60\1\51"+ + "\1\25\1\52\1\104\1\57\1\67\1\62\1\5\1\61\1\34\1\64"+ + "\1\63\1\1\1\65\2\1\1\1\1\1\1\66\1\70\1\1\1\110"+ + "\1\1\1\73\1\71\1\1\1\1\1\110\3\1\1\41\1\11\1\42"+ + "\1\55\1\12\1\113\1\20\1\26\1\76\1\32\1\16\1\17\1\27"+ + "\1\102\1\30\1\1\1\75\1\21\1\77\1\31\1\72\1\101\1\105"+ + "\1\14\1\22\1\13\1\15\1\74\1\103\1\33\1\100\1\1\1\112"+ + "\1\54\1\114\1\45\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\17\0\1\1\1\2\2\3\1\2\1\4\10\2\1\5"+ + "\1\6\1\7\6\2\1\7\1\10\1\2\10\7\2\1"+ + "\11\2\1\11\1\2\1\12\1\13\1\14\1\15\1\16"+ + "\1\17\1\20\1\15\1\21\1\15\1\22\1\15\1\23"+ + "\1\15\1\24\1\15\1\25\1\15\1\26\1\15\1\27"+ + "\1\30\1\31\1\15\1\32\1\33\1\15\1\34\1\15"+ + "\1\35\1\36\1\15\1\37\1\15\1\40\1\15\1\1"+ + "\1\41\1\3\4\1\30\2\1\0\7\2\1\42\5\2"+ + "\1\43\1\7\1\0\1\44\1\45\1\46\1\47\1\50"+ + "\1\51\2\7\3\52\1\0\1\1\4\2\1\7\12\2"+ + "\1\16\1\27\2\15\1\0\2\41\2\3\1\53\24\2"+ + "\1\42\7\2\1\11\6\2\1\0\10\2\1\42\5\0"+ + "\20\2\1\54\1\0\1\1\1\41\3\1\1\55\1\2"+ + "\1\11\16\2\1\11\5\2\1\0\3\2\4\0\11\2"+ + "\1\56\1\0\12\2\1\0\2\2\1\57\1\60\3\0"+ + "\2\2\1\11\5\2\1\61\1\2\6\0\4\2\1\62"+ + "\1\63\1\11\7\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[347]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u03e9\0\u0436\0\u0483"+ + "\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e\0\u06eb"+ + "\0\u0738\0\u0785\0\u07d2\0\u081f\0\u086c\0\u05b7\0\u08b9\0\u0906"+ + "\0\u0953\0\u09a0\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u05b7"+ + "\0\u0b6e\0\u0bbb\0\u05b7\0\u0c08\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c"+ + "\0\u0d89\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd\0\u0f0a\0\u0f57\0\u0fa4"+ + "\0\u0ff1\0\u103e\0\u108b\0\u10d8\0\u1125\0\u1172\0\u05b7\0\u05b7"+ + "\0\u05b7\0\u11bf\0\u120c\0\u05b7\0\u05b7\0\u1259\0\u05b7\0\u12a6"+ + "\0\u05b7\0\u12f3\0\u05b7\0\u1340\0\u05b7\0\u138d\0\u05b7\0\u13da"+ + "\0\u05b7\0\u1427\0\u1474\0\u05b7\0\u05b7\0\u14c1\0\u05b7\0\u05b7"+ + "\0\u150e\0\u05b7\0\u155b\0\u05b7\0\u05b7\0\u15a8\0\u05b7\0\u15f5"+ + "\0\u05b7\0\u1642\0\u168f\0\u16dc\0\u1729\0\u1729\0\u1776\0\u17c3"+ + "\0\u1810\0\u185d\0\u18aa\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b"+ + "\0\u1a78\0\u1ac5\0\u1b12\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93"+ + "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb"+ + "\0\u1f48\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9\0\u2116\0\u2163"+ + "\0\u21b0\0\u04d0\0\u21fd\0\u224a\0\u2297\0\u22e4\0\u2331\0\u237e"+ + "\0\u23cb\0\u2418\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7\0\u05b7"+ + "\0\u2465\0\u24b2\0\u24ff\0\u0483\0\u05b7\0\u254c\0\u2599\0\u25e6"+ + "\0\u2633\0\u2680\0\u26cd\0\u04d0\0\u271a\0\u2767\0\u27b4\0\u2801"+ + "\0\u284e\0\u289b\0\u28e8\0\u2935\0\u2982\0\u29cf\0\u05b7\0\u05b7"+ + "\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea\0\u2c37"+ + "\0\u2c84\0\u2cd1\0\u2d1e\0\u2d6b\0\u2db8\0\u2e05\0\u2e52\0\u2e9f"+ + "\0\u2eec\0\u2f39\0\u2f86\0\u2fd3\0\u3020\0\u306d\0\u30ba\0\u3107"+ + "\0\u3154\0\u31a1\0\u31ee\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f"+ + "\0\u33bc\0\u3409\0\u3456\0\u34a3\0\u34f0\0\u353d\0\u358a\0\u35d7"+ + "\0\u3624\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2\0\u383f"+ + "\0\u388c\0\u38d9\0\u3926\0\u3973\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7"+ + "\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f"+ + "\0\u3d5c\0\u3da9\0\u3df6\0\u3e43\0\u3e90\0\u3edd\0\u3f2a\0\u3f77"+ + "\0\u3fc4\0\u4011\0\u150e\0\u405e\0\u2b03\0\u40ab\0\u2b9d\0\u2bea"+ + "\0\u2c37\0\u04d0\0\u40f8\0\u04d0\0\u4145\0\u4192\0\u41df\0\u422c"+ + "\0\u4279\0\u42c6\0\u4313\0\u4360\0\u43ad\0\u43fa\0\u4447\0\u4494"+ + "\0\u44e1\0\u452e\0\u05b7\0\u457b\0\u45c8\0\u4615\0\u4662\0\u46af"+ + "\0\u46fc\0\u4749\0\u4796\0\u47e3\0\u4830\0\u487d\0\u48ca\0\u4917"+ + "\0\u4964\0\u49b1\0\u49fe\0\u4a4b\0\u4a98\0\u4ae5\0\u4b32\0\u4b7f"+ + "\0\u4bcc\0\u05b7\0\u40ab\0\u4c19\0\u4c66\0\u4cb3\0\u4d00\0\u4d4d"+ + "\0\u4d9a\0\u4de7\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u4f68\0\u4fb5"+ + "\0\u05b7\0\u05b7\0\u5002\0\u504f\0\u509c\0\u50e9\0\u5136\0\u5183"+ + "\0\u51d0\0\u521d\0\u526a\0\u52b7\0\u5183\0\u05b7\0\u5304\0\u5351"+ + "\0\u539e\0\u53eb\0\u5438\0\u5485\0\u54d2\0\u551f\0\u556c\0\u55b9"+ + "\0\u5606\0\u05b7\0\u05b7\0\u383f\0\u5653\0\u56a0\0\u56ed\0\u573a"+ + "\0\u5787\0\u57d4\0\u5821"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[347]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214" + - "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u03dc\0\u0428\0\u0474" + - "\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688\0\u06d4" + - "\0\u0720\0\u076c\0\u07b8\0\u0804\0\u0850\0\u05a4\0\u089c\0\u08e8" + - "\0\u0934\0\u0980\0\u09cc\0\u0a18\0\u0a64\0\u0ab0\0\u05a4\0\u0afc" + - "\0\u0b48\0\u05a4\0\u0b94\0\u0be0\0\u0c2c\0\u0c78\0\u0cc4\0\u0d10" + - "\0\u0d5c\0\u0da8\0\u0df4\0\u0e40\0\u0e8c\0\u0ed8\0\u0f24\0\u0f70" + - "\0\u0fbc\0\u1008\0\u1054\0\u10a0\0\u10ec\0\u1138\0\u05a4\0\u05a4" + - "\0\u05a4\0\u1184\0\u11d0\0\u05a4\0\u05a4\0\u121c\0\u05a4\0\u1268" + - "\0\u05a4\0\u12b4\0\u05a4\0\u1300\0\u05a4\0\u134c\0\u05a4\0\u1398" + - "\0\u05a4\0\u13e4\0\u1430\0\u05a4\0\u05a4\0\u147c\0\u05a4\0\u05a4" + - "\0\u14c8\0\u05a4\0\u1514\0\u05a4\0\u05a4\0\u1560\0\u05a4\0\u15ac" + - "\0\u05a4\0\u15f8\0\u1644\0\u1690\0\u16dc\0\u16dc\0\u1728\0\u1774" + - "\0\u17c0\0\u180c\0\u1858\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4" + - "\0\u1a20\0\u1a6c\0\u1ab8\0\u1b04\0\u1b50\0\u1b9c\0\u1be8\0\u1c34" + - "\0\u1c80\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u1dfc\0\u1e48\0\u1e94" + - "\0\u1ee0\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u20a8\0\u20f4" + - "\0\u2140\0\u04c0\0\u218c\0\u21d8\0\u2224\0\u2270\0\u22bc\0\u2308" + - "\0\u2354\0\u23a0\0\u05a4\0\u05a4\0\u05a4\0\u05a4\0\u05a4\0\u05a4" + - "\0\u23ec\0\u2438\0\u2484\0\u0474\0\u05a4\0\u24d0\0\u251c\0\u2568" + - "\0\u25b4\0\u2600\0\u264c\0\u04c0\0\u2698\0\u26e4\0\u2730\0\u277c" + - "\0\u27c8\0\u2814\0\u2860\0\u28ac\0\u28f8\0\u2944\0\u05a4\0\u05a4" + - "\0\u2990\0\u29dc\0\u2a28\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4" + - "\0\u2bf0\0\u2c3c\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04" + - "\0\u2e50\0\u2e9c\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u3018\0\u3064" + - "\0\u30b0\0\u30fc\0\u3148\0\u3194\0\u31e0\0\u322c\0\u3278\0\u32c4" + - "\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u34d8\0\u3524" + - "\0\u3570\0\u35bc\0\u3608\0\u3654\0\u36a0\0\u36ec\0\u3738\0\u3784" + - "\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c\0\u3998\0\u39e4" + - "\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u3bac\0\u3bf8\0\u3c44" + - "\0\u3c90\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4" + - "\0\u3ef0\0\u14c8\0\u3f3c\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u04c0" + - "\0\u3f88\0\u04c0\0\u3fd4\0\u4020\0\u406c\0\u40b8\0\u4104\0\u4150" + - "\0\u419c\0\u41e8\0\u4234\0\u4280\0\u42cc\0\u4318\0\u4364\0\u43b0" + - "\0\u05a4\0\u43fc\0\u4448\0\u4494\0\u44e0\0\u452c\0\u4578\0\u45c4" + - "\0\u4610\0\u465c\0\u46a8\0\u46f4\0\u4740\0\u478c\0\u47d8\0\u4824" + - "\0\u4870\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u05a4" + - "\0\u4a84\0\u4ad0\0\u4b1c\0\u4b68\0\u4bb4\0\u4c00\0\u4c4c\0\u4c98" + - "\0\u4ce4\0\u4d30\0\u4d7c\0\u4dc8\0\u4e14\0\u05a4\0\u05a4\0\u4e60" + - "\0\u4eac\0\u4ef8\0\u4f44\0\u4f90\0\u4fdc\0\u5028\0\u5074\0\u50c0" + - "\0\u510c\0\u4fdc\0\u05a4\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288" + - "\0\u52d4\0\u5320\0\u536c\0\u53b8\0\u5404\0\u5450\0\u05a4\0\u05a4" + - "\0\u3738\0\u549c\0\u54e8\0\u5534\0\u5580\0\u55cc\0\u5618\0\u5664"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[344]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\20\1\21\1\22\1\23\1\22\1\21\1\22\1\24"+ + "\1\25\1\20\1\21\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\45\1\21\1\46\1\47\1\50\1\51"+ + "\1\52\2\53\1\47\1\54\1\53\2\47\1\55\1\56"+ + "\1\57\1\60\1\61\1\53\1\62\1\63\1\24\1\21"+ + "\1\64\1\21\1\65\1\66\1\21\1\67\2\21\1\70"+ + "\1\71\2\21\1\72\1\73\1\74\1\75\1\21\1\76"+ + "\1\24\1\21\1\77\1\100\1\21\2\50\1\101\1\50"+ + "\11\102\1\103\11\102\1\104\62\102\1\105\6\102\11\106"+ + "\1\103\11\106\1\107\20\106\1\105\50\106\11\110\1\103"+ + "\11\110\1\111\70\110\1\105\11\112\1\103\11\112\1\113"+ + "\12\112\1\105\56\112\11\114\1\103\11\114\1\115\23\114"+ + "\1\105\45\114\11\116\1\103\11\116\1\117\16\116\1\105"+ + "\52\116\11\120\1\103\11\120\1\121\26\120\1\105\42\120"+ + "\11\122\1\123\11\122\1\124\63\122\1\125\5\122\11\126"+ + "\1\103\11\126\1\127\67\126\1\130\1\126\11\131\1\103"+ + "\11\131\1\132\10\131\1\133\71\131\1\103\11\131\1\134"+ + "\10\131\1\133\71\131\1\103\11\131\1\135\10\131\1\136"+ + "\71\131\1\103\11\131\1\137\10\131\1\136\60\131\23\140"+ + "\1\141\1\140\1\142\67\140\7\20\1\0\13\20\3\0"+ + "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ + "\1\20\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\2\20\3\22\1\20\1\22\1\0\2\20"+ + "\1\143\3\20\1\144\4\20\3\0\6\20\1\144\21\0"+ + "\2\20\1\0\23\20\1\0\1\20\2\0\1\20\4\0"+ + "\3\20\2\145\1\20\1\145\1\0\2\20\1\146\10\20"+ + "\3\0\1\147\3\20\1\150\1\151\1\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\121\0\23\25"+ + "\1\0\71\25\1\20\6\21\1\0\2\20\2\21\1\152"+ + "\1\21\1\153\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\21\21\1\154\1\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\155\1\21\1\156"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\3\21\1\157\3\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\160\1\21\3\0\3\21\1\161"+ + "\1\21\1\162\1\21\21\0\2\20\1\0\13\21\1\163"+ + "\7\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\6\21\1\164\2\21\3\0\7\21\21\0"+ + "\2\20\1\0\11\21\1\165\11\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\166"+ + "\1\21\1\167\3\21\1\170\1\21\3\0\3\21\1\171"+ + "\3\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\172"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\11\21\1\173"+ + "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\174\1\175\1\176\2\21\1\177"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\17\21\1\200"+ + "\1\201\2\21\1\0\1\21\2\0\1\21\30\0\1\37"+ + "\115\0\1\47\1\202\16\0\1\53\47\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\203\1\21\1\204\4\21\3\0"+ + "\2\21\1\205\4\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\206\2\21\1\207\1\210\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\1\21\1\211\3\21\1\212"+ + "\3\21\3\0\3\21\1\212\3\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\213\4\21\3\0\2\21\1\214"+ + "\4\21\21\0\2\20\1\0\11\21\1\215\11\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\216\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\212\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ + "\2\20\1\0\5\21\1\217\15\21\1\0\1\21\2\0"+ + "\1\21\31\0\1\53\70\0\1\220\3\0\1\220\4\0"+ + "\11\220\3\0\7\220\2\0\1\53\21\0\23\220\1\0"+ + "\1\220\2\0\1\220\44\0\1\221\101\0\1\53\17\0"+ + "\1\53\74\0\1\53\5\0\1\222\5\0\1\223\2\0"+ + "\1\224\2\0\1\225\1\0\1\226\31\0\1\222\1\0"+ + "\1\222\2\0\1\222\1\227\1\230\27\0\1\231\23\0"+ + "\1\232\70\0\1\53\24\0\1\53\115\0\1\53\115\0"+ + "\1\53\40\0\1\20\1\233\3\234\1\233\1\234\1\0"+ + "\2\20\11\233\2\0\1\235\7\233\1\235\1\0\2\235"+ + "\2\0\1\236\4\235\1\0\3\235\2\0\2\234\1\235"+ + "\23\233\1\235\1\233\2\235\1\233\2\0\1\235\1\0"+ + "\1\20\1\233\3\20\1\233\1\20\1\0\2\20\11\233"+ + "\3\0\7\233\21\0\1\20\1\237\1\0\23\233\1\0"+ + "\1\233\2\0\1\233\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\6\21\1\240\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\241\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\3\21\1\242\3\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\243\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\244\6\21\3\0\7\21\21\0\2\20\1\0\20\21"+ + "\1\245\2\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\246\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\6\21\1\247\1\250"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\21\21\1\251"+ + "\1\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\252\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\253"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\254"+ + "\1\255\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ + "\1\256\1\21\1\0\1\21\2\0\1\21\4\0\11\102"+ + "\1\0\11\102\1\0\62\102\1\0\6\102\23\257\1\0"+ + "\71\257\11\106\1\0\11\106\1\0\20\106\1\0\50\106"+ + "\11\110\1\0\11\110\1\0\70\110\1\0\11\112\1\0"+ + "\11\112\1\0\12\112\1\0\56\112\11\114\1\0\11\114"+ + "\1\0\23\114\1\0\45\114\11\116\1\0\11\116\1\0"+ + "\16\116\1\0\52\116\11\120\1\0\11\120\1\0\26\120"+ + "\1\0\42\120\11\122\1\0\11\122\1\0\63\122\1\0"+ + "\5\122\23\260\1\0\71\260\11\126\1\0\11\126\1\0"+ + "\67\126\1\0\1\126\11\131\1\0\11\131\1\0\102\131"+ + "\1\0\11\131\1\0\44\131\1\261\35\131\1\0\11\131"+ + "\1\0\44\131\1\262\24\131\23\140\1\0\1\140\1\0"+ + "\67\140\16\0\1\263\76\0\2\20\3\22\1\20\1\22"+ + "\1\0\2\20\1\143\10\20\3\0\7\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ + "\3\264\1\20\1\264\1\0\13\20\3\0\7\20\1\265"+ + "\5\0\1\265\12\0\2\20\1\0\23\20\1\0\1\20"+ + "\2\0\1\20\4\0\3\20\2\145\1\20\1\145\1\0"+ + "\2\20\1\146\10\20\3\0\7\20\21\0\2\20\1\0"+ + "\23\20\1\0\1\20\2\0\1\20\4\0\3\20\2\266"+ + "\2\20\1\0\13\20\3\0\7\20\21\0\2\20\1\0"+ + "\23\20\1\0\1\20\2\0\1\20\4\0\2\20\3\267"+ + "\1\20\1\267\1\0\13\20\3\0\7\20\21\0\2\20"+ + "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\2\20"+ + "\5\270\1\0\6\20\3\270\2\20\3\0\1\270\3\20"+ + "\1\270\1\20\1\270\21\0\2\20\1\0\2\270\1\20"+ + "\1\270\2\20\1\270\6\20\1\270\5\20\1\0\1\20"+ + "\2\0\1\20\4\0\1\20\6\21\1\0\2\20\3\21"+ + "\1\271\2\21\1\272\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\273\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\274\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\275"+ + "\4\21\1\276\1\21\1\277\3\0\4\21\1\300\2\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\301\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\302\1\303\3\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\1\21\1\304\5\21\1\305\1\21\3\0\4\21\1\306"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\307"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\10\21"+ + "\1\310\3\0\4\21\1\212\2\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\311\4\21\3\0\2\21\1\312"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\313"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\7\21\1\314\1\21\3\0\2\21\1\313\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\2\21\1\315\6\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\316\10\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\317\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\2\21\1\320\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\4\21\1\244\2\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\16\21\1\321\4\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\303\2\21\3\0\7\21\21\0\2\20\1\0\11\21"+ + "\1\322\3\21\1\323\5\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\6\21\1\324\2\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\325\6\21\21\0\2\20\1\0\20\21\1\326"+ + "\2\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\327\1\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\330\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\331"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\332\4\21\1\333\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\22\0\1\334"+ + "\76\0\1\20\6\21\1\0\2\20\4\21\1\335\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\21\1\336\5\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\3\21\1\337\3\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\340\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\341\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\3\21"+ + "\1\342\5\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\343\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\5\21\1\344\1\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\7\21\1\212\1\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\244\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\5\21\1\345\3\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\1\212\22\21\1\0\1\21\2\0\1\21\5\0"+ + "\6\220\3\0\11\220\3\0\7\220\24\0\23\220\1\0"+ + "\1\220\2\0\1\220\44\0\1\53\115\0\1\223\2\0"+ + "\1\224\2\0\1\225\1\0\1\226\37\0\1\227\1\230"+ + "\54\0\1\53\66\0\1\346\7\0\1\347\51\0\1\350"+ + "\1\351\3\0\1\352\1\0\1\20\6\233\1\0\2\20"+ + "\11\233\3\0\7\233\21\0\2\20\1\0\23\233\1\0"+ + "\1\233\2\0\1\233\7\0\1\235\14\0\2\235\6\0"+ + "\1\235\1\0\1\235\31\0\2\235\6\0\1\235\4\0"+ + "\1\235\1\0\1\235\11\0\1\20\1\233\3\20\1\233"+ + "\1\20\1\0\2\20\11\233\3\0\7\233\21\0\2\20"+ + "\1\0\23\233\1\0\1\233\2\0\1\233\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\2\21\1\353\20\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\354\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\355\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\356\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\357\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\360\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\361\5\21\1\362\1\363\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\364\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\365\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\4\21\1\366\2\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\367\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\2\21\1\370\4\21"+ + "\21\0\2\20\1\0\11\21\1\311\11\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\371\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\274\4\21\3\0\2\21\1\372\4\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\11\131\1\0\11\131\1\0\40\131\1\373\41\131"+ + "\1\0\11\131\1\0\45\131\1\373\23\131\31\0\1\374"+ + "\63\0\2\20\3\264\1\20\1\264\1\0\2\20\1\375"+ + "\10\20\3\0\7\20\21\0\2\20\1\0\23\20\1\0"+ + "\1\20\2\0\1\20\6\0\3\376\1\0\1\376\106\0"+ + "\3\20\2\266\2\20\1\0\2\20\1\377\10\20\3\0"+ + "\7\20\21\0\2\20\1\0\23\20\1\0\1\20\2\0"+ + "\1\20\4\0\2\20\3\267\1\20\1\267\1\0\2\20"+ + "\1\u0100\10\20\3\0\7\20\21\0\2\20\1\0\23\20"+ + "\1\0\1\20\2\0\1\20\4\0\1\20\1\u0101\5\270"+ + "\1\0\2\20\4\u0101\3\270\2\u0101\3\0\1\270\3\u0101"+ + "\1\270\1\u0101\1\270\21\0\2\20\1\0\2\270\1\u0101"+ + "\1\270\2\u0101\1\270\6\u0101\1\270\5\u0101\1\0\1\u0101"+ + "\2\0\1\u0101\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\u0102\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\15\21"+ + "\1\u0103\2\21\1\u0104\2\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\1\21\1\u0104\7\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\212\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0105\1\u0106\5\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\u0107"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\15\21\1\u0108\5\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\7\21\21\0\2\20\1\0\11\21\1\212"+ + "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\3\21\1\u0109\5\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\10\21\1\u010a\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\4\21"+ + "\1\u0104\2\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+ + "\1\u010b\6\21\3\0\2\21\1\214\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\364\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\4\21\1\u010c\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\212\4\21\3\0\2\21\1\u010c\4\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\3\21\1\u010d\5\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\325\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\u0104\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\271\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\21\0"+ + "\2\20\1\0\14\21\1\u0104\1\21\1\354\4\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\u010e\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\u010f\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0110\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\1\u0111\6\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\20\21\1\u0104\2\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\6\21\1\u0112\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\3\21\1\303\3\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\7\0\1\u0113\11\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+ + "\1\u0114\4\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0115\1\212\3\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\322\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\u0116"+ + "\7\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0117"+ + "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\u0118\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\273"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\33\0\1\u0119\65\0\1\20\6\21\1\0\2\20"+ + "\6\21\1\u011a\2\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\274\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\360"+ + "\2\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\u0104"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\323\6\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\1\325\6\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u011b\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\212\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\u011c\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\30\0\1\346\61\0\1\350\1\351\3\0"+ + "\1\352\71\0\1\u011d\60\0\1\u011e\114\0\1\u011f\114\0"+ + "\1\u0120\60\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\7\21\21\0\2\20\1\0\4\21\1\u0121\16\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\6\21\1\273\2\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\4\21\1\u0122\4\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0123\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+ + "\3\21\1\u0104\3\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\2\21\1\u0124\4\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\15\21\1\u0125\5\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\7\21\1\u0126\1\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\212"+ + "\4\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\10\21\1\u0110\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\16\21"+ + "\1\u0127\1\21\1\325\2\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\3\21\1\372\5\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+ + "\1\u0128\1\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\3\21\1\u0129\3\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\10\21\1\u0104\3\0\7\21\21\0"+ + "\2\20\1\0\15\21\1\u0104\5\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\363"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\36\0\1\u012a\64\0\3\376\1\0"+ + "\1\376\3\0\1\u012b\102\0\1\20\6\21\1\0\2\20"+ + "\4\21\1\u012c\4\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\17\21\1\212\3\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\2\21\1\274\6\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u012d"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\3\21\1\363\5\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\2\21\1\u012e\4\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\u0104\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\u012f"+ + "\2\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\5\21\1\212\3\21\3\0\7\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\2\21\1\363\6\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\5\21\1\333"+ + "\1\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u0130"+ + "\1\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\10\21\1\212\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\4\21\1\u0131\2\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\7\21\1\u0132\1\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\2\21\1\212\6\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\15\21\1\273\5\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0133\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u0134\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ + "\1\u0135\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\34\0\1\u0136\64\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\14\21"+ + "\1\212\6\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u0137\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+ + "\1\u0138\3\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\70\0\1\u0139\4\0\1\u013a\113\0\1\u013b"+ + "\114\0\1\u013c\114\0\1\u013d\24\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\5\21"+ + "\1\212\15\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\1\21\1\u0126\5\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\17\21\1\u0104\3\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\u013e\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\7\21\21\0\2\20\1\0\21\21"+ + "\1\u0104\1\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\4\21\1\u013f\4\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\20\21\1\325\2\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\4\21\1\212\2\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\1\21\1\u0140\7\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\u0141\10\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\u0142"+ + "\4\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\u010a"+ + "\6\21\3\0\7\21\21\0\2\20\1\0\23\21\1\0"+ + "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+ + "\11\21\3\0\7\21\21\0\2\20\1\0\15\21\1\u0103"+ + "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\11\21\3\0\7\21\21\0\2\20\1\0"+ + "\11\21\1\u0143\11\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\6\21\1\u0104\2\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0\1\20\6\21\1\0\2\20\1\u0144\10\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\7\21\21\0\2\20\1\0\16\21\1\u0104\4\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\7\21\1\313\1\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\1\21\1\u0145\7\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\35\0\1\u0146\63\0\1\20\6\21\1\0\2\20\1\21"+ + "\1\u0147\7\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\4\21\1\u0128\4\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\70\0\1\u0148"+ + "\4\0\1\u0149\107\0\1\u014a\4\0\1\u014b\107\0\1\u014c"+ + "\4\0\1\u014d\23\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\1\21\1\u0104\5\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0104\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\5\21\1\u0104\3\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\13\21\1\u014e\7\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+ + "\3\0\3\21\1\u014f\3\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\6\21\1\303\2\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\11\21\3\0\7\21\21\0\2\20"+ + "\1\0\13\21\1\u0150\7\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\11\21\1\u0151\11\21\1\0\1\21"+ + "\2\0\1\21\112\0\1\u0139\114\0\1\u013a\115\0\1\u0152"+ + "\114\0\1\u0153\120\0\1\u0139\114\0\1\u013a\1\0\1\20"+ + "\6\21\1\0\2\20\6\21\1\u013f\2\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\4\21\1\u0154\4\21"+ + "\3\0\7\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\u0155\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\2\21\1\u0156\6\21\3\0\7\21\21\0\2\20"+ + "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+ + "\6\21\1\0\2\20\2\21\1\u0157\6\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+ + "\21\0\2\20\1\0\23\21\1\u0113\1\21\2\0\1\21"+ + "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+ + "\1\u0158\4\21\21\0\2\20\1\0\23\21\1\0\1\21"+ + "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+ + "\1\u0159\2\21\3\0\7\21\21\0\2\20\1\0\23\21"+ + "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+ + "\2\20\11\21\3\0\1\u015a\6\21\21\0\2\20\1\0"+ + "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+ + "\1\0\2\20\7\21\1\u015b\1\21\3\0\7\21\21\0"+ + "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+ + "\1\20\6\21\1\0\2\20\4\21\1\340\4\21\3\0"+ + "\7\21\21\0\2\20\1\0\23\21\1\0\1\21\2\0"+ + "\1\21\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[22638]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\17\0\4\1\1\11\11\1\1\11\11\1\1\11\2\1"+ + "\1\11\23\1\3\11\2\1\2\11\1\1\1\11\1\1"+ + "\1\11\1\1\1\11\1\1\1\11\1\1\1\11\1\1"+ + "\1\11\2\1\2\11\1\1\2\11\1\1\1\11\1\1"+ + "\2\11\1\1\1\11\1\1\1\11\40\1\1\0\17\1"+ + "\1\0\6\11\4\1\1\11\1\0\20\1\2\11\2\1"+ + "\1\0\50\1\1\0\11\1\5\0\21\1\1\0\26\1"+ + "\1\11\5\1\1\0\3\1\4\0\11\1\1\11\1\0"+ + "\12\1\1\0\2\1\2\11\3\0\10\1\1\11\1\1"+ + "\6\0\4\1\2\11\10\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[347]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\20\1\21\1\22\1\23\1\22\1\21\1\22\1\24" + - "\1\25\1\20\1\21\1\26\1\27\1\30\1\31\1\32" + - "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42" + - "\1\43\1\44\1\45\1\21\1\46\1\47\1\50\1\51" + - "\2\52\2\53\1\54\1\52\1\53\1\55\1\56\1\57" + - "\1\60\1\61\1\52\1\62\1\63\1\24\1\21\1\64" + - "\1\21\1\65\1\66\1\21\1\67\2\21\1\70\1\71" + - "\2\21\1\72\1\73\1\74\1\75\1\21\1\76\1\24" + - "\1\21\1\77\1\100\1\21\2\47\1\101\1\47\11\102" + - "\1\103\11\102\1\104\61\102\1\105\6\102\11\106\1\103" + - "\11\106\1\107\20\106\1\105\47\106\11\110\1\103\11\110" + - "\1\111\67\110\1\105\11\112\1\103\11\112\1\113\11\112" + - "\1\105\56\112\11\114\1\103\11\114\1\115\22\114\1\105" + - "\45\114\11\116\1\103\11\116\1\117\15\116\1\105\52\116" + - "\11\120\1\103\11\120\1\121\25\120\1\105\42\120\11\122" + - "\1\123\11\122\1\124\62\122\1\125\5\122\11\126\1\103" + - "\11\126\1\127\66\126\1\130\1\126\11\131\1\103\11\131" + - "\1\132\10\131\1\133\70\131\1\103\11\131\1\134\10\131" + - "\1\133\70\131\1\103\11\131\1\135\10\131\1\136\70\131" + - "\1\103\11\131\1\137\10\131\1\136\57\131\23\140\1\141" + - "\1\140\1\142\66\140\7\20\1\0\13\20\3\0\7\20" + - "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\2\20\3\22\1\20\1\22\1\0\2\20\1\143" + - "\3\20\1\144\4\20\3\0\6\20\1\144\20\0\2\20" + - "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\3\20" + - "\2\145\1\20\1\145\1\0\2\20\1\146\10\20\3\0" + - "\1\147\3\20\1\150\1\151\1\20\20\0\2\20\1\0" + - "\23\20\1\0\1\20\2\0\1\20\120\0\23\25\1\0" + - "\70\25\1\20\6\21\1\0\2\20\2\21\1\152\1\21" + - "\1\153\4\21\3\0\7\21\20\0\2\20\1\0\21\21" + - "\1\154\1\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\4\21\1\155\1\21\1\156\2\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21" + - "\3\0\3\21\1\157\3\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\7\21\1\160\1\21\3\0\3\21\1\161\1\21" + - "\1\162\1\21\20\0\2\20\1\0\13\21\1\163\7\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\6\21\1\164\2\21\3\0\7\21\20\0\2\20" + - "\1\0\11\21\1\165\11\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\1\21\1\166\1\21" + - "\1\167\3\21\1\170\1\21\3\0\3\21\1\171\3\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\6\21\1\172\2\21" + - "\3\0\7\21\20\0\2\20\1\0\11\21\1\173\11\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\2\21\1\174\1\175\1\176\2\21\1\177\1\21" + - "\3\0\7\21\20\0\2\20\1\0\17\21\1\200\1\201" + - "\2\21\1\0\1\21\2\0\1\21\30\0\1\37\114\0" + - "\1\53\1\202\16\0\1\52\46\0\1\20\6\21\1\0" + - "\2\20\2\21\1\203\1\21\1\204\4\21\3\0\2\21" + - "\1\205\4\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21" + - "\1\206\2\21\1\207\1\210\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\1\21\1\211\3\21\1\212\3\21" + - "\3\0\3\21\1\212\3\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\4\21\1\213\4\21\3\0\2\21\1\214\4\21" + - "\20\0\2\20\1\0\11\21\1\215\11\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21" + - "\1\216\4\21\3\0\7\21\20\0\2\20\1\0\11\21" + - "\1\212\11\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20" + - "\1\0\5\21\1\217\15\21\1\0\1\21\2\0\1\21" + - "\5\0\1\220\3\0\1\220\4\0\11\220\3\0\7\220" + - "\1\0\1\52\21\0\23\220\1\0\1\220\2\0\1\220" + - "\43\0\1\221\101\0\1\52\113\0\1\52\17\0\1\52" + - "\73\0\1\52\5\0\1\222\4\0\1\223\3\0\1\224" + - "\1\0\1\225\1\0\1\226\31\0\1\222\1\0\1\222" + - "\2\0\1\222\1\227\1\230\27\0\1\231\22\0\1\232" + - "\70\0\1\52\23\0\1\52\114\0\1\52\114\0\1\52" + - "\40\0\1\20\1\233\3\234\1\233\1\234\1\0\2\20" + - "\11\233\2\0\1\235\7\233\1\0\2\235\2\0\1\236" + - "\4\235\1\0\3\235\2\0\2\234\1\235\23\233\1\235" + - "\1\233\2\235\1\233\2\0\1\235\1\0\1\20\1\233" + - "\3\20\1\233\1\20\1\0\2\20\11\233\3\0\7\233" + - "\20\0\1\20\1\237\1\0\23\233\1\0\1\233\2\0" + - "\1\233\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\6\21\1\240\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21" + - "\1\241\1\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\3\21\1\242\3\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\2\21\1\243\6\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\2\21\1\244\6\21" + - "\3\0\7\21\20\0\2\20\1\0\20\21\1\245\2\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\1\21\1\246\7\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\6\21\1\247\1\250\1\21\3\0" + - "\7\21\20\0\2\20\1\0\21\21\1\251\1\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\252" + - "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\2\21\1\253\4\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\2\21\1\254\1\255\5\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21" + - "\3\0\7\21\20\0\2\20\1\0\21\21\1\256\1\21" + - "\1\0\1\21\2\0\1\21\4\0\11\102\1\0\11\102" + - "\1\0\61\102\1\0\6\102\23\257\1\0\70\257\11\106" + - "\1\0\11\106\1\0\20\106\1\0\47\106\11\110\1\0" + - "\11\110\1\0\67\110\1\0\11\112\1\0\11\112\1\0" + - "\11\112\1\0\56\112\11\114\1\0\11\114\1\0\22\114" + - "\1\0\45\114\11\116\1\0\11\116\1\0\15\116\1\0" + - "\52\116\11\120\1\0\11\120\1\0\25\120\1\0\42\120" + - "\11\122\1\0\11\122\1\0\62\122\1\0\5\122\23\260" + - "\1\0\70\260\11\126\1\0\11\126\1\0\66\126\1\0" + - "\1\126\11\131\1\0\11\131\1\0\101\131\1\0\11\131" + - "\1\0\43\131\1\261\35\131\1\0\11\131\1\0\43\131" + - "\1\262\24\131\23\140\1\0\1\140\1\0\66\140\16\0" + - "\1\263\75\0\2\20\3\22\1\20\1\22\1\0\2\20" + - "\1\143\10\20\3\0\7\20\20\0\2\20\1\0\23\20" + - "\1\0\1\20\2\0\1\20\4\0\2\20\3\264\1\20" + - "\1\264\1\0\13\20\3\0\7\20\20\0\2\20\1\0" + - "\23\20\1\0\1\20\2\0\1\20\4\0\3\20\2\145" + - "\1\20\1\145\1\0\2\20\1\146\10\20\3\0\7\20" + - "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20" + - "\4\0\3\20\2\265\2\20\1\0\13\20\3\0\7\20" + - "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20" + - "\4\0\2\20\3\266\1\20\1\266\1\0\13\20\3\0" + - "\7\20\20\0\2\20\1\0\23\20\1\0\1\20\2\0" + - "\1\20\4\0\2\20\5\267\1\0\6\20\3\267\2\20" + - "\3\0\1\267\3\20\1\267\1\20\1\267\20\0\2\20" + - "\1\0\2\267\1\20\1\267\2\20\1\267\6\20\1\267" + - "\5\20\1\0\1\20\2\0\1\20\4\0\1\20\6\21" + - "\1\0\2\20\3\21\1\270\2\21\1\271\2\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\272" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21" + - "\1\273\4\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\1\21\1\274\4\21\1\275\1\21\1\276\3\0" + - "\4\21\1\277\2\21\20\0\2\20\1\0\23\21\1\0" + - "\1\300\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\2\21\1\301\1\302\3\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\1\21\1\303\5\21\1\304\1\21" + - "\3\0\4\21\1\305\2\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\10\21\1\306\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\10\21\1\307\3\0\4\21\1\212\2\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\4\21\1\310\4\21" + - "\3\0\2\21\1\311\4\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\6\21\1\312\2\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\7\21\1\313\1\21\3\0\2\21" + - "\1\312\4\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21" + - "\1\314\6\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\1\315\10\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\316\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\317" + - "\4\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\4\21\1\244\2\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\320" + - "\4\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\6\21\1\302\2\21\3\0\7\21\20\0" + - "\2\20\1\0\11\21\1\321\3\21\1\322\5\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\6\21\1\323\2\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\1\324\6\21\20\0\2\20" + - "\1\0\20\21\1\325\2\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\7\21\1\326\1\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21" + - "\1\327\4\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\10\21\1\330\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\2\21\1\331\4\21\1\332\1\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\22\0\1\333\75\0\1\20\6\21\1\0\2\20" + - "\4\21\1\334\4\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\1\21\1\335\5\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\3\21\1\336" + - "\3\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\337" + - "\7\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\340" + - "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\3\21\1\341\5\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\4\21\1\342\4\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\5\21\1\343\1\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\7\21\1\212\1\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\244\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\5\21\1\344\3\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\1\212\22\21\1\0\1\21" + - "\2\0\1\21\5\0\6\220\3\0\11\220\3\0\7\220" + - "\23\0\23\220\1\0\1\220\2\0\1\220\43\0\1\52" + - "\114\0\1\223\3\0\1\224\1\0\1\225\1\0\1\226" + - "\37\0\1\227\1\230\53\0\1\52\66\0\1\345\7\0" + - "\1\346\50\0\1\347\1\350\3\0\1\351\1\0\1\20" + - "\6\233\1\0\2\20\11\233\3\0\7\233\20\0\2\20" + - "\1\0\23\233\1\0\1\233\2\0\1\233\7\0\1\235" + - "\14\0\2\235\6\0\1\235\1\0\1\235\30\0\2\235" + - "\6\0\1\235\4\0\1\235\1\0\1\235\11\0\1\20" + - "\1\233\3\20\1\233\1\20\1\0\2\20\11\233\3\0" + - "\7\233\20\0\2\20\1\0\23\233\1\0\1\233\2\0" + - "\1\233\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\2\21\1\352\20\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\353" + - "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\354\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\2\21\1\355\6\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\356" + - "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\2\21\1\357\6\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\360\5\21\1\361\1\362\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\363" + - "\2\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\364" + - "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\4\21\1\365\2\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\4\21\1\366\4\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\2\21\1\367\4\21\20\0\2\20\1\0\11\21\1\310" + - "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\370\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\4\21\1\273\4\21\3\0" + - "\2\21\1\371\4\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\11\131\1\0\11\131\1\0" + - "\37\131\1\372\41\131\1\0\11\131\1\0\44\131\1\372" + - "\23\131\31\0\1\373\62\0\2\20\3\264\1\20\1\264" + - "\1\0\2\20\1\374\10\20\3\0\7\20\20\0\2\20" + - "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\3\20" + - "\2\265\2\20\1\0\2\20\1\375\10\20\3\0\7\20" + - "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20" + - "\4\0\2\20\3\266\1\20\1\266\1\0\2\20\1\376" + - "\10\20\3\0\7\20\20\0\2\20\1\0\23\20\1\0" + - "\1\20\2\0\1\20\4\0\1\20\1\377\5\267\1\0" + - "\2\20\4\377\3\267\2\377\3\0\1\267\3\377\1\267" + - "\1\377\1\267\20\0\2\20\1\0\2\267\1\377\1\267" + - "\2\377\1\267\6\377\1\267\5\377\1\0\1\377\2\0" + - "\1\377\4\0\1\20\6\21\1\0\2\20\4\21\1\u0100" + - "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\15\21\1\u0101" + - "\2\21\1\u0102\2\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\1\21\1\u0102\7\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\3\21\1\212\3\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\2\21\1\u0103\1\u0104\5\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\4\21\1\u0105\2\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21" + - "\20\0\2\20\1\0\15\21\1\u0106\5\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21" + - "\3\0\7\21\20\0\2\20\1\0\11\21\1\212\11\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\3\21\1\u0107\5\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\10\21\1\u0108\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\u0102" + - "\2\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\u0109" + - "\6\21\3\0\2\21\1\214\4\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\4\21\1\363\4\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\4\21\1\u010a\4\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\212" + - "\4\21\3\0\2\21\1\u010a\4\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\3\21\1\u010b\5\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\20\0" + - "\2\20\1\0\15\21\1\u0102\5\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\324" + - "\7\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\7\21\1\u0102\1\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\10\21\1\270\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20" + - "\1\0\14\21\1\u0102\1\21\1\353\4\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21" + - "\1\u010c\4\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\11\21" + - "\1\u010d\11\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\6\21\1\u010e\2\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\1\u010f" + - "\6\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\20\21\1\u0102\2\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\6\21\1\u0110\2\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\3\21\1\302\3\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\7\0" + - "\1\u0111\10\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\u0112" + - "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\4\21\1\u0113\1\212\3\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\4\21\1\321\4\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\1\21\1\u0114\7\21" + - "\3\0\7\21\20\0\2\20\1\0\15\21\1\u0115\5\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\2\21\1\u0116\4\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\2\21\1\272\4\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\33\0\1\u0117\64\0\1\20\6\21\1\0\2\20\6\21" + - "\1\u0118\2\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\2\21\1\273\4\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\4\21\1\357\2\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\10\21\1\u0102\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\1\322\6\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21" + - "\3\0\1\324\6\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\2\21\1\u0119\6\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\212\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\u011a" + - "\4\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\30\0\1\345\60\0\1\347\1\350\3\0\1\351" + - "\70\0\1\u011b\60\0\1\u011c\113\0\1\u011d\113\0\1\u011e" + - "\57\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21" + - "\20\0\2\20\1\0\4\21\1\u011f\16\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21" + - "\1\272\2\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\4\21\1\u0120\4\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\6\21\1\u0121\2\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21" + - "\1\u0102\3\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21" + - "\3\0\2\21\1\u0122\4\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\15\21" + - "\1\u0123\5\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\7\21\1\u0124\1\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\4\21\1\212\4\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\10\21" + - "\1\u010e\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\u0125" + - "\1\21\1\324\2\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\3\21\1\371\5\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u0126" + - "\1\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\3\21\1\u0127\3\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\10\21\1\u0102\3\0\7\21\20\0\2\20" + - "\1\0\15\21\1\u0102\5\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\7\21\1\362\1\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\36\0\1\u0128\61\0\1\20\6\21\1\0" + - "\2\20\4\21\1\u0129\4\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20" + - "\1\0\17\21\1\212\3\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\2\21\1\273\6\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21" + - "\1\u012a\1\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\3\21\1\362\5\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\2\21\1\u012b\4\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\4\21\1\u0102\4\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21" + - "\1\u012c\2\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\5\21\1\212\3\21\3\0\7\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\2\21\1\362\6\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\5\21" + - "\1\332\1\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21" + - "\1\u012d\1\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\10\21\1\212\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\4\21\1\u012e\2\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\7\21\1\u012f\1\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\212" + - "\6\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\15\21\1\272" + - "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\4\21\1\u0130\4\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\6\21\1\u0131\2\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\3\21\1\u0132\3\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\34\0\1\u0133\63\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0" + - "\14\21\1\212\6\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\6\21\1\u0134\2\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\3\21\1\u0135\3\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\67\0\1\u0136\4\0\1\u0137\112\0" + - "\1\u0138\113\0\1\u0139\113\0\1\u013a\24\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0" + - "\5\21\1\212\15\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\1\21\1\u0124" + - "\5\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\17\21\1\u0102\3\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\3\21\1\u013b\3\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0" + - "\21\21\1\u0102\1\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\4\21\1\u013c\4\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\20\21\1\324\2\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\4\21\1\212\2\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\1\21\1\u013d\7\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\1\u013e\10\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21" + - "\1\u013f\4\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21" + - "\1\u0108\6\21\3\0\7\21\20\0\2\20\1\0\23\21" + - "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0" + - "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\15\21" + - "\1\u0101\5\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20" + - "\1\0\11\21\1\u0140\11\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\6\21\1\u0102\2\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\u0141" + - "\10\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\u0102" + - "\4\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\7\21\1\312\1\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\1\21\1\u0142\7\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\35\0\1\u0143\62\0\1\20\6\21\1\0\2\20" + - "\1\21\1\u0144\7\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\4\21\1\u0126\4\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\67\0" + - "\1\u0145\4\0\1\u0146\106\0\1\u0147\4\0\1\u0148\106\0" + - "\1\u0149\4\0\1\u014a\23\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\1\21\1\u0102\5\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\2\21\1\u0102\6\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\5\21\1\u0102\3\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\13\21\1\u014b\7\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\11\21\3\0\3\21\1\u014c\3\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\6\21\1\302\2\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\20\0" + - "\2\20\1\0\13\21\1\u014d\7\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\11\21\1\u014e\11\21\1\0" + - "\1\21\2\0\1\21\111\0\1\u0136\113\0\1\u0137\114\0" + - "\1\u014f\113\0\1\u0150\117\0\1\u0136\113\0\1\u0137\1\0" + - "\1\20\6\21\1\0\2\20\6\21\1\u013c\2\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\u0151" + - "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\6\21\1\u0152\2\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\2\21\1\u0153\6\21\3\0\7\21\20\0" + - "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0" + - "\1\20\6\21\1\0\2\20\2\21\1\u0154\6\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\7\21\20\0\2\20\1\0\23\21\1\u0111\1\21\2\0" + - "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0" + - "\2\21\1\u0155\4\21\20\0\2\20\1\0\23\21\1\0" + - "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20" + - "\6\21\1\u0156\2\21\3\0\7\21\20\0\2\20\1\0" + - "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21" + - "\1\0\2\20\11\21\3\0\1\u0157\6\21\20\0\2\20" + - "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20" + - "\6\21\1\0\2\20\7\21\1\u0158\1\21\3\0\7\21" + - "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21" + - "\4\0\1\20\6\21\1\0\2\20\4\21\1\337\4\21" + - "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21" + - "\2\0\1\21\4\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[22192]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOF heredoc. + */ + public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an unquoted/double quoted/backtick EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an single quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * an double quoted EOT heredoc. + */ + public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q!...! style double quoted string. + */ + public static final int INTERNAL_STRING_Q_BANG = -7; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q{...} style double quoted string. + */ + public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q<...> style double quoted string. + */ + public static final int INTERNAL_STRING_Q_LT = -9; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q(...) style double quoted string. + */ + public static final int INTERNAL_STRING_Q_PAREN = -10; + + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q/.../ style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SLASH = -11; + + /** + * Token type specific to RubyTokenMaker; this signals that we are inside + * a %Q[...] style double quoted string. + */ + public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public RubyTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "#", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.COMMENT_DOCUMENTATION: + state = DOCCOMMENT; + start = text.offset; + break; + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR_LITERAL; + start = text.offset; + break; + case Token.LITERAL_BACKQUOTE: + state = BACKTICKS; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_UNQUOTED: + state = HEREDOC_EOF_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: + state = HEREDOC_EOF_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: + state = HEREDOC_EOF_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_UNQUOTED: + state = HEREDOC_EOT_UNQUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: + state = HEREDOC_EOT_SINGLE_QUOTED; + start = text.offset; + break; + case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: + state = HEREDOC_EOT_DOUBLE_QUOTED; + start = text.offset; + break; + case INTERNAL_STRING_Q_BANG: + state = STRING_Q_BANG; + start = text.offset; + break; + case INTERNAL_STRING_Q_CURLY_BRACE: + state = STRING_Q_CURLY_BRACE; + start = text.offset; + break; + case INTERNAL_STRING_Q_LT: + state = STRING_Q_LT; + start = text.offset; + break; + case INTERNAL_STRING_Q_PAREN: + state = STRING_Q_PAREN; + start = text.offset; + break; + case INTERNAL_STRING_Q_SLASH: + state = STRING_Q_SLASH; + start = text.offset; + break; + case INTERNAL_STRING_Q_SQUARE_BRACKET: + state = STRING_Q_SQUARE_BRACKET; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public RubyTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public RubyTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 188) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\17\0\4\1\1\11\11\1\1\11\10\1\1\11\2\1" + - "\1\11\24\1\3\11\2\1\2\11\1\1\1\11\1\1" + - "\1\11\1\1\1\11\1\1\1\11\1\1\1\11\1\1" + - "\1\11\2\1\2\11\1\1\2\11\1\1\1\11\1\1" + - "\2\11\1\1\1\11\1\1\1\11\40\1\1\0\17\1" + - "\1\0\6\11\4\1\1\11\1\0\20\1\2\11\2\1" + - "\1\0\47\1\1\0\11\1\5\0\21\1\1\0\25\1" + - "\1\11\5\1\1\0\3\1\4\0\11\1\1\11\12\1" + - "\1\0\2\1\2\11\3\0\10\1\1\11\1\1\6\0" + - "\4\1\2\11\10\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[344]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } + throw new Error(message); + } - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an unquoted/double quoted/backtick EOF - * heredoc. - */ - public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an single quoted EOF heredoc. - */ - public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an double quoted EOF heredoc. - */ - public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an unquoted/double quoted/backtick EOT - * heredoc. - */ - public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an single quoted EOT heredoc. - */ - public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside an double quoted EOT heredoc. - */ - public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q!...! style double quoted string. - */ - public static final int INTERNAL_STRING_Q_BANG = -7; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q{...} style double quoted string. - */ - public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q<...> style double quoted - * string. - */ - public static final int INTERNAL_STRING_Q_LT = -9; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q(...) style double quoted string. - */ - public static final int INTERNAL_STRING_Q_PAREN = -10; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q/.../ style double quoted string. - */ - public static final int INTERNAL_STRING_Q_SLASH = -11; - - /** - * Token type specific to RubyTokenMaker; this signals that we are inside a %Q[...] style double quoted string. - */ - public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12; - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public RubyTokenMaker() { - } - /** - * Adds the token specified to the current linked list of tokens as an "end token;" that is, at - * zzMarkedPos. - * - * @param tokenType - * The token's type. - */ - private void addEndToken(int tokenType) { - addToken(zzMarkedPos, zzMarkedPos, tokenType); - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } + zzMarkedPos -= number; + } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "#", null }; - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return type == Token.IDENTIFIER || type == Token.VARIABLE; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_DOCUMENTATION: - state = DOCCOMMENT; - start = text.offset; - break; - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR_LITERAL; - start = text.offset; - break; - case Token.LITERAL_BACKQUOTE: - state = BACKTICKS; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOF_UNQUOTED: - state = HEREDOC_EOF_UNQUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED: - state = HEREDOC_EOF_SINGLE_QUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED: - state = HEREDOC_EOF_DOUBLE_QUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOT_UNQUOTED: - state = HEREDOC_EOT_UNQUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED: - state = HEREDOC_EOT_SINGLE_QUOTED; - start = text.offset; - break; - case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED: - state = HEREDOC_EOT_DOUBLE_QUOTED; - start = text.offset; - break; - case INTERNAL_STRING_Q_BANG: - state = STRING_Q_BANG; - start = text.offset; - break; - case INTERNAL_STRING_Q_CURLY_BRACE: - state = STRING_Q_CURLY_BRACE; - start = text.offset; - break; - case INTERNAL_STRING_Q_LT: - state = STRING_Q_LT; - start = text.offset; - break; - case INTERNAL_STRING_Q_PAREN: - state = STRING_Q_PAREN; - start = text.offset; - break; - case INTERNAL_STRING_Q_SLASH: - state = STRING_Q_SLASH; - start = text.offset; - break; - case INTERNAL_STRING_Q_SQUARE_BRACKET: - state = STRING_Q_SQUARE_BRACKET; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public RubyTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public RubyTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 188) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + zzAction = -1; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + zzState = zzLexicalState; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 39: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_LT); - } - case 52: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 53: - break; - case 45: { - addToken(Token.LITERAL_BOOLEAN); - } - case 54: - break; - case 32: { - addToken(start, zzStartRead - 1, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 55: - break; - case 19: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_PAREN); - return firstToken; - } - case 56: - break; - case 18: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); - return firstToken; - } - case 57: - break; - case 20: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_SLASH); - return firstToken; - } - case 58: - break; - case 46: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 3, Token.COMMENT_DOCUMENTATION); - } - case 59: - break; - case 10: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 60: - break; - case 44: { - if (start == zzStartRead) { - addToken(Token.PREPROCESSOR); - addNullToken(); - return firstToken; - } - } - case 61: - break; - case 9: { - addToken(Token.FUNCTION); - } - case 62: - break; - case 22: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_LT); - return firstToken; - } - case 63: - break; - case 42: { - addToken(Token.VARIABLE); - } - case 64: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); - } - case 65: - break; - case 31: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); - return firstToken; - } - case 66: - break; - case 4: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 67: - break; - case 41: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_CURLY_BRACE); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 68: - break; - case 50: { - start = zzStartRead; - yybegin(HEREDOC_EOF_SINGLE_QUOTED); - } - case 69: - break; - case 51: { - start = zzStartRead; - yybegin(HEREDOC_EOT_SINGLE_QUOTED); - } - case 70: - break; - case 47: { - start = zzStartRead; - yybegin(HEREDOC_EOF_UNQUOTED); - } - case 71: - break; - case 14: { /* Skip escaped chars. */ - } - case 72: - break; - case 25: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 73: - break; - case 43: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 74: - break; - case 28: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); - return firstToken; - } - case 75: - break; - case 6: { - addToken(Token.WHITESPACE); - } - case 76: - break; - case 17: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_BANG); - return firstToken; - } - case 77: - break; - case 35: { - addToken(Token.PREPROCESSOR); - } - case 78: - break; - case 11: { - start = zzMarkedPos - 1; - yybegin(CHAR_LITERAL); - } - case 79: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 80: - break; - case 38: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_SLASH); - } - case 81: - break; - case 27: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_BACKQUOTE); - } - case 82: - break; - case 16: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 83: - break; - case 37: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_BANG); - } - case 84: - break; - case 23: { /* Skip escaped single quotes only, but this should still work. */ - } - case 85: - break; - case 30: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); - return firstToken; - } - case 86: - break; - case 49: { - start = zzMarkedPos - 6; - yybegin(DOCCOMMENT); - } - case 87: - break; - case 34: { - addToken(Token.RESERVED_WORD); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 39: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT); + } + case 52: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 53: break; + case 45: + { addToken(Token.LITERAL_BOOLEAN); + } + case 54: break; + case 32: + { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken; + } + case 55: break; + case 19: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; + } + case 56: break; + case 18: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; + } + case 57: break; + case 20: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; + } + case 58: break; + case 46: + { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION); + } + case 59: break; + case 10: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 60: break; + case 44: + { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; } + } + case 61: break; + case 9: + { addToken(Token.FUNCTION); + } + case 62: break; + case 22: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; + } + case 63: break; + case 42: + { addToken(Token.VARIABLE); + } + case 64: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 65: break; + case 31: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; + } + case 66: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 67: break; + case 41: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE); + } + case 68: break; + case 50: + { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED); + } + case 69: break; + case 51: + { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED); + } + case 70: break; + case 47: + { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED); + } + case 71: break; + case 14: + { /* Skip escaped chars. */ + } + case 72: break; + case 25: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 73: break; + case 43: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 74: break; + case 28: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; + } + case 75: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 76: break; + case 17: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; + } + case 77: break; + case 35: + { addToken(Token.PREPROCESSOR); + } + case 78: break; + case 11: + { start = zzMarkedPos-1; yybegin(CHAR_LITERAL); + } + case 79: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 80: break; + case 38: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH); + } + case 81: break; + case 27: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + } + case 82: break; + case 16: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 83: break; + case 37: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG); + } + case 84: break; + case 23: + { /* Skip escaped single quotes only, but this should still work. */ + } + case 85: break; + case 30: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; + } + case 86: break; + case 49: + { start = zzMarkedPos-6; yybegin(DOCCOMMENT); + } + case 87: break; + case 34: + { addToken(Token.RESERVED_WORD); + } + case 88: break; + case 26: + { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; + } + case 89: break; + case 36: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET); + } + case 90: break; + case 8: + { addToken(Token.SEPARATOR); + } + case 91: break; + case 5: + { addNullToken(); return firstToken; + } + case 92: break; + case 21: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; + } + case 93: break; + case 40: + { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN); + } + case 94: break; + case 7: + { addToken(Token.OPERATOR); + } + case 95: break; + case 24: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 96: break; + case 33: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 97: break; + case 48: + { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED); + } + case 98: break; + case 12: + { start = zzMarkedPos-1; yybegin(BACKTICKS); + } + case 99: break; + case 13: + { + } + case 100: break; + case 15: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 101: break; + case 29: + { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; + } + case 102: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case HEREDOC_EOF_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken; } - case 88: - break; - case 26: { - addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); - return firstToken; + case 348: break; + case DOCCOMMENT: { + yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken; } - case 89: - break; - case 36: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_SQUARE_BRACKET); + case 349: break; + case HEREDOC_EOT_SINGLE_QUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken; } - case 90: - break; - case 8: { - addToken(Token.SEPARATOR); + case 350: break; + case HEREDOC_EOT_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken; } - case 91: - break; - case 5: { - addNullToken(); - return firstToken; + case 351: break; + case STRING_Q_SLASH: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken; } - case 92: - break; - case 21: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); - return firstToken; + case 352: break; + case STRING_Q_BANG: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken; } - case 93: - break; - case 40: { - start = zzMarkedPos - yylength(); - yybegin(STRING_Q_PAREN); + case 353: break; + case STRING_Q_LT: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken; } - case 94: - break; - case 7: { - addToken(Token.OPERATOR); + case 354: break; + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 95: - break; - case 24: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; + case 355: break; + case BACKTICKS: { + addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken; } - case 96: - break; - case 33: { - addToken(Token.LITERAL_NUMBER_FLOAT); + case 356: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 97: - break; - case 48: { - start = zzStartRead; - yybegin(HEREDOC_EOT_UNQUOTED); + case 357: break; + case HEREDOC_EOF_UNQUOTED: { + addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken; } - case 98: - break; - case 12: { - start = zzMarkedPos - 1; - yybegin(BACKTICKS); + case 358: break; + case STRING_Q_CURLY_BRACE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken; } - case 99: - break; - case 13: { + case 359: break; + case STRING_Q_PAREN: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken; } - case 100: - break; - case 15: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; + case 360: break; + case CHAR_LITERAL: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 101: - break; - case 29: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); - return firstToken; + case 361: break; + case STRING_Q_SQUARE_BRACKET: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken; } - case 102: - break; + case 362: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case HEREDOC_EOF_SINGLE_QUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); - return firstToken; - } - case 345: - break; - case DOCCOMMENT: { - yybegin(YYINITIAL); - addToken(start, zzEndRead, Token.COMMENT_DOCUMENTATION); - return firstToken; - } - case 346: - break; - case HEREDOC_EOT_SINGLE_QUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); - return firstToken; - } - case 347: - break; - case HEREDOC_EOT_UNQUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); - return firstToken; - } - case 348: - break; - case STRING_Q_SLASH: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_SLASH); - return firstToken; - } - case 349: - break; - case STRING_Q_BANG: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_BANG); - return firstToken; - } - case 350: - break; - case STRING_Q_LT: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_LT); - return firstToken; - } - case 351: - break; - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 352: - break; - case BACKTICKS: { - addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); - return firstToken; - } - case 353: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 354: - break; - case HEREDOC_EOF_UNQUOTED: { - addToken(start, zzStartRead - 1, Token.PREPROCESSOR); - addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); - return firstToken; - } - case 355: - break; - case STRING_Q_CURLY_BRACE: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); - return firstToken; - } - case 356: - break; - case STRING_Q_PAREN: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_PAREN); - return firstToken; - } - case 357: - break; - case CHAR_LITERAL: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 358: - break; - case STRING_Q_SQUARE_BRACKET: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); - return firstToken; - } - case 359: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex old mode 100644 new mode 100755 index 86727ce54..961d6ac13 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.flex @@ -2,23 +2,9 @@ * 02/25/2005 * * SASTokenMaker.java - Scanner for SAS files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                              - *
                            • The generated SASTokenMaker.java file will contain two + *
                            • The generated SASTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -119,6 +105,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -126,13 +113,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "*", null }; } @@ -193,7 +177,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -204,9 +188,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -221,7 +204,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java old mode 100644 new mode 100755 index 417ec9053..a56d2b46e --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SASTokenMaker.java @@ -4,23 +4,9 @@ * 02/25/2005 * * SASTokenMaker.java - Scanner for SAS files. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1488 +15,1474 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * This class generates tokens representing a text stream as SAS. - *

                              - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                              - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                              - * + * This class generates tokens representing a text stream as SAS.

                              + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                              + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                              + * * If you wish to regenerate this file yourself, keep in mind the following: *

                                - *
                              • The generated SASTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                              • - *
                              • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                              • - *
                              • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                              • + *
                              • The generated SASTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                              • + *
                              • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                              • + *
                              • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                              • *
                              - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class SASTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int STRING = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 6; - public static final int CHAR = 4; - - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l ZZ_LEXSTATE[l+1] is the state in the DFA for the - * lexical state l at the beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 1, 2, 2, 3, 3, 4, 4 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\3\1\1\25\0\1\3\1\0\1\23\2\0\1\53\1\4" + - "\1\24\2\22\1\6\1\5\1\0\1\5\1\0\1\7\2\2\1\52" + - "\1\51\1\45\5\2\1\0\1\0\1\10\1\12\1\10\2\0\1\26" + - "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44" + - "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35" + - "\1\46\1\47\1\43\1\41\1\50\3\0\1\10\1\25\1\0\1\26" + - "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44" + - "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35" + - "\1\46\1\47\1\43\1\41\1\50\1\0\1\5\1\0\1\11\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\1\1\1\2\1\1\1\3\1\1\3\4\3\1" + - "\1\5\4\1\1\6\1\7\1\10\15\1\1\5\4\1" + - "\1\3\1\11\1\12\1\13\1\14\1\12\1\15\1\16" + - "\1\12\1\17\1\12\1\20\1\21\1\4\7\1\1\5" + - "\5\1\1\4\3\1\1\4\15\1\1\5\66\1\1\5" + - "\14\1\21\0\1\22\1\5\5\1\1\5\66\1\1\23" + - "\50\1\1\5\15\1\1\5\1\1\1\5\4\1\1\5" + - "\20\1\1\5\3\1\7\0\1\24\2\0\1\24\24\0" + - "\21\1\1\5\6\1\1\5\44\1\1\5\1\1\1\5" + - "\11\1\1\5\7\1\1\5\4\1\1\23\22\1\1\5" + - "\5\1\12\0\1\24\16\0\10\1\1\5\3\1\1\5" + - "\13\1\1\5\2\1\1\5\3\1\1\5\23\1\1\5" + - "\10\1\1\23\2\5\6\1\16\0\42\1\13\0\17\1" + - "\2\0\12\1"; - - private static int[] zzUnpackAction() { - int[] result = new int[639]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 2; + public static final int YYINITIAL = 0; + public static final int MLC = 6; + public static final int CHAR = 4; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 1, 2, 2, 3, 3, 4, 4 + }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\1\25\0\1\3\1\0\1\23\2\0\1\53\1\4"+ + "\1\24\2\22\1\6\1\5\1\0\1\5\1\0\1\7\2\2\1\52"+ + "\1\51\1\45\5\2\1\0\1\0\1\10\1\12\1\10\2\0\1\26"+ + "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ + "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ + "\1\46\1\47\1\43\1\41\1\50\3\0\1\10\1\25\1\0\1\26"+ + "\1\42\1\27\1\32\1\13\1\33\1\16\1\30\1\21\1\2\1\44"+ + "\1\20\1\36\1\15\1\40\1\37\1\14\1\31\1\34\1\17\1\35"+ + "\1\46\1\47\1\43\1\41\1\50\1\0\1\5\1\0\1\11\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\1\1\1\2\1\1\1\3\1\1\3\4\3\1"+ + "\1\5\4\1\1\6\1\7\1\10\15\1\1\5\4\1"+ + "\1\3\1\11\1\12\1\13\1\14\1\12\1\15\1\16"+ + "\1\12\1\17\1\12\1\20\1\21\1\4\7\1\1\5"+ + "\5\1\1\4\3\1\1\4\15\1\1\5\66\1\1\5"+ + "\14\1\21\0\1\22\1\5\5\1\1\5\66\1\1\23"+ + "\50\1\1\5\15\1\1\5\1\1\1\5\4\1\1\5"+ + "\20\1\1\5\3\1\7\0\1\24\2\0\1\24\24\0"+ + "\21\1\1\5\6\1\1\5\44\1\1\5\1\1\1\5"+ + "\11\1\1\5\7\1\1\5\4\1\1\23\22\1\1\5"+ + "\5\1\12\0\1\24\16\0\10\1\1\5\3\1\1\5"+ + "\13\1\1\5\2\1\1\5\3\1\1\5\23\1\1\5"+ + "\10\1\1\23\2\5\6\1\16\0\42\1\13\0\17\1"+ + "\2\0\12\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[639]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\54\0\130\0\204\0\260\0\334\0\334\0\u0108" + - "\0\u0134\0\u0160\0\334\0\u018c\0\u01b8\0\u01b8\0\u01e4\0\u0210" + - "\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec\0\334\0\334\0\334" + - "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\u03f4\0\u0420\0\u044c" + - "\0\u0478\0\u04a4\0\u04d0\0\u04fc\0\u0528\0\u0108\0\u0554\0\u0580" + - "\0\u05ac\0\u05d8\0\u0604\0\334\0\u0630\0\334\0\334\0\u065c" + - "\0\334\0\334\0\u0688\0\334\0\u06b4\0\u0160\0\334\0\u0108" + - "\0\u06e0\0\u070c\0\u0738\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814" + - "\0\u0840\0\u086c\0\u0898\0\u08c4\0\u08f0\0\u091c\0\u0948\0\u0974" + - "\0\u09a0\0\u09cc\0\u09f8\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4" + - "\0\u0b00\0\u0b2c\0\u0b58\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34" + - "\0\u0c60\0\u0c8c\0\u0cb8\0\u0ce4\0\u0d10\0\u0d3c\0\u0d68\0\u0d94" + - "\0\u0dc0\0\u0dec\0\u0e18\0\u0e44\0\u0e70\0\u0e9c\0\u0ec8\0\u0ef4" + - "\0\u0f20\0\u0f4c\0\u0f78\0\u0fa4\0\u0fd0\0\u0ffc\0\u1028\0\u1054" + - "\0\u1080\0\u10ac\0\u10d8\0\u1104\0\u1130\0\u115c\0\u1188\0\u11b4" + - "\0\u11e0\0\u120c\0\u1238\0\u1264\0\u1290\0\u12bc\0\u12e8\0\u1314" + - "\0\u1340\0\u136c\0\u1398\0\u13c4\0\u13f0\0\u141c\0\u1448\0\u1474" + - "\0\u14a0\0\u14cc\0\u14f8\0\u1524\0\u1550\0\u157c\0\u15a8\0\u15d4" + - "\0\u1600\0\u162c\0\u1658\0\u1684\0\u16b0\0\u16dc\0\u1708\0\u1734" + - "\0\u1760\0\u178c\0\u17b8\0\u17e4\0\u1810\0\u183c\0\u1868\0\u1894" + - "\0\u18c0\0\u18ec\0\u1918\0\u1944\0\u1970\0\u199c\0\u19c8\0\u19f4" + - "\0\u1a20\0\u1a4c\0\u1a78\0\u1aa4\0\334\0\u1ad0\0\u1afc\0\u1b28" + - "\0\u1b54\0\u1b80\0\u1bac\0\u1bd8\0\u1c04\0\u1c30\0\u1c5c\0\u1c88" + - "\0\u1cb4\0\u1ce0\0\u1d0c\0\u1d38\0\u1d64\0\u1d90\0\u1dbc\0\u1de8" + - "\0\u1e14\0\u1e40\0\u1e6c\0\u1e98\0\u1ec4\0\u1ef0\0\u1f1c\0\u1f48" + - "\0\u1f74\0\u1fa0\0\u1fcc\0\u1ff8\0\u2024\0\u2050\0\u207c\0\u20a8" + - "\0\u20d4\0\u2100\0\u212c\0\u2158\0\u2184\0\u21b0\0\u21dc\0\u2208" + - "\0\u2234\0\u2260\0\u228c\0\u22b8\0\u22e4\0\u2310\0\u233c\0\u2368" + - "\0\u2394\0\u23c0\0\u23ec\0\u2418\0\u2444\0\u2470\0\u249c\0\u24c8" + - "\0\u24f4\0\u2520\0\u0108\0\u254c\0\u2578\0\u25a4\0\u25d0\0\u25fc" + - "\0\u2628\0\u2654\0\u2680\0\u26ac\0\u26d8\0\u2704\0\u2730\0\u275c" + - "\0\u2788\0\u27b4\0\u27e0\0\u280c\0\u2838\0\u2864\0\u2890\0\u28bc" + - "\0\u28e8\0\u2914\0\u2940\0\u296c\0\u2998\0\u29c4\0\u29f0\0\u2a1c" + - "\0\u2a48\0\u2a74\0\u2aa0\0\u2acc\0\u2af8\0\u2b24\0\u2b50\0\u2b7c" + - "\0\u2ba8\0\u2bd4\0\u2c00\0\u2c2c\0\u2c58\0\u2c84\0\u2cb0\0\u2cdc" + - "\0\u2d08\0\u2d34\0\u2d60\0\u2d8c\0\u2db8\0\u2de4\0\u2e10\0\u2e3c" + - "\0\u2e68\0\u2e94\0\u2ec0\0\u2eec\0\u2f18\0\u2f44\0\u2f70\0\u2f9c" + - "\0\u2fc8\0\u2ff4\0\u3020\0\u304c\0\u3078\0\u30a4\0\u30d0\0\u30fc" + - "\0\u3128\0\u3154\0\u3180\0\u31ac\0\u31d8\0\u3204\0\u3230\0\u325c" + - "\0\u3288\0\u32b4\0\u32e0\0\u330c\0\u3338\0\u3364\0\u3390\0\u33bc" + - "\0\u33e8\0\u3414\0\u3440\0\u346c\0\u3498\0\u34c4\0\u34f0\0\334" + - "\0\u351c\0\u3548\0\u3574\0\u35a0\0\u35cc\0\u35f8\0\u3624\0\u3650" + - "\0\u367c\0\u36a8\0\u36d4\0\u3700\0\u372c\0\u3758\0\u3784\0\u37b0" + - "\0\u37dc\0\u3808\0\u3834\0\u3860\0\u388c\0\u38b8\0\u38e4\0\u3910" + - "\0\u393c\0\u3968\0\u3994\0\u39c0\0\u39ec\0\u3a18\0\u3a44\0\u3a70" + - "\0\u3a9c\0\u3ac8\0\u3af4\0\u3b20\0\u3b4c\0\u3b78\0\u3ba4\0\u3bd0" + - "\0\u3bfc\0\u3c28\0\u3c54\0\u3c80\0\u26ac\0\u3cac\0\u3cd8\0\u3d04" + - "\0\u3d30\0\u3d5c\0\u3d88\0\u3db4\0\u3de0\0\u3e0c\0\u3e38\0\u3e64" + - "\0\u3e90\0\u3ebc\0\u3ee8\0\u3f14\0\u3f40\0\u3f6c\0\u3f98\0\u3fc4" + - "\0\u3ff0\0\u401c\0\u4048\0\u4074\0\u40a0\0\u40cc\0\u40f8\0\u4124" + - "\0\u4150\0\u417c\0\u41a8\0\u41d4\0\u4200\0\u422c\0\u4258\0\u4284" + - "\0\u42b0\0\u42dc\0\u4308\0\u1ff8\0\u4334\0\u4360\0\u438c\0\u43b8" + - "\0\u43e4\0\u4410\0\u443c\0\u4468\0\u4494\0\u4308\0\u44c0\0\u44ec" + - "\0\u4518\0\u4544\0\u4570\0\u459c\0\u45c8\0\u45f4\0\u4620\0\u464c" + - "\0\u4678\0\u46a4\0\u46d0\0\u46fc\0\u4728\0\u4754\0\u4780\0\u47ac" + - "\0\u47d8\0\u4804\0\u4830\0\u485c\0\u4888\0\u48b4\0\u48e0\0\u490c" + - "\0\u4938\0\u4964\0\u4990\0\u49bc\0\u49e8\0\u4a14\0\u4a40\0\u4a6c" + - "\0\u4a98\0\u4ac4\0\u4af0\0\u4b1c\0\u4b48\0\u4b74\0\u4ba0\0\u4bcc" + - "\0\u4bf8\0\u4c24\0\u4c50\0\u4c7c\0\u4ca8\0\u4cd4\0\u4d00\0\u4d2c" + - "\0\u4d58\0\u4d84\0\u4db0\0\u4ddc\0\u4e08\0\u4e34\0\u4e60\0\u4e8c" + - "\0\u4eb8\0\u4ee4\0\u4f10\0\u4f3c\0\u4f68\0\u4f94\0\u4fc0\0\u4fec" + - "\0\u5018\0\u5044\0\u5070\0\u509c\0\u50c8\0\u50f4\0\u5120\0\u514c" + - "\0\u15d4\0\u5178\0\u51a4\0\u51d0\0\u51fc\0\u5228\0\u5254\0\u5280" + - "\0\u52ac\0\u52d8\0\u5304\0\u5330\0\u535c\0\u5388\0\u53b4\0\u53e0" + - "\0\u540c\0\u5438\0\u5464\0\u5490\0\u54bc\0\u54e8\0\u5514\0\u5540" + - "\0\u556c\0\u5598\0\u55c4\0\u55f0\0\u561c\0\u5648\0\u5674\0\u56a0" + - "\0\u56cc\0\u56f8\0\u5724\0\u5750\0\u577c\0\u57a8\0\u57d4\0\u5800" + - "\0\u582c\0\u5858\0\u5884\0\u58b0\0\u58dc\0\u5908\0\u5934\0\u5960" + - "\0\u598c\0\u59b8\0\u59e4\0\u5a10\0\u5a3c\0\u5a68\0\u5a94\0\u5ac0" + - "\0\u5aec\0\u5b18\0\u5b44\0\u5b70\0\u5b9c\0\u5bc8\0\u5bf4\0\u5c20" + - "\0\u5c4c\0\u5c78\0\u5ca4\0\u5cd0\0\u5cfc\0\u5d28\0\u5d54\0\u5d80" + - "\0\u5dac\0\u5dd8\0\u5e04\0\u5e30\0\u5e5c\0\u5e88\0\u5eb4\0\u5ee0" + - "\0\u5f0c\0\u5f38\0\u5f64\0\u5f90\0\u5fbc\0\u5fe8\0\u6014\0\u6040" + - "\0\u606c\0\u6098\0\u60c4\0\u60f0\0\u611c\0\u6148\0\u6174\0\u61a0" + - "\0\u61cc\0\u61f8\0\u6224\0\u6250\0\u627c\0\u62a8\0\u62d4\0\u6300" + - "\0\u632c\0\u6358\0\u6384\0\u63b0\0\u63dc\0\u6408\0\u6434\0\u6460" + - "\0\u648c\0\u64b8\0\u64e4\0\u6510\0\u653c\0\u6568\0\u6594\0\u65c0" + - "\0\u65ec\0\u6618\0\u6644\0\u6670\0\u669c\0\u45f4\0\u66c8\0\u66f4" + - "\0\u6720\0\u674c\0\u535c\0\u6778\0\u67a4\0\u67d0\0\u67fc\0\u6828" + - "\0\u6854\0\u6880\0\u68ac\0\u68d8\0\u6904\0\u6930\0\u695c"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[639]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\54\0\130\0\204\0\260\0\334\0\334\0\u0108"+ + "\0\u0134\0\u0160\0\334\0\u018c\0\u01b8\0\u01b8\0\u01e4\0\u0210"+ + "\0\u023c\0\u0268\0\u0294\0\u02c0\0\u02ec\0\334\0\334\0\334"+ + "\0\u0318\0\u0344\0\u0370\0\u039c\0\u03c8\0\u03f4\0\u0420\0\u044c"+ + "\0\u0478\0\u04a4\0\u04d0\0\u04fc\0\u0528\0\u0108\0\u0554\0\u0580"+ + "\0\u05ac\0\u05d8\0\u0604\0\334\0\u0630\0\334\0\334\0\u065c"+ + "\0\334\0\334\0\u0688\0\334\0\u06b4\0\u0160\0\334\0\u0108"+ + "\0\u06e0\0\u070c\0\u0738\0\u0764\0\u0790\0\u07bc\0\u07e8\0\u0814"+ + "\0\u0840\0\u086c\0\u0898\0\u08c4\0\u08f0\0\u091c\0\u0948\0\u0974"+ + "\0\u09a0\0\u09cc\0\u09f8\0\u0a24\0\u0a50\0\u0a7c\0\u0aa8\0\u0ad4"+ + "\0\u0b00\0\u0b2c\0\u0b58\0\u0b84\0\u0bb0\0\u0bdc\0\u0c08\0\u0c34"+ + "\0\u0c60\0\u0c8c\0\u0cb8\0\u0ce4\0\u0d10\0\u0d3c\0\u0d68\0\u0d94"+ + "\0\u0dc0\0\u0dec\0\u0e18\0\u0e44\0\u0e70\0\u0e9c\0\u0ec8\0\u0ef4"+ + "\0\u0f20\0\u0f4c\0\u0f78\0\u0fa4\0\u0fd0\0\u0ffc\0\u1028\0\u1054"+ + "\0\u1080\0\u10ac\0\u10d8\0\u1104\0\u1130\0\u115c\0\u1188\0\u11b4"+ + "\0\u11e0\0\u120c\0\u1238\0\u1264\0\u1290\0\u12bc\0\u12e8\0\u1314"+ + "\0\u1340\0\u136c\0\u1398\0\u13c4\0\u13f0\0\u141c\0\u1448\0\u1474"+ + "\0\u14a0\0\u14cc\0\u14f8\0\u1524\0\u1550\0\u157c\0\u15a8\0\u15d4"+ + "\0\u1600\0\u162c\0\u1658\0\u1684\0\u16b0\0\u16dc\0\u1708\0\u1734"+ + "\0\u1760\0\u178c\0\u17b8\0\u17e4\0\u1810\0\u183c\0\u1868\0\u1894"+ + "\0\u18c0\0\u18ec\0\u1918\0\u1944\0\u1970\0\u199c\0\u19c8\0\u19f4"+ + "\0\u1a20\0\u1a4c\0\u1a78\0\u1aa4\0\334\0\u1ad0\0\u1afc\0\u1b28"+ + "\0\u1b54\0\u1b80\0\u1bac\0\u1bd8\0\u1c04\0\u1c30\0\u1c5c\0\u1c88"+ + "\0\u1cb4\0\u1ce0\0\u1d0c\0\u1d38\0\u1d64\0\u1d90\0\u1dbc\0\u1de8"+ + "\0\u1e14\0\u1e40\0\u1e6c\0\u1e98\0\u1ec4\0\u1ef0\0\u1f1c\0\u1f48"+ + "\0\u1f74\0\u1fa0\0\u1fcc\0\u1ff8\0\u2024\0\u2050\0\u207c\0\u20a8"+ + "\0\u20d4\0\u2100\0\u212c\0\u2158\0\u2184\0\u21b0\0\u21dc\0\u2208"+ + "\0\u2234\0\u2260\0\u228c\0\u22b8\0\u22e4\0\u2310\0\u233c\0\u2368"+ + "\0\u2394\0\u23c0\0\u23ec\0\u2418\0\u2444\0\u2470\0\u249c\0\u24c8"+ + "\0\u24f4\0\u2520\0\u0108\0\u254c\0\u2578\0\u25a4\0\u25d0\0\u25fc"+ + "\0\u2628\0\u2654\0\u2680\0\u26ac\0\u26d8\0\u2704\0\u2730\0\u275c"+ + "\0\u2788\0\u27b4\0\u27e0\0\u280c\0\u2838\0\u2864\0\u2890\0\u28bc"+ + "\0\u28e8\0\u2914\0\u2940\0\u296c\0\u2998\0\u29c4\0\u29f0\0\u2a1c"+ + "\0\u2a48\0\u2a74\0\u2aa0\0\u2acc\0\u2af8\0\u2b24\0\u2b50\0\u2b7c"+ + "\0\u2ba8\0\u2bd4\0\u2c00\0\u2c2c\0\u2c58\0\u2c84\0\u2cb0\0\u2cdc"+ + "\0\u2d08\0\u2d34\0\u2d60\0\u2d8c\0\u2db8\0\u2de4\0\u2e10\0\u2e3c"+ + "\0\u2e68\0\u2e94\0\u2ec0\0\u2eec\0\u2f18\0\u2f44\0\u2f70\0\u2f9c"+ + "\0\u2fc8\0\u2ff4\0\u3020\0\u304c\0\u3078\0\u30a4\0\u30d0\0\u30fc"+ + "\0\u3128\0\u3154\0\u3180\0\u31ac\0\u31d8\0\u3204\0\u3230\0\u325c"+ + "\0\u3288\0\u32b4\0\u32e0\0\u330c\0\u3338\0\u3364\0\u3390\0\u33bc"+ + "\0\u33e8\0\u3414\0\u3440\0\u346c\0\u3498\0\u34c4\0\u34f0\0\334"+ + "\0\u351c\0\u3548\0\u3574\0\u35a0\0\u35cc\0\u35f8\0\u3624\0\u3650"+ + "\0\u367c\0\u36a8\0\u36d4\0\u3700\0\u372c\0\u3758\0\u3784\0\u37b0"+ + "\0\u37dc\0\u3808\0\u3834\0\u3860\0\u388c\0\u38b8\0\u38e4\0\u3910"+ + "\0\u393c\0\u3968\0\u3994\0\u39c0\0\u39ec\0\u3a18\0\u3a44\0\u3a70"+ + "\0\u3a9c\0\u3ac8\0\u3af4\0\u3b20\0\u3b4c\0\u3b78\0\u3ba4\0\u3bd0"+ + "\0\u3bfc\0\u3c28\0\u3c54\0\u3c80\0\u26ac\0\u3cac\0\u3cd8\0\u3d04"+ + "\0\u3d30\0\u3d5c\0\u3d88\0\u3db4\0\u3de0\0\u3e0c\0\u3e38\0\u3e64"+ + "\0\u3e90\0\u3ebc\0\u3ee8\0\u3f14\0\u3f40\0\u3f6c\0\u3f98\0\u3fc4"+ + "\0\u3ff0\0\u401c\0\u4048\0\u4074\0\u40a0\0\u40cc\0\u40f8\0\u4124"+ + "\0\u4150\0\u417c\0\u41a8\0\u41d4\0\u4200\0\u422c\0\u4258\0\u4284"+ + "\0\u42b0\0\u42dc\0\u4308\0\u1ff8\0\u4334\0\u4360\0\u438c\0\u43b8"+ + "\0\u43e4\0\u4410\0\u443c\0\u4468\0\u4494\0\u4308\0\u44c0\0\u44ec"+ + "\0\u4518\0\u4544\0\u4570\0\u459c\0\u45c8\0\u45f4\0\u4620\0\u464c"+ + "\0\u4678\0\u46a4\0\u46d0\0\u46fc\0\u4728\0\u4754\0\u4780\0\u47ac"+ + "\0\u47d8\0\u4804\0\u4830\0\u485c\0\u4888\0\u48b4\0\u48e0\0\u490c"+ + "\0\u4938\0\u4964\0\u4990\0\u49bc\0\u49e8\0\u4a14\0\u4a40\0\u4a6c"+ + "\0\u4a98\0\u4ac4\0\u4af0\0\u4b1c\0\u4b48\0\u4b74\0\u4ba0\0\u4bcc"+ + "\0\u4bf8\0\u4c24\0\u4c50\0\u4c7c\0\u4ca8\0\u4cd4\0\u4d00\0\u4d2c"+ + "\0\u4d58\0\u4d84\0\u4db0\0\u4ddc\0\u4e08\0\u4e34\0\u4e60\0\u4e8c"+ + "\0\u4eb8\0\u4ee4\0\u4f10\0\u4f3c\0\u4f68\0\u4f94\0\u4fc0\0\u4fec"+ + "\0\u5018\0\u5044\0\u5070\0\u509c\0\u50c8\0\u50f4\0\u5120\0\u514c"+ + "\0\u15d4\0\u5178\0\u51a4\0\u51d0\0\u51fc\0\u5228\0\u5254\0\u5280"+ + "\0\u52ac\0\u52d8\0\u5304\0\u5330\0\u535c\0\u5388\0\u53b4\0\u53e0"+ + "\0\u540c\0\u5438\0\u5464\0\u5490\0\u54bc\0\u54e8\0\u5514\0\u5540"+ + "\0\u556c\0\u5598\0\u55c4\0\u55f0\0\u561c\0\u5648\0\u5674\0\u56a0"+ + "\0\u56cc\0\u56f8\0\u5724\0\u5750\0\u577c\0\u57a8\0\u57d4\0\u5800"+ + "\0\u582c\0\u5858\0\u5884\0\u58b0\0\u58dc\0\u5908\0\u5934\0\u5960"+ + "\0\u598c\0\u59b8\0\u59e4\0\u5a10\0\u5a3c\0\u5a68\0\u5a94\0\u5ac0"+ + "\0\u5aec\0\u5b18\0\u5b44\0\u5b70\0\u5b9c\0\u5bc8\0\u5bf4\0\u5c20"+ + "\0\u5c4c\0\u5c78\0\u5ca4\0\u5cd0\0\u5cfc\0\u5d28\0\u5d54\0\u5d80"+ + "\0\u5dac\0\u5dd8\0\u5e04\0\u5e30\0\u5e5c\0\u5e88\0\u5eb4\0\u5ee0"+ + "\0\u5f0c\0\u5f38\0\u5f64\0\u5f90\0\u5fbc\0\u5fe8\0\u6014\0\u6040"+ + "\0\u606c\0\u6098\0\u60c4\0\u60f0\0\u611c\0\u6148\0\u6174\0\u61a0"+ + "\0\u61cc\0\u61f8\0\u6224\0\u6250\0\u627c\0\u62a8\0\u62d4\0\u6300"+ + "\0\u632c\0\u6358\0\u6384\0\u63b0\0\u63dc\0\u6408\0\u6434\0\u6460"+ + "\0\u648c\0\u64b8\0\u64e4\0\u6510\0\u653c\0\u6568\0\u6594\0\u65c0"+ + "\0\u65ec\0\u6618\0\u6644\0\u6670\0\u669c\0\u45f4\0\u66c8\0\u66f4"+ + "\0\u6720\0\u674c\0\u535c\0\u6778\0\u67a4\0\u67d0\0\u67fc\0\u6828"+ + "\0\u6854\0\u6880\0\u68ac\0\u68d8\0\u6904\0\u6930\0\u695c"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[639]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\1\7\1\10\1\11\1\12\2\13\1\14\1\15"+ + "\1\16\1\13\1\17\1\20\1\21\1\22\1\23\1\24"+ + "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44"+ + "\1\10\1\45\1\46\1\47\1\10\1\50\1\51\3\10"+ + "\1\52\1\6\1\7\1\10\1\53\1\12\1\13\1\54"+ + "\1\14\1\15\1\16\1\13\1\17\1\20\1\21\1\22"+ + "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ + "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+ + "\1\43\1\44\1\10\1\45\1\46\1\47\1\10\1\50"+ + "\1\51\3\10\1\52\1\55\1\56\21\55\1\57\30\55"+ + "\1\60\1\61\22\60\1\62\27\60\1\63\1\64\4\63"+ + "\1\65\45\63\56\0\1\10\10\0\7\10\3\0\26\10"+ + "\4\0\1\11\52\0\1\66\10\0\7\66\3\0\26\66"+ + "\7\0\1\67\57\0\1\13\43\0\1\10\10\0\1\10"+ + "\1\70\1\71\2\10\1\72\1\10\3\0\4\10\1\73"+ + "\11\10\1\74\7\10\3\0\1\10\10\0\7\10\3\0"+ + "\10\10\1\75\15\10\3\0\1\10\10\0\1\70\6\10"+ + "\3\0\13\10\1\76\12\10\3\0\1\10\10\0\1\70"+ + "\3\10\1\70\2\10\3\0\4\10\1\77\6\10\1\100"+ + "\12\10\3\0\1\10\10\0\1\101\5\10\1\102\3\0"+ + "\1\10\1\103\1\10\1\104\1\105\6\10\1\46\12\10"+ + "\3\0\1\10\10\0\1\106\3\10\1\70\1\10\1\107"+ + "\3\0\1\10\1\110\11\10\1\111\12\10\3\0\1\10"+ + "\10\0\2\10\1\112\4\10\3\0\5\10\2\46\2\10"+ + "\1\113\14\10\3\0\1\10\10\0\2\10\1\114\1\10"+ + "\1\115\1\116\1\117\3\0\1\10\1\120\1\121\2\10"+ + "\1\122\4\10\1\123\13\10\3\0\1\10\10\0\2\10"+ + "\1\124\1\10\1\125\1\126\1\10\3\0\4\10\1\127"+ + "\2\10\1\130\2\10\1\131\2\10\1\132\1\133\7\10"+ + "\3\0\1\10\10\0\5\10\1\134\1\135\3\0\1\10"+ + "\1\136\1\10\1\137\1\140\5\10\1\141\1\142\12\10"+ + "\3\0\1\10\10\0\1\143\3\10\1\144\1\10\1\145"+ + "\3\0\1\10\1\146\13\10\1\147\10\10\3\0\1\10"+ + "\10\0\1\150\6\10\3\0\1\10\1\151\5\10\1\152"+ + "\1\153\15\10\3\0\1\10\10\0\1\154\5\10\1\155"+ + "\3\0\1\10\1\156\2\10\1\157\3\10\1\160\1\46"+ + "\1\10\1\46\12\10\3\0\1\10\10\0\5\10\1\161"+ + "\1\162\3\0\1\10\1\163\2\10\1\164\2\10\1\165"+ + "\3\10\1\166\12\10\3\0\1\10\10\0\1\167\1\170"+ + "\2\10\1\171\1\10\1\172\3\0\3\10\1\173\4\10"+ + "\1\174\2\10\1\175\1\176\2\10\1\177\5\10\1\46"+ + "\3\0\1\10\10\0\2\10\1\200\4\10\3\0\12\10"+ + "\1\201\13\10\3\0\1\10\10\0\1\202\5\10\1\203"+ + "\3\0\1\10\1\204\11\10\1\205\12\10\3\0\1\10"+ + "\10\0\5\10\1\206\1\207\3\0\1\10\1\210\1\211"+ + "\1\10\1\212\2\10\1\46\1\213\1\214\10\10\1\215"+ + "\3\10\3\0\1\10\10\0\4\10\1\216\1\124\1\10"+ + "\3\0\4\10\1\217\1\220\2\10\1\221\1\10\1\222"+ + "\6\10\1\223\4\10\3\0\1\10\10\0\1\224\4\10"+ + "\1\225\1\10\3\0\13\10\1\226\1\46\11\10\3\0"+ + "\1\10\10\0\1\227\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\230\13\10\1\147\10\10"+ + "\3\0\1\10\10\0\1\231\5\10\1\232\3\0\3\10"+ + "\1\233\22\10\14\0\1\234\1\235\1\236\1\237\1\240"+ + "\1\241\1\242\4\0\1\243\1\244\2\0\1\245\1\0"+ + "\1\246\1\247\1\250\1\251\2\0\1\252\1\0\1\253"+ + "\2\0\1\254\7\0\1\53\2\0\1\54\45\0\1\55"+ + "\1\0\21\55\1\0\30\55\1\60\1\0\22\60\1\0"+ + "\27\60\1\63\1\0\4\63\1\0\45\63\7\0\1\255"+ + "\46\0\1\10\10\0\7\10\3\0\5\10\1\256\20\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\257\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\260\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\261\7\10"+ + "\1\262\13\10\3\0\1\10\10\0\6\10\1\213\3\0"+ + "\26\10\3\0\1\10\10\0\1\263\3\10\1\264\1\265"+ + "\1\266\3\0\2\10\1\267\1\270\1\10\1\271\1\272"+ + "\1\273\2\10\1\274\13\10\3\0\1\10\10\0\6\10"+ + "\1\124\3\0\13\10\1\275\12\10\3\0\1\10\10\0"+ + "\4\10\1\276\2\10\3\0\12\10\1\277\13\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\300\2\10\1\213"+ + "\1\10\1\301\14\10\3\0\1\10\10\0\4\10\1\302"+ + "\2\10\3\0\11\10\1\303\14\10\3\0\1\10\10\0"+ + "\7\10\3\0\12\10\1\257\2\10\1\304\10\10\3\0"+ + "\1\10\10\0\1\153\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\1\305\6\10\3\0\1\10\1\306\6\10\1\307"+ + "\15\10\3\0\1\10\10\0\2\10\1\310\1\311\3\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\312\4\10"+ + "\3\0\7\10\1\313\5\10\1\314\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\315\10\10\3\0\1\10"+ + "\10\0\3\10\1\46\3\10\3\0\7\10\1\316\12\10"+ + "\1\46\3\10\3\0\1\10\10\0\2\10\1\317\1\10"+ + "\1\320\2\10\3\0\6\10\1\321\1\322\2\10\1\323"+ + "\13\10\3\0\1\10\10\0\7\10\3\0\12\10\1\324"+ + "\13\10\3\0\1\10\10\0\7\10\3\0\10\10\1\325"+ + "\15\10\3\0\1\10\10\0\1\326\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\327\24\10"+ + "\3\0\1\10\10\0\2\10\1\330\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\5\10\1\331\1\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\3\10\1\332\22\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\333\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\334\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\5\10\1\46\20\10"+ + "\3\0\1\10\10\0\4\10\1\335\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\317\1\46\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\336"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\2\10\1\337"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\12\10\1\340"+ + "\13\10\3\0\1\10\10\0\1\341\6\10\3\0\13\10"+ + "\1\342\12\10\3\0\1\10\10\0\6\10\1\220\3\0"+ + "\26\10\3\0\1\10\10\0\1\147\6\10\3\0\1\10"+ + "\1\343\11\10\1\72\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\113\14\10\3\0\1\10\10\0\2\10"+ + "\1\344\1\10\1\345\1\346\1\10\3\0\4\10\1\347"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\350"+ + "\11\10\1\351\12\10\3\0\1\10\10\0\1\352\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ + "\1\353\1\10\1\350\12\10\3\0\1\10\10\0\2\10"+ + "\1\354\4\10\3\0\4\10\1\355\4\10\1\356\1\357"+ + "\1\360\5\10\1\46\4\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\361\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\362\14\10\3\0\1\10\10\0\3\10"+ + "\1\363\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\16\10\1\133\2\10\1\364\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\365\24\10\3\0\1\10"+ + "\10\0\2\10\1\366\1\367\1\370\2\10\3\0\7\10"+ + "\1\371\1\10\1\372\1\373\13\10\3\0\1\10\10\0"+ + "\2\10\1\374\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\10\10\1\375\15\10\3\0\1\10\10\0"+ + "\2\10\1\46\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\5\10\1\376\1\10\3\0\7\10\1\377\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\7\10\1\u0100\16\10\3\0"+ + "\1\10\10\0\4\10\1\u0101\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u0102\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\11\10\1\u0103\14\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u0104\12\10\3\0"+ + "\1\10\10\0\5\10\1\u0105\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\2\10\1\u0106\23\10\3\0"+ + "\1\10\10\0\1\u0107\6\10\3\0\1\10\1\u0108\11\10"+ + "\1\u0109\12\10\3\0\1\10\10\0\5\10\1\u010a\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u010b\4\10"+ + "\3\0\4\10\1\u010c\6\10\1\u010d\12\10\3\0\1\10"+ + "\10\0\4\10\1\46\1\u010e\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\5\10\1\353\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u010f\2\10\1\u0110"+ + "\1\46\5\10\1\u0111\12\10\3\0\1\10\10\0\3\10"+ + "\1\u0112\3\10\3\0\11\10\1\46\14\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\u0113\24\10\3\0\1\10"+ + "\10\0\7\10\3\0\11\10\1\u0114\1\u0115\13\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u0116\3\10\1\u0117"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0118"+ + "\14\10\3\0\1\10\10\0\6\10\1\u0102\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u0119\1\10\1\u011a\3\0"+ + "\15\10\1\u011b\10\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\352\20\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u011c\2\10\1\u011d\21\10\3\0\1\10\10\0"+ + "\3\10\1\u011e\3\10\3\0\7\10\1\u011f\16\10\3\0"+ + "\1\10\10\0\4\10\1\u0120\2\10\3\0\4\10\1\u0121"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0122"+ + "\20\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0123"+ + "\12\10\3\0\1\10\10\0\1\u0124\6\10\3\0\2\10"+ + "\1\u0125\23\10\3\0\1\10\10\0\3\10\1\u0126\1\u0127"+ + "\2\10\3\0\4\10\1\u0128\1\46\20\10\3\0\1\10"+ + "\10\0\4\10\1\u0129\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\1\u012a\3\10\1\u012b\1\10\1\u012c\3\0\13\10"+ + "\1\u012d\12\10\3\0\1\10\10\0\4\10\1\46\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u012e\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u012f\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\3\10\1\u0130\22\10"+ + "\3\0\1\10\10\0\7\10\3\0\5\10\1\u0131\20\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\46\16\10"+ + "\3\0\1\10\10\0\4\10\1\u0132\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u0133\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\u0134\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\5\10\1\362\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0135\24\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u0136\3\10\1\u0137"+ + "\15\10\3\0\1\10\10\0\1\u0102\6\10\3\0\14\10"+ + "\1\u0138\11\10\3\0\1\10\10\0\5\10\1\u0139\1\10"+ + "\3\0\4\10\1\u013a\11\10\1\133\7\10\3\0\1\10"+ + "\10\0\6\10\1\u013b\3\0\26\10\3\0\1\10\10\0"+ + "\2\10\1\u013c\1\10\1\363\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\1\u013d\5\10\1\302\3\0\26\10\16\0"+ + "\1\u013e\2\0\1\u013f\25\0\1\u0140\41\0\1\u0141\1\u0142"+ + "\47\0\1\u0143\42\0\1\u0144\17\0\1\u0145\43\0\1\u0146"+ + "\3\0\1\u0147\3\0\1\u0148\26\0\1\u0149\24\0\1\u014a"+ + "\30\0\1\u014b\15\0\1\u0148\62\0\1\u014c\47\0\1\u014d"+ + "\1\0\1\u014e\34\0\1\u014f\16\0\1\u0148\32\0\1\u0150"+ + "\7\0\1\u0151\5\0\1\u0152\3\0\1\u0153\27\0\1\u0154"+ + "\21\0\1\u0155\27\0\1\u0156\12\0\1\u0157\62\0\1\u0158"+ + "\32\0\1\u0159\24\0\1\u0148\25\0\1\u015a\61\0\1\u015b"+ + "\6\0\1\u015c\25\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u015d\2\10\1\u015e\16\10\3\0\1\10\10\0\1\46"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\365\12\10\3\0\1\10\10\0\1\u015f\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\5\10\1\u0160\1\10"+ + "\3\0\1\10\1\u0161\11\10\1\350\12\10\3\0\1\10"+ + "\10\0\7\10\3\0\16\10\1\u0162\7\10\3\0\1\10"+ + "\10\0\1\46\5\10\1\u0163\3\0\7\10\1\u0164\16\10"+ + "\3\0\1\10\10\0\1\u0165\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\2\10\1\u0166\4\10\3\0\26\10\3\0"+ + "\1\10\10\0\1\224\6\10\3\0\3\10\1\u0167\22\10"+ + "\3\0\1\10\10\0\1\143\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\10\10\1\u0168\15\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\366\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\3\10\1\173\22\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\124\2\10\1\u0169"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u016a"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\46"+ + "\12\10\3\0\1\10\10\0\4\10\1\u016b\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u016c"+ + "\14\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u016d"+ + "\13\10\3\0\1\10\10\0\5\10\1\257\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u016e\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\5\10\1\u016f\1\10\3\0\10\10"+ + "\1\u016d\15\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u0170\24\10\3\0\1\10\10\0\2\10\1\u0171\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u0172\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\3\10\1\u0173\3\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\341\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u0174\6\10\3\0\17\10"+ + "\1\46\6\10\3\0\1\10\10\0\4\10\1\u0175\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\366\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\362\4\10\1\257"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0176"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\1\365\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0177\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\6\10\1\302\3\0\13\10"+ + "\1\u0178\12\10\3\0\1\10\10\0\1\342\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\213"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\350"+ + "\12\10\3\0\1\10\10\0\5\10\1\331\1\10\3\0"+ + "\11\10\1\u0179\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u017a\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u017b\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\6\10\1\u017c\17\10\3\0\1\10\10\0\5\10\1\u017d"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u017e\24\10\3\0\1\10\10\0\4\10\1\u017f"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\3\10\1\u0180"+ + "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u0181\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0182\24\10\3\0\1\10\10\0\1\u0183\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0184\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\124\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\213"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0185"+ + "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0186"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0187"+ + "\24\10\3\0\1\10\10\0\1\u0188\4\10\1\46\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\u0189\20\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u0116\21\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\276\21\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u018a\24\10\3\0\1\10\10\0\4\10\1\u018b\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\353\21\10\3\0\1\10\10\0\7\10\3\0\12\10"+ + "\1\u018c\13\10\3\0\1\10\10\0\7\10\3\0\14\10"+ + "\1\353\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u018d\21\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\364\20\10\3\0\1\10\10\0\5\10\1\46\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\3\10"+ + "\1\46\22\10\3\0\1\10\10\0\6\10\1\u018e\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\46"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0108"+ + "\24\10\3\0\1\10\10\0\6\10\1\u018f\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0190\6\10"+ + "\1\u0191\15\10\3\0\1\10\10\0\1\213\6\10\3\0"+ + "\12\10\1\u0192\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0193\12\10\3\0\1\10\10\0\5\10\1\u0194"+ + "\1\10\3\0\13\10\1\350\12\10\3\0\1\10\10\0"+ + "\3\10\1\257\3\10\3\0\5\10\1\u0195\11\10\1\353"+ + "\6\10\3\0\1\10\10\0\7\10\3\0\15\10\1\u0196"+ + "\10\10\3\0\1\10\10\0\1\u018a\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0197\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0198\7\10"+ + "\1\u0199\4\10\1\46\6\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u019a\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\46\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\u0182\14\10\3\0\1\10\10\0\7\10"+ + "\3\0\22\10\1\u019b\3\10\3\0\1\10\10\0\1\u019c"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u019d"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\1\10\1\46"+ + "\5\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\257\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\46\14\10\3\0\1\10\10\0\6\10\1\u019e"+ + "\3\0\26\10\3\0\1\10\10\0\4\10\1\u019f\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10"+ + "\1\u01a0\14\10\3\0\1\10\10\0\4\10\1\u01a1\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u01a2\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\u01a3\4\10\3\0"+ + "\4\10\1\u01a4\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u01a5\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\12\10\1\u01a6\13\10\3\0\1\10\10\0\2\10\1\u01a7"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u01a8\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u01a9\3\10\1\u0182\10\10\3\0\1\10\10\0"+ + "\7\10\3\0\21\10\1\147\4\10\3\0\1\10\10\0"+ + "\4\10\1\353\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\u01aa\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\15\10\1\u01ab\10\10\3\0\1\10\10\0"+ + "\6\10\1\362\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\153\5\10\1\u01ac\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\10\10\1\u01ad\15\10\3\0\1\10"+ + "\10\0\2\10\1\u01ae\4\10\3\0\26\10\3\0\1\10"+ + "\10\0\3\10\1\257\3\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u01af\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\7\10\1\u01b0\16\10\3\0\1\10"+ + "\10\0\6\10\1\u01b1\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\17\10\1\46\6\10\3\0\1\10\10\0"+ + "\1\362\5\10\1\u01b2\3\0\26\10\3\0\1\10\10\0"+ + "\4\10\1\u01b3\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\24\10\1\124\1\10\3\0\1\10\10\0"+ + "\4\10\1\u01b4\2\10\3\0\26\10\3\0\1\10\10\0"+ + "\1\u01b5\6\10\3\0\26\10\3\0\1\10\10\0\4\10"+ + "\1\u01b6\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\u01b7\14\10\3\0\1\10\10\0\2\10"+ + "\1\46\4\10\3\0\7\10\1\u01b8\16\10\3\0\1\10"+ + "\10\0\7\10\3\0\5\10\1\u01b9\1\u01ba\17\10\3\0"+ + "\1\10\10\0\1\u01bb\6\10\3\0\5\10\1\u01bc\20\10"+ + "\3\0\1\10\10\0\2\10\1\u01bd\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u01be\2\10\3\0\2\10"+ + "\1\46\23\10\3\0\1\10\10\0\2\10\1\u01bf\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01c0\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u01c1\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\1\u01c2\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\365\6\10\3\0\12\10\1\323"+ + "\13\10\3\0\1\10\10\0\5\10\1\u01c3\1\u01c4\3\0"+ + "\7\10\1\u01c5\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u01c6\21\10\3\0\1\10\10\0\2\10\1\u0121"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\317\20\10\3\0\1\10\10\0\2\10\1\u01c7"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\5\10\1\u01c8"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\6\10\1\201"+ + "\3\0\10\10\1\257\15\10\3\0\1\10\10\0\6\10"+ + "\1\u01c9\3\0\26\10\3\0\1\10\10\0\3\10\1\u01ca"+ + "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\u01cb\20\10\3\0\1\10\10\0\2\10\1\46"+ + "\4\10\3\0\4\10\1\257\21\10\33\0\1\u0148\55\0"+ + "\1\u01cc\45\0\1\u01cd\54\0\1\u0151\5\0\1\u01ce\3\0"+ + "\1\u01cf\51\0\1\u0155\1\u01d0\27\0\1\u0159\17\0\1\u01d1"+ + "\5\0\1\u01d2\51\0\1\u01d3\32\0\1\u0147\47\0\1\u01d4"+ + "\100\0\1\u0148\30\0\1\u01d5\1\0\1\u0148\63\0\1\u0140"+ + "\53\0\1\u01d6\2\0\1\u01d7\4\0\1\251\54\0\1\u01d8"+ + "\47\0\1\u0148\56\0\1\u01d9\50\0\1\u01da\50\0\1\u0148"+ + "\50\0\1\u01d4\64\0\1\u01db\2\0\1\u01dc\45\0\1\u01dd"+ + "\33\0\1\u0159\2\0\1\u01de\63\0\1\u01df\41\0\1\u013e"+ + "\65\0\1\u01e0\43\0\1\u0148\71\0\1\u01e1\57\0\1\u01e2"+ + "\27\0\1\u01e3\57\0\1\u01e4\34\0\1\10\10\0\7\10"+ + "\3\0\7\10\1\152\16\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\220\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\213\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u01e5\12\10\3\0\1\10\10\0\2\10"+ + "\1\u01e6\4\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\u01e7\13\10\3\0\1\10\10\0\4\10"+ + "\1\u01e8\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u01e9\12\10\3\0\1\10\10\0\3\10"+ + "\1\311\3\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\323\13\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u01ea\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\12\10\1\u01eb\13\10\3\0\1\10\10\0\6\10"+ + "\1\u01ec\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\12\10\1\u01ed\13\10\3\0\1\10\10\0\6\10\1\u01ee"+ + "\3\0\26\10\3\0\1\10\10\0\6\10\1\u01ef\3\0"+ + "\26\10\3\0\1\10\10\0\5\10\1\u01af\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u01f0"+ + "\13\10\3\0\1\10\10\0\1\u01f1\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\4\10\1\u01f2\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\u01f3\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u019b\23\10"+ + "\3\0\1\10\10\0\4\10\1\363\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\1\10\1\220\5\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u01f4\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f5\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f6\21\10"+ + "\3\0\1\10\10\0\1\u01f7\6\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\12\10\1\u01f8\13\10\3\0"+ + "\1\10\10\0\4\10\1\u017d\2\10\3\0\26\10\3\0"+ + "\1\10\10\0\6\10\1\u01f9\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\46\25\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\u01fa\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u017d\24\10\3\0\1\10\10\0"+ + "\1\u017d\6\10\3\0\26\10\3\0\1\10\10\0\6\10"+ + "\1\u01fb\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\14\10\1\46\11\10\3\0\1\10\10\0\2\10\1\361"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\2\10\1\u01fc"+ + "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u01fd\16\10\3\0\1\10\10\0\1\362\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\5\10\1\u01fe\1\10"+ + "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01ff\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\7\10"+ + "\1\u0200\16\10\3\0\1\10\10\0\4\10\1\257\2\10"+ + "\3\0\26\10\3\0\1\10\10\0\1\u0201\6\10\3\0"+ + "\4\10\1\u0202\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0203\6\10\1\u018a\15\10\3\0\1\10\10\0"+ + "\7\10\3\0\5\10\1\u0204\20\10\3\0\1\10\10\0"+ + "\2\10\1\u0205\4\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\7\10\1\u0206\16\10\3\0\1\10\10\0"+ + "\6\10\1\153\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\4\10\1\153\21\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u0207\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\21\10\1\257\4\10\3\0\1\10\10\0\7\10"+ + "\3\0\1\10\1\u0208\24\10\3\0\1\10\10\0\7\10"+ + "\3\0\13\10\1\u0109\12\10\3\0\1\10\10\0\7\10"+ + "\3\0\11\10\1\75\14\10\3\0\1\10\10\0\1\u0183"+ + "\6\10\3\0\4\10\1\u0209\21\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\376\21\10\3\0\1\10\10\0"+ + "\5\10\1\336\1\10\3\0\26\10\3\0\1\10\10\0"+ + "\5\10\1\u020a\1\10\3\0\7\10\1\u020b\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u020c\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\13\10\1\u020d\12\10\3\0"+ + "\1\10\10\0\7\10\3\0\7\10\1\u0116\16\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u020e\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0116\5\10\1\353"+ + "\16\10\3\0\1\10\10\0\2\10\1\u020f\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\213"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0210"+ + "\20\10\3\0\1\10\10\0\4\10\1\u0211\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0212\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0213"+ + "\12\10\3\0\1\10\10\0\1\u0214\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0215\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0216\23\10"+ + "\3\0\1\10\10\0\7\10\3\0\13\10\1\362\12\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0217\24\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\u0218\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\353\16\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0219\24\10"+ + "\3\0\1\10\10\0\6\10\1\u018e\3\0\13\10\1\u020c"+ + "\12\10\3\0\1\10\10\0\2\10\1\u021a\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0182"+ + "\17\10\3\0\1\10\10\0\4\10\1\317\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u021b"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u021c"+ + "\5\10\1\u0182\10\10\3\0\1\10\10\0\1\u0191\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\2\10"+ + "\1\u021d\4\10\1\46\16\10\3\0\1\10\10\0\7\10"+ + "\3\0\10\10\1\u0109\15\10\3\0\1\10\10\0\6\10"+ + "\1\u01a2\3\0\26\10\3\0\1\10\10\0\6\10\1\u021e"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\16\10"+ + "\1\u021f\7\10\3\0\1\10\10\0\1\u0220\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0221\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\353"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\10\10\1\353"+ + "\15\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0160"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0222"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0223"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0224"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u011c"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0225"+ + "\24\10\3\0\1\10\10\0\5\10\1\336\1\10\3\0"+ + "\12\10\1\u0226\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\220\20\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0227\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0228\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\3\10\1\213\22\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0229\12\10\14\0\1\u0148\60\0\1\u0148\75\0"+ + "\1\u01dc\45\0\1\u022a\36\0\1\u01cc\53\0\1\u0150\50\0"+ + "\1\u0159\101\0\1\u0140\26\0\1\u0148\54\0\1\u022b\55\0"+ + "\1\u022c\46\0\1\u022d\71\0\1\u0158\63\0\1\u0148\51\0"+ + "\1\u022e\27\0\1\u022f\74\0\1\u01d1\32\0\1\u0230\2\0"+ + "\1\u0231\10\0\1\u0232\1\0\1\u0233\1\0\1\u0234\3\0"+ + "\1\u0235\35\0\1\u01cd\60\0\1\u013f\56\0\1\u0147\62\0"+ + "\1\u01d0\45\0\1\u0236\53\0\1\u0237\41\0\1\u01cc\35\0"+ + "\1\10\10\0\7\10\3\0\5\10\1\u0238\20\10\3\0"+ + "\1\10\10\0\7\10\3\0\5\10\1\u0239\20\10\3\0"+ + "\1\10\10\0\7\10\3\0\1\10\1\u0161\24\10\3\0"+ + "\1\10\10\0\5\10\1\u016f\1\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u023a\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\u023b\21\10\3\0"+ + "\1\10\10\0\7\10\3\0\17\10\1\u023c\6\10\3\0"+ + "\1\10\10\0\2\10\1\213\4\10\3\0\26\10\3\0"+ + "\1\10\10\0\7\10\3\0\6\10\1\u023d\6\10\1\u0182"+ + "\10\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u023e"+ + "\12\10\3\0\1\10\10\0\2\10\1\u023f\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\5\10\1\u0240\1\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0241"+ + "\14\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0242"+ + "\3\10\1\u0243\13\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0244\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\7\10\1\u010e\16\10\3\0\1\10\10\0\7\10\3\0"+ + "\11\10\1\u0245\14\10\3\0\1\10\10\0\7\10\3\0"+ + "\4\10\1\u0246\21\10\3\0\1\10\10\0\7\10\3\0"+ + "\13\10\1\u0247\12\10\3\0\1\10\10\0\5\10\1\u0180"+ + "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0248\24\10\3\0\1\10\10\0\7\10\3\0"+ + "\15\10\1\46\10\10\3\0\1\10\10\0\7\10\3\0"+ + "\5\10\1\353\20\10\3\0\1\10\10\0\1\220\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0249\12\10\3\0\1\10\10\0\7\10\3\0\5\10"+ + "\1\u024a\20\10\3\0\1\10\10\0\7\10\3\0\20\10"+ + "\1\46\5\10\3\0\1\10\10\0\2\10\1\u024b\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u024c\24\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u0238\21\10\3\0\1\10\10\0\6\10\1\u024d\3\0"+ + "\26\10\3\0\1\10\10\0\3\10\1\46\3\10\3\0"+ + "\26\10\3\0\1\10\10\0\4\10\1\u0215\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\2\10\1\72\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\257"+ + "\23\10\3\0\1\10\10\0\6\10\1\u024e\3\0\26\10"+ + "\3\0\1\10\10\0\6\10\1\u024f\3\0\26\10\3\0"+ + "\1\10\10\0\1\u024b\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\21\10\1\317\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\220\21\10\3\0\1\10"+ + "\10\0\1\u0249\6\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\13\10\1\u018a\12\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u0250\24\10\3\0\1\10\10\0"+ + "\7\10\3\0\7\10\1\u015e\16\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\46\24\10\3\0\1\10\10\0"+ + "\2\10\1\46\4\10\3\0\6\10\1\u0251\17\10\3\0"+ + "\1\10\10\0\7\10\3\0\15\10\1\u0252\10\10\3\0"+ + "\1\10\10\0\7\10\3\0\4\10\1\357\21\10\3\0"+ + "\1\10\10\0\1\u0253\6\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u0254\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\6\10\1\u0255\17\10\3\0\1\10"+ + "\10\0\4\10\1\u0238\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\3\10\1\220\3\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\257\21\10\3\0\1\10"+ + "\10\0\6\10\1\u0256\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\1\10\1\u0257\24\10\3\0\1\10\10\0"+ + "\7\10\3\0\16\10\1\46\7\10\3\0\1\10\10\0"+ + "\7\10\3\0\12\10\1\353\13\10\3\0\1\10\10\0"+ + "\7\10\3\0\6\10\1\353\17\10\3\0\1\10\10\0"+ + "\1\365\3\10\1\u01be\2\10\3\0\26\10\3\0\1\10"+ + "\10\0\7\10\3\0\22\10\1\u0258\3\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0182\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\1\10\1\u01fc\24\10\3\0\1\10"+ + "\10\0\7\10\3\0\21\10\1\u0238\4\10\3\0\1\10"+ + "\10\0\7\10\3\0\4\10\1\u0169\21\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0186\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\15\10\1\u0259\10\10\3\0\1\10"+ + "\10\0\7\10\3\0\22\10\1\46\3\10\34\0\1\u0234"+ + "\37\0\1\u025a\71\0\1\u025b\61\0\1\u0148\30\0\1\u025c"+ + "\64\0\1\u025d\65\0\1\u025e\2\0\1\u025f\20\0\1\u0158"+ + "\66\0\1\u0260\64\0\1\251\51\0\1\u0261\47\0\1\u0262"+ + "\35\0\1\u0263\100\0\1\u0264\15\0\1\10\10\0\1\353"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0265"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0266"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\1\10\1\u0267\24\10\3\0\1\10\10\0\1\u0182\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0178\12\10\3\0\1\10\10\0\2\10\1\u01f1\4\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\362\24\10\3\0\1\10\10\0\7\10\3\0\13\10"+ + "\1\u0116\12\10\3\0\1\10\10\0\1\u0268\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0269"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u026a"+ + "\12\10\3\0\1\10\10\0\7\10\3\0\4\10\1\124"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\213"+ + "\24\10\3\0\1\10\10\0\6\10\1\u026b\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u026c\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\2\10\1\u026d\23\10"+ + "\3\0\1\10\10\0\3\10\1\353\3\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\1\10\1\355\24\10"+ + "\3\0\1\10\10\0\4\10\1\u026e\2\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\7\10\1\213\16\10"+ + "\3\0\1\10\10\0\2\10\1\u026f\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\15\10\1\257\10\10"+ + "\3\0\1\10\10\0\2\10\1\u0270\4\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01fc\21\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\46\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\10\10\1\u0271\15\10"+ + "\3\0\1\10\10\0\7\10\3\0\25\10\1\46\3\0"+ + "\1\10\10\0\6\10\1\u01af\3\0\26\10\3\0\1\10"+ + "\10\0\1\u0272\6\10\3\0\26\10\3\0\1\10\10\0"+ + "\7\10\3\0\23\10\1\257\2\10\3\0\1\10\10\0"+ + "\7\10\3\0\4\10\1\347\21\10\3\0\1\10\10\0"+ + "\6\10\1\72\3\0\26\10\3\0\1\10\10\0\5\10"+ + "\1\u0273\1\10\3\0\26\10\31\0\1\u0148\55\0\1\u01cc"+ + "\47\0\1\u01d9\41\0\1\u0148\52\0\1\u0274\66\0\1\u0275"+ + "\45\0\1\u01cd\50\0\1\u0274\76\0\1\u013e\46\0\1\u0148"+ + "\67\0\1\u0148\6\0\1\10\10\0\7\10\3\0\1\10"+ + "\1\u0276\24\10\3\0\1\10\10\0\1\124\6\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0277"+ + "\23\10\3\0\1\10\10\0\2\10\1\u0278\4\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0109"+ + "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0238"+ + "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u017d"+ + "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0279"+ + "\24\10\3\0\1\10\10\0\4\10\1\u027a\2\10\3\0"+ + "\26\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u027b"+ + "\24\10\3\0\1\10\10\0\1\u0189\6\10\3\0\26\10"+ + "\3\0\1\10\10\0\7\10\3\0\6\10\1\u027c\17\10"+ + "\3\0\1\10\10\0\7\10\3\0\4\10\1\u0266\21\10"+ + "\30\0\1\u0148\44\0\1\u0263\35\0\1\10\10\0\7\10"+ + "\3\0\15\10\1\220\10\10\3\0\1\10\10\0\4\10"+ + "\1\u027d\2\10\3\0\26\10\3\0\1\10\10\0\4\10"+ + "\1\220\2\10\3\0\26\10\3\0\1\10\10\0\7\10"+ + "\3\0\4\10\1\u027e\21\10\3\0\1\10\10\0\1\u027f"+ + "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0273"+ + "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0"+ + "\6\10\1\u027d\17\10\3\0\1\10\10\0\1\u020d\6\10"+ + "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\14\10"+ + "\1\u017d\11\10\3\0\1\10\10\0\7\10\3\0\4\10"+ + "\1\u017d\21\10\1\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[27016]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\1\7\1\10\1\11\1\12\2\13\1\14\1\15" + - "\1\16\1\13\1\17\1\20\1\21\1\22\1\23\1\24" + - "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34" + - "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\1\44" + - "\1\10\1\45\1\46\1\47\1\10\1\50\1\51\3\10" + - "\1\52\1\6\1\7\1\10\1\53\1\12\1\13\1\54" + - "\1\14\1\15\1\16\1\13\1\17\1\20\1\21\1\22" + - "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32" + - "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42" + - "\1\43\1\44\1\10\1\45\1\46\1\47\1\10\1\50" + - "\1\51\3\10\1\52\1\55\1\56\21\55\1\57\30\55" + - "\1\60\1\61\22\60\1\62\27\60\1\63\1\64\4\63" + - "\1\65\45\63\56\0\1\10\10\0\7\10\3\0\26\10" + - "\4\0\1\11\52\0\1\66\10\0\7\66\3\0\26\66" + - "\7\0\1\67\57\0\1\13\43\0\1\10\10\0\1\10" + - "\1\70\1\71\2\10\1\72\1\10\3\0\4\10\1\73" + - "\11\10\1\74\7\10\3\0\1\10\10\0\7\10\3\0" + - "\10\10\1\75\15\10\3\0\1\10\10\0\1\70\6\10" + - "\3\0\13\10\1\76\12\10\3\0\1\10\10\0\1\70" + - "\3\10\1\70\2\10\3\0\4\10\1\77\6\10\1\100" + - "\12\10\3\0\1\10\10\0\1\101\5\10\1\102\3\0" + - "\1\10\1\103\1\10\1\104\1\105\6\10\1\46\12\10" + - "\3\0\1\10\10\0\1\106\3\10\1\70\1\10\1\107" + - "\3\0\1\10\1\110\11\10\1\111\12\10\3\0\1\10" + - "\10\0\2\10\1\112\4\10\3\0\5\10\2\46\2\10" + - "\1\113\14\10\3\0\1\10\10\0\2\10\1\114\1\10" + - "\1\115\1\116\1\117\3\0\1\10\1\120\1\121\2\10" + - "\1\122\4\10\1\123\13\10\3\0\1\10\10\0\2\10" + - "\1\124\1\10\1\125\1\126\1\10\3\0\4\10\1\127" + - "\2\10\1\130\2\10\1\131\2\10\1\132\1\133\7\10" + - "\3\0\1\10\10\0\5\10\1\134\1\135\3\0\1\10" + - "\1\136\1\10\1\137\1\140\5\10\1\141\1\142\12\10" + - "\3\0\1\10\10\0\1\143\3\10\1\144\1\10\1\145" + - "\3\0\1\10\1\146\13\10\1\147\10\10\3\0\1\10" + - "\10\0\1\150\6\10\3\0\1\10\1\151\5\10\1\152" + - "\1\153\15\10\3\0\1\10\10\0\1\154\5\10\1\155" + - "\3\0\1\10\1\156\2\10\1\157\3\10\1\160\1\46" + - "\1\10\1\46\12\10\3\0\1\10\10\0\5\10\1\161" + - "\1\162\3\0\1\10\1\163\2\10\1\164\2\10\1\165" + - "\3\10\1\166\12\10\3\0\1\10\10\0\1\167\1\170" + - "\2\10\1\171\1\10\1\172\3\0\3\10\1\173\4\10" + - "\1\174\2\10\1\175\1\176\2\10\1\177\5\10\1\46" + - "\3\0\1\10\10\0\2\10\1\200\4\10\3\0\12\10" + - "\1\201\13\10\3\0\1\10\10\0\1\202\5\10\1\203" + - "\3\0\1\10\1\204\11\10\1\205\12\10\3\0\1\10" + - "\10\0\5\10\1\206\1\207\3\0\1\10\1\210\1\211" + - "\1\10\1\212\2\10\1\46\1\213\1\214\10\10\1\215" + - "\3\10\3\0\1\10\10\0\4\10\1\216\1\124\1\10" + - "\3\0\4\10\1\217\1\220\2\10\1\221\1\10\1\222" + - "\6\10\1\223\4\10\3\0\1\10\10\0\1\224\4\10" + - "\1\225\1\10\3\0\13\10\1\226\1\46\11\10\3\0" + - "\1\10\10\0\1\227\6\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\1\10\1\230\13\10\1\147\10\10" + - "\3\0\1\10\10\0\1\231\5\10\1\232\3\0\3\10" + - "\1\233\22\10\14\0\1\234\1\235\1\236\1\237\1\240" + - "\1\241\1\242\4\0\1\243\1\244\2\0\1\245\1\0" + - "\1\246\1\247\1\250\1\251\2\0\1\252\1\0\1\253" + - "\2\0\1\254\7\0\1\53\2\0\1\54\45\0\1\55" + - "\1\0\21\55\1\0\30\55\1\60\1\0\22\60\1\0" + - "\27\60\1\63\1\0\4\63\1\0\45\63\7\0\1\255" + - "\46\0\1\10\10\0\7\10\3\0\5\10\1\256\20\10" + - "\3\0\1\10\10\0\7\10\3\0\7\10\1\257\16\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\260\21\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\261\7\10" + - "\1\262\13\10\3\0\1\10\10\0\6\10\1\213\3\0" + - "\26\10\3\0\1\10\10\0\1\263\3\10\1\264\1\265" + - "\1\266\3\0\2\10\1\267\1\270\1\10\1\271\1\272" + - "\1\273\2\10\1\274\13\10\3\0\1\10\10\0\6\10" + - "\1\124\3\0\13\10\1\275\12\10\3\0\1\10\10\0" + - "\4\10\1\276\2\10\3\0\12\10\1\277\13\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\300\2\10\1\213" + - "\1\10\1\301\14\10\3\0\1\10\10\0\4\10\1\302" + - "\2\10\3\0\11\10\1\303\14\10\3\0\1\10\10\0" + - "\7\10\3\0\12\10\1\257\2\10\1\304\10\10\3\0" + - "\1\10\10\0\1\153\6\10\3\0\26\10\3\0\1\10" + - "\10\0\1\305\6\10\3\0\1\10\1\306\6\10\1\307" + - "\15\10\3\0\1\10\10\0\2\10\1\310\1\311\3\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\312\4\10" + - "\3\0\7\10\1\313\5\10\1\314\10\10\3\0\1\10" + - "\10\0\7\10\3\0\15\10\1\315\10\10\3\0\1\10" + - "\10\0\3\10\1\46\3\10\3\0\7\10\1\316\12\10" + - "\1\46\3\10\3\0\1\10\10\0\2\10\1\317\1\10" + - "\1\320\2\10\3\0\6\10\1\321\1\322\2\10\1\323" + - "\13\10\3\0\1\10\10\0\7\10\3\0\12\10\1\324" + - "\13\10\3\0\1\10\10\0\7\10\3\0\10\10\1\325" + - "\15\10\3\0\1\10\10\0\1\326\6\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\327\24\10" + - "\3\0\1\10\10\0\2\10\1\330\4\10\3\0\26\10" + - "\3\0\1\10\10\0\5\10\1\331\1\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\3\10\1\332\22\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\333\24\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\334\24\10" + - "\3\0\1\10\10\0\7\10\3\0\5\10\1\46\20\10" + - "\3\0\1\10\10\0\4\10\1\335\2\10\3\0\26\10" + - "\3\0\1\10\10\0\4\10\1\317\1\46\1\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\336" + - "\21\10\3\0\1\10\10\0\7\10\3\0\2\10\1\337" + - "\23\10\3\0\1\10\10\0\7\10\3\0\12\10\1\340" + - "\13\10\3\0\1\10\10\0\1\341\6\10\3\0\13\10" + - "\1\342\12\10\3\0\1\10\10\0\6\10\1\220\3\0" + - "\26\10\3\0\1\10\10\0\1\147\6\10\3\0\1\10" + - "\1\343\11\10\1\72\12\10\3\0\1\10\10\0\7\10" + - "\3\0\11\10\1\113\14\10\3\0\1\10\10\0\2\10" + - "\1\344\1\10\1\345\1\346\1\10\3\0\4\10\1\347" + - "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\350" + - "\11\10\1\351\12\10\3\0\1\10\10\0\1\352\6\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10" + - "\1\353\1\10\1\350\12\10\3\0\1\10\10\0\2\10" + - "\1\354\4\10\3\0\4\10\1\355\4\10\1\356\1\357" + - "\1\360\5\10\1\46\4\10\3\0\1\10\10\0\7\10" + - "\3\0\1\10\1\361\24\10\3\0\1\10\10\0\7\10" + - "\3\0\11\10\1\362\14\10\3\0\1\10\10\0\3\10" + - "\1\363\3\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\16\10\1\133\2\10\1\364\4\10\3\0\1\10" + - "\10\0\7\10\3\0\1\10\1\365\24\10\3\0\1\10" + - "\10\0\2\10\1\366\1\367\1\370\2\10\3\0\7\10" + - "\1\371\1\10\1\372\1\373\13\10\3\0\1\10\10\0" + - "\2\10\1\374\4\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\10\10\1\375\15\10\3\0\1\10\10\0" + - "\2\10\1\46\4\10\3\0\26\10\3\0\1\10\10\0" + - "\5\10\1\376\1\10\3\0\7\10\1\377\16\10\3\0" + - "\1\10\10\0\7\10\3\0\7\10\1\u0100\16\10\3\0" + - "\1\10\10\0\4\10\1\u0101\2\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\13\10\1\u0102\12\10\3\0" + - "\1\10\10\0\7\10\3\0\11\10\1\u0103\14\10\3\0" + - "\1\10\10\0\7\10\3\0\13\10\1\u0104\12\10\3\0" + - "\1\10\10\0\5\10\1\u0105\1\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\2\10\1\u0106\23\10\3\0" + - "\1\10\10\0\1\u0107\6\10\3\0\1\10\1\u0108\11\10" + - "\1\u0109\12\10\3\0\1\10\10\0\5\10\1\u010a\1\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\u010b\4\10" + - "\3\0\4\10\1\u010c\6\10\1\u010d\12\10\3\0\1\10" + - "\10\0\4\10\1\46\1\u010e\1\10\3\0\26\10\3\0" + - "\1\10\10\0\5\10\1\353\1\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\1\10\1\u010f\2\10\1\u0110" + - "\1\46\5\10\1\u0111\12\10\3\0\1\10\10\0\3\10" + - "\1\u0112\3\10\3\0\11\10\1\46\14\10\3\0\1\10" + - "\10\0\7\10\3\0\1\10\1\u0113\24\10\3\0\1\10" + - "\10\0\7\10\3\0\11\10\1\u0114\1\u0115\13\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\u0116\3\10\1\u0117" + - "\15\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0118" + - "\14\10\3\0\1\10\10\0\6\10\1\u0102\3\0\26\10" + - "\3\0\1\10\10\0\4\10\1\u0119\1\10\1\u011a\3\0" + - "\15\10\1\u011b\10\10\3\0\1\10\10\0\7\10\3\0" + - "\5\10\1\352\20\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u011c\2\10\1\u011d\21\10\3\0\1\10\10\0" + - "\3\10\1\u011e\3\10\3\0\7\10\1\u011f\16\10\3\0" + - "\1\10\10\0\4\10\1\u0120\2\10\3\0\4\10\1\u0121" + - "\21\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0122" + - "\20\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0123" + - "\12\10\3\0\1\10\10\0\1\u0124\6\10\3\0\2\10" + - "\1\u0125\23\10\3\0\1\10\10\0\3\10\1\u0126\1\u0127" + - "\2\10\3\0\4\10\1\u0128\1\46\20\10\3\0\1\10" + - "\10\0\4\10\1\u0129\2\10\3\0\26\10\3\0\1\10" + - "\10\0\1\u012a\3\10\1\u012b\1\10\1\u012c\3\0\13\10" + - "\1\u012d\12\10\3\0\1\10\10\0\4\10\1\46\2\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u012e\6\10\3\0" + - "\26\10\3\0\1\10\10\0\1\u012f\6\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\3\10\1\u0130\22\10" + - "\3\0\1\10\10\0\7\10\3\0\5\10\1\u0131\20\10" + - "\3\0\1\10\10\0\7\10\3\0\7\10\1\46\16\10" + - "\3\0\1\10\10\0\4\10\1\u0132\2\10\3\0\26\10" + - "\3\0\1\10\10\0\4\10\1\u0133\2\10\3\0\26\10" + - "\3\0\1\10\10\0\1\u0134\6\10\3\0\26\10\3\0" + - "\1\10\10\0\5\10\1\362\1\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\1\10\1\u0135\24\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\u0136\3\10\1\u0137" + - "\15\10\3\0\1\10\10\0\1\u0102\6\10\3\0\14\10" + - "\1\u0138\11\10\3\0\1\10\10\0\5\10\1\u0139\1\10" + - "\3\0\4\10\1\u013a\11\10\1\133\7\10\3\0\1\10" + - "\10\0\6\10\1\u013b\3\0\26\10\3\0\1\10\10\0" + - "\2\10\1\u013c\1\10\1\363\2\10\3\0\26\10\3\0" + - "\1\10\10\0\1\u013d\5\10\1\302\3\0\26\10\16\0" + - "\1\u013e\2\0\1\u013f\25\0\1\u0140\41\0\1\u0141\1\u0142" + - "\47\0\1\u0143\42\0\1\u0144\17\0\1\u0145\43\0\1\u0146" + - "\3\0\1\u0147\3\0\1\u0148\26\0\1\u0149\24\0\1\u014a" + - "\30\0\1\u014b\15\0\1\u0148\62\0\1\u014c\47\0\1\u014d" + - "\1\0\1\u014e\34\0\1\u014f\16\0\1\u0148\32\0\1\u0150" + - "\7\0\1\u0151\5\0\1\u0152\3\0\1\u0153\27\0\1\u0154" + - "\21\0\1\u0155\27\0\1\u0156\12\0\1\u0157\62\0\1\u0158" + - "\32\0\1\u0159\24\0\1\u0148\25\0\1\u015a\61\0\1\u015b" + - "\6\0\1\u015c\25\0\1\10\10\0\7\10\3\0\4\10" + - "\1\u015d\2\10\1\u015e\16\10\3\0\1\10\10\0\1\46" + - "\6\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\13\10\1\365\12\10\3\0\1\10\10\0\1\u015f\6\10" + - "\3\0\26\10\3\0\1\10\10\0\5\10\1\u0160\1\10" + - "\3\0\1\10\1\u0161\11\10\1\350\12\10\3\0\1\10" + - "\10\0\7\10\3\0\16\10\1\u0162\7\10\3\0\1\10" + - "\10\0\1\46\5\10\1\u0163\3\0\7\10\1\u0164\16\10" + - "\3\0\1\10\10\0\1\u0165\6\10\3\0\26\10\3\0" + - "\1\10\10\0\2\10\1\u0166\4\10\3\0\26\10\3\0" + - "\1\10\10\0\1\224\6\10\3\0\3\10\1\u0167\22\10" + - "\3\0\1\10\10\0\1\143\6\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\10\10\1\u0168\15\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\366\21\10\3\0" + - "\1\10\10\0\7\10\3\0\3\10\1\173\22\10\3\0" + - "\1\10\10\0\7\10\3\0\1\10\1\124\2\10\1\u0169" + - "\21\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u016a" + - "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\46" + - "\12\10\3\0\1\10\10\0\4\10\1\u016b\2\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u016c" + - "\14\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u016d" + - "\13\10\3\0\1\10\10\0\5\10\1\257\1\10\3\0" + - "\26\10\3\0\1\10\10\0\1\u016e\6\10\3\0\26\10" + - "\3\0\1\10\10\0\5\10\1\u016f\1\10\3\0\10\10" + - "\1\u016d\15\10\3\0\1\10\10\0\7\10\3\0\1\10" + - "\1\u0170\24\10\3\0\1\10\10\0\2\10\1\u0171\4\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\u0172\4\10" + - "\3\0\26\10\3\0\1\10\10\0\3\10\1\u0173\3\10" + - "\3\0\26\10\3\0\1\10\10\0\1\341\6\10\3\0" + - "\26\10\3\0\1\10\10\0\1\u0174\6\10\3\0\17\10" + - "\1\46\6\10\3\0\1\10\10\0\4\10\1\u0175\2\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\366\4\10" + - "\3\0\26\10\3\0\1\10\10\0\1\362\4\10\1\257" + - "\1\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0176" + - "\2\10\3\0\26\10\3\0\1\10\10\0\1\365\6\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u0177\6\10\3\0" + - "\26\10\3\0\1\10\10\0\6\10\1\302\3\0\13\10" + - "\1\u0178\12\10\3\0\1\10\10\0\1\342\6\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\213" + - "\15\10\3\0\1\10\10\0\7\10\3\0\13\10\1\350" + - "\12\10\3\0\1\10\10\0\5\10\1\331\1\10\3\0" + - "\11\10\1\u0179\14\10\3\0\1\10\10\0\7\10\3\0" + - "\11\10\1\u017a\14\10\3\0\1\10\10\0\7\10\3\0" + - "\7\10\1\u017b\16\10\3\0\1\10\10\0\7\10\3\0" + - "\6\10\1\u017c\17\10\3\0\1\10\10\0\5\10\1\u017d" + - "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u017e\24\10\3\0\1\10\10\0\4\10\1\u017f" + - "\2\10\3\0\26\10\3\0\1\10\10\0\3\10\1\u0180" + - "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\4\10\1\u0181\21\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0182\24\10\3\0\1\10\10\0\1\u0183\6\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u0184\6\10\3\0" + - "\26\10\3\0\1\10\10\0\2\10\1\124\4\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\213" + - "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0185" + - "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0186" + - "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0187" + - "\24\10\3\0\1\10\10\0\1\u0188\4\10\1\46\1\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\5\10" + - "\1\u0189\20\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\u0116\21\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\276\21\10\3\0\1\10\10\0\7\10\3\0\1\10" + - "\1\u018a\24\10\3\0\1\10\10\0\4\10\1\u018b\2\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\353\21\10\3\0\1\10\10\0\7\10\3\0\12\10" + - "\1\u018c\13\10\3\0\1\10\10\0\7\10\3\0\14\10" + - "\1\353\11\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\u018d\21\10\3\0\1\10\10\0\7\10\3\0\5\10" + - "\1\364\20\10\3\0\1\10\10\0\5\10\1\46\1\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\3\10" + - "\1\46\22\10\3\0\1\10\10\0\6\10\1\u018e\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\46" + - "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0108" + - "\24\10\3\0\1\10\10\0\6\10\1\u018f\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0190\6\10" + - "\1\u0191\15\10\3\0\1\10\10\0\1\213\6\10\3\0" + - "\12\10\1\u0192\13\10\3\0\1\10\10\0\7\10\3\0" + - "\13\10\1\u0193\12\10\3\0\1\10\10\0\5\10\1\u0194" + - "\1\10\3\0\13\10\1\350\12\10\3\0\1\10\10\0" + - "\3\10\1\257\3\10\3\0\5\10\1\u0195\11\10\1\353" + - "\6\10\3\0\1\10\10\0\7\10\3\0\15\10\1\u0196" + - "\10\10\3\0\1\10\10\0\1\u018a\6\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0197\23\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0198\7\10" + - "\1\u0199\4\10\1\46\6\10\3\0\1\10\10\0\7\10" + - "\3\0\1\10\1\u019a\24\10\3\0\1\10\10\0\7\10" + - "\3\0\12\10\1\46\13\10\3\0\1\10\10\0\7\10" + - "\3\0\11\10\1\u0182\14\10\3\0\1\10\10\0\7\10" + - "\3\0\22\10\1\u019b\3\10\3\0\1\10\10\0\1\u019c" + - "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u019d" + - "\2\10\3\0\26\10\3\0\1\10\10\0\1\10\1\46" + - "\5\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\11\10\1\257\14\10\3\0\1\10\10\0\7\10\3\0" + - "\11\10\1\46\14\10\3\0\1\10\10\0\6\10\1\u019e" + - "\3\0\26\10\3\0\1\10\10\0\4\10\1\u019f\2\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\11\10" + - "\1\u01a0\14\10\3\0\1\10\10\0\4\10\1\u01a1\2\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u01a2\6\10\3\0" + - "\26\10\3\0\1\10\10\0\2\10\1\u01a3\4\10\3\0" + - "\4\10\1\u01a4\21\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u01a5\24\10\3\0\1\10\10\0\7\10\3\0" + - "\12\10\1\u01a6\13\10\3\0\1\10\10\0\2\10\1\u01a7" + - "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\4\10\1\u01a8\21\10\3\0\1\10\10\0\7\10\3\0" + - "\11\10\1\u01a9\3\10\1\u0182\10\10\3\0\1\10\10\0" + - "\7\10\3\0\21\10\1\147\4\10\3\0\1\10\10\0" + - "\4\10\1\353\2\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\4\10\1\u01aa\21\10\3\0\1\10\10\0" + - "\7\10\3\0\15\10\1\u01ab\10\10\3\0\1\10\10\0" + - "\6\10\1\362\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\13\10\1\153\5\10\1\u01ac\4\10\3\0\1\10" + - "\10\0\7\10\3\0\10\10\1\u01ad\15\10\3\0\1\10" + - "\10\0\2\10\1\u01ae\4\10\3\0\26\10\3\0\1\10" + - "\10\0\3\10\1\257\3\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\4\10\1\u01af\21\10\3\0\1\10" + - "\10\0\7\10\3\0\7\10\1\u01b0\16\10\3\0\1\10" + - "\10\0\6\10\1\u01b1\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\17\10\1\46\6\10\3\0\1\10\10\0" + - "\1\362\5\10\1\u01b2\3\0\26\10\3\0\1\10\10\0" + - "\4\10\1\u01b3\2\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\24\10\1\124\1\10\3\0\1\10\10\0" + - "\4\10\1\u01b4\2\10\3\0\26\10\3\0\1\10\10\0" + - "\1\u01b5\6\10\3\0\26\10\3\0\1\10\10\0\4\10" + - "\1\u01b6\2\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\11\10\1\u01b7\14\10\3\0\1\10\10\0\2\10" + - "\1\46\4\10\3\0\7\10\1\u01b8\16\10\3\0\1\10" + - "\10\0\7\10\3\0\5\10\1\u01b9\1\u01ba\17\10\3\0" + - "\1\10\10\0\1\u01bb\6\10\3\0\5\10\1\u01bc\20\10" + - "\3\0\1\10\10\0\2\10\1\u01bd\4\10\3\0\26\10" + - "\3\0\1\10\10\0\4\10\1\u01be\2\10\3\0\2\10" + - "\1\46\23\10\3\0\1\10\10\0\2\10\1\u01bf\4\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01c0\4\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u01c1\6\10\3\0" + - "\26\10\3\0\1\10\10\0\1\u01c2\6\10\3\0\26\10" + - "\3\0\1\10\10\0\1\365\6\10\3\0\12\10\1\323" + - "\13\10\3\0\1\10\10\0\5\10\1\u01c3\1\u01c4\3\0" + - "\7\10\1\u01c5\16\10\3\0\1\10\10\0\7\10\3\0" + - "\4\10\1\u01c6\21\10\3\0\1\10\10\0\2\10\1\u0121" + - "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\5\10\1\317\20\10\3\0\1\10\10\0\2\10\1\u01c7" + - "\4\10\3\0\26\10\3\0\1\10\10\0\5\10\1\u01c8" + - "\1\10\3\0\26\10\3\0\1\10\10\0\6\10\1\201" + - "\3\0\10\10\1\257\15\10\3\0\1\10\10\0\6\10" + - "\1\u01c9\3\0\26\10\3\0\1\10\10\0\3\10\1\u01ca" + - "\3\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\5\10\1\u01cb\20\10\3\0\1\10\10\0\2\10\1\46" + - "\4\10\3\0\4\10\1\257\21\10\33\0\1\u0148\55\0" + - "\1\u01cc\45\0\1\u01cd\54\0\1\u0151\5\0\1\u01ce\3\0" + - "\1\u01cf\51\0\1\u0155\1\u01d0\27\0\1\u0159\17\0\1\u01d1" + - "\5\0\1\u01d2\51\0\1\u01d3\32\0\1\u0147\47\0\1\u01d4" + - "\100\0\1\u0148\30\0\1\u01d5\1\0\1\u0148\63\0\1\u0140" + - "\53\0\1\u01d6\2\0\1\u01d7\4\0\1\251\54\0\1\u01d8" + - "\47\0\1\u0148\56\0\1\u01d9\50\0\1\u01da\50\0\1\u0148" + - "\50\0\1\u01d4\64\0\1\u01db\2\0\1\u01dc\45\0\1\u01dd" + - "\33\0\1\u0159\2\0\1\u01de\63\0\1\u01df\41\0\1\u013e" + - "\65\0\1\u01e0\43\0\1\u0148\71\0\1\u01e1\57\0\1\u01e2" + - "\27\0\1\u01e3\57\0\1\u01e4\34\0\1\10\10\0\7\10" + - "\3\0\7\10\1\152\16\10\3\0\1\10\10\0\7\10" + - "\3\0\1\10\1\220\24\10\3\0\1\10\10\0\7\10" + - "\3\0\12\10\1\213\13\10\3\0\1\10\10\0\7\10" + - "\3\0\13\10\1\u01e5\12\10\3\0\1\10\10\0\2\10" + - "\1\u01e6\4\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\12\10\1\u01e7\13\10\3\0\1\10\10\0\4\10" + - "\1\u01e8\2\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\13\10\1\u01e9\12\10\3\0\1\10\10\0\3\10" + - "\1\311\3\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\12\10\1\323\13\10\3\0\1\10\10\0\7\10" + - "\3\0\1\10\1\u01ea\24\10\3\0\1\10\10\0\7\10" + - "\3\0\12\10\1\u01eb\13\10\3\0\1\10\10\0\6\10" + - "\1\u01ec\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\12\10\1\u01ed\13\10\3\0\1\10\10\0\6\10\1\u01ee" + - "\3\0\26\10\3\0\1\10\10\0\6\10\1\u01ef\3\0" + - "\26\10\3\0\1\10\10\0\5\10\1\u01af\1\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\12\10\1\u01f0" + - "\13\10\3\0\1\10\10\0\1\u01f1\6\10\3\0\26\10" + - "\3\0\1\10\10\0\4\10\1\u01f2\2\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\7\10\1\u01f3\16\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u019b\23\10" + - "\3\0\1\10\10\0\4\10\1\363\2\10\3\0\26\10" + - "\3\0\1\10\10\0\1\10\1\220\5\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u01f4\23\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f5\21\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01f6\21\10" + - "\3\0\1\10\10\0\1\u01f7\6\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\12\10\1\u01f8\13\10\3\0" + - "\1\10\10\0\4\10\1\u017d\2\10\3\0\26\10\3\0" + - "\1\10\10\0\6\10\1\u01f9\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\1\46\25\10\3\0\1\10\10\0" + - "\7\10\3\0\4\10\1\u01fa\21\10\3\0\1\10\10\0" + - "\7\10\3\0\1\10\1\u017d\24\10\3\0\1\10\10\0" + - "\1\u017d\6\10\3\0\26\10\3\0\1\10\10\0\6\10" + - "\1\u01fb\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\14\10\1\46\11\10\3\0\1\10\10\0\2\10\1\361" + - "\4\10\3\0\26\10\3\0\1\10\10\0\2\10\1\u01fc" + - "\4\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\7\10\1\u01fd\16\10\3\0\1\10\10\0\1\362\6\10" + - "\3\0\26\10\3\0\1\10\10\0\5\10\1\u01fe\1\10" + - "\3\0\26\10\3\0\1\10\10\0\2\10\1\u01ff\4\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\7\10" + - "\1\u0200\16\10\3\0\1\10\10\0\4\10\1\257\2\10" + - "\3\0\26\10\3\0\1\10\10\0\1\u0201\6\10\3\0" + - "\4\10\1\u0202\21\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0203\6\10\1\u018a\15\10\3\0\1\10\10\0" + - "\7\10\3\0\5\10\1\u0204\20\10\3\0\1\10\10\0" + - "\2\10\1\u0205\4\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\7\10\1\u0206\16\10\3\0\1\10\10\0" + - "\6\10\1\153\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\4\10\1\153\21\10\3\0\1\10\10\0\7\10" + - "\3\0\13\10\1\u0207\12\10\3\0\1\10\10\0\7\10" + - "\3\0\21\10\1\257\4\10\3\0\1\10\10\0\7\10" + - "\3\0\1\10\1\u0208\24\10\3\0\1\10\10\0\7\10" + - "\3\0\13\10\1\u0109\12\10\3\0\1\10\10\0\7\10" + - "\3\0\11\10\1\75\14\10\3\0\1\10\10\0\1\u0183" + - "\6\10\3\0\4\10\1\u0209\21\10\3\0\1\10\10\0" + - "\7\10\3\0\4\10\1\376\21\10\3\0\1\10\10\0" + - "\5\10\1\336\1\10\3\0\26\10\3\0\1\10\10\0" + - "\5\10\1\u020a\1\10\3\0\7\10\1\u020b\16\10\3\0" + - "\1\10\10\0\7\10\3\0\13\10\1\u020c\12\10\3\0" + - "\1\10\10\0\7\10\3\0\13\10\1\u020d\12\10\3\0" + - "\1\10\10\0\7\10\3\0\7\10\1\u0116\16\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\u020e\21\10\3\0" + - "\1\10\10\0\7\10\3\0\1\10\1\u0116\5\10\1\353" + - "\16\10\3\0\1\10\10\0\2\10\1\u020f\4\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\213" + - "\23\10\3\0\1\10\10\0\7\10\3\0\5\10\1\u0210" + - "\20\10\3\0\1\10\10\0\4\10\1\u0211\2\10\3\0" + - "\26\10\3\0\1\10\10\0\4\10\1\u0212\2\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0213" + - "\12\10\3\0\1\10\10\0\1\u0214\6\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0215\24\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u0216\23\10" + - "\3\0\1\10\10\0\7\10\3\0\13\10\1\362\12\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0217\24\10" + - "\3\0\1\10\10\0\7\10\3\0\6\10\1\u0218\17\10" + - "\3\0\1\10\10\0\7\10\3\0\7\10\1\353\16\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\u0219\24\10" + - "\3\0\1\10\10\0\6\10\1\u018e\3\0\13\10\1\u020c" + - "\12\10\3\0\1\10\10\0\2\10\1\u021a\4\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0182" + - "\17\10\3\0\1\10\10\0\4\10\1\317\2\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\10\10\1\u021b" + - "\15\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u021c" + - "\5\10\1\u0182\10\10\3\0\1\10\10\0\1\u0191\6\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\2\10" + - "\1\u021d\4\10\1\46\16\10\3\0\1\10\10\0\7\10" + - "\3\0\10\10\1\u0109\15\10\3\0\1\10\10\0\6\10" + - "\1\u01a2\3\0\26\10\3\0\1\10\10\0\6\10\1\u021e" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\16\10" + - "\1\u021f\7\10\3\0\1\10\10\0\1\u0220\6\10\3\0" + - "\26\10\3\0\1\10\10\0\4\10\1\u0221\2\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\353" + - "\12\10\3\0\1\10\10\0\7\10\3\0\10\10\1\353" + - "\15\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0160" + - "\23\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0222" + - "\21\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0223" + - "\21\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0224" + - "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u011c" + - "\12\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0225" + - "\24\10\3\0\1\10\10\0\5\10\1\336\1\10\3\0" + - "\12\10\1\u0226\13\10\3\0\1\10\10\0\7\10\3\0" + - "\5\10\1\220\20\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0227\24\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0228\24\10\3\0\1\10\10\0\7\10\3\0" + - "\3\10\1\213\22\10\3\0\1\10\10\0\7\10\3\0" + - "\13\10\1\u0229\12\10\14\0\1\u0148\60\0\1\u0148\75\0" + - "\1\u01dc\45\0\1\u022a\36\0\1\u01cc\53\0\1\u0150\50\0" + - "\1\u0159\101\0\1\u0140\26\0\1\u0148\54\0\1\u022b\55\0" + - "\1\u022c\46\0\1\u022d\71\0\1\u0158\63\0\1\u0148\51\0" + - "\1\u022e\27\0\1\u022f\74\0\1\u01d1\32\0\1\u0230\2\0" + - "\1\u0231\10\0\1\u0232\1\0\1\u0233\1\0\1\u0234\3\0" + - "\1\u0235\35\0\1\u01cd\60\0\1\u013f\56\0\1\u0147\62\0" + - "\1\u01d0\45\0\1\u0236\53\0\1\u0237\41\0\1\u01cc\35\0" + - "\1\10\10\0\7\10\3\0\5\10\1\u0238\20\10\3\0" + - "\1\10\10\0\7\10\3\0\5\10\1\u0239\20\10\3\0" + - "\1\10\10\0\7\10\3\0\1\10\1\u0161\24\10\3\0" + - "\1\10\10\0\5\10\1\u016f\1\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\u023a\21\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\u023b\21\10\3\0" + - "\1\10\10\0\7\10\3\0\17\10\1\u023c\6\10\3\0" + - "\1\10\10\0\2\10\1\213\4\10\3\0\26\10\3\0" + - "\1\10\10\0\7\10\3\0\6\10\1\u023d\6\10\1\u0182" + - "\10\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u023e" + - "\12\10\3\0\1\10\10\0\2\10\1\u023f\4\10\3\0" + - "\26\10\3\0\1\10\10\0\5\10\1\u0240\1\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\11\10\1\u0241" + - "\14\10\3\0\1\10\10\0\7\10\3\0\6\10\1\u0242" + - "\3\10\1\u0243\13\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0244\24\10\3\0\1\10\10\0\7\10\3\0" + - "\7\10\1\u010e\16\10\3\0\1\10\10\0\7\10\3\0" + - "\11\10\1\u0245\14\10\3\0\1\10\10\0\7\10\3\0" + - "\4\10\1\u0246\21\10\3\0\1\10\10\0\7\10\3\0" + - "\13\10\1\u0247\12\10\3\0\1\10\10\0\5\10\1\u0180" + - "\1\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0248\24\10\3\0\1\10\10\0\7\10\3\0" + - "\15\10\1\46\10\10\3\0\1\10\10\0\7\10\3\0" + - "\5\10\1\353\20\10\3\0\1\10\10\0\1\220\6\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10" + - "\1\u0249\12\10\3\0\1\10\10\0\7\10\3\0\5\10" + - "\1\u024a\20\10\3\0\1\10\10\0\7\10\3\0\20\10" + - "\1\46\5\10\3\0\1\10\10\0\2\10\1\u024b\4\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10" + - "\1\u024c\24\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\u0238\21\10\3\0\1\10\10\0\6\10\1\u024d\3\0" + - "\26\10\3\0\1\10\10\0\3\10\1\46\3\10\3\0" + - "\26\10\3\0\1\10\10\0\4\10\1\u0215\2\10\3\0" + - "\26\10\3\0\1\10\10\0\2\10\1\72\4\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\257" + - "\23\10\3\0\1\10\10\0\6\10\1\u024e\3\0\26\10" + - "\3\0\1\10\10\0\6\10\1\u024f\3\0\26\10\3\0" + - "\1\10\10\0\1\u024b\6\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\21\10\1\317\4\10\3\0\1\10" + - "\10\0\7\10\3\0\4\10\1\220\21\10\3\0\1\10" + - "\10\0\1\u0249\6\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\13\10\1\u018a\12\10\3\0\1\10\10\0" + - "\7\10\3\0\1\10\1\u0250\24\10\3\0\1\10\10\0" + - "\7\10\3\0\7\10\1\u015e\16\10\3\0\1\10\10\0" + - "\7\10\3\0\1\10\1\46\24\10\3\0\1\10\10\0" + - "\2\10\1\46\4\10\3\0\6\10\1\u0251\17\10\3\0" + - "\1\10\10\0\7\10\3\0\15\10\1\u0252\10\10\3\0" + - "\1\10\10\0\7\10\3\0\4\10\1\357\21\10\3\0" + - "\1\10\10\0\1\u0253\6\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\4\10\1\u0254\21\10\3\0\1\10" + - "\10\0\7\10\3\0\6\10\1\u0255\17\10\3\0\1\10" + - "\10\0\4\10\1\u0238\2\10\3\0\26\10\3\0\1\10" + - "\10\0\3\10\1\220\3\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\4\10\1\257\21\10\3\0\1\10" + - "\10\0\6\10\1\u0256\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\1\10\1\u0257\24\10\3\0\1\10\10\0" + - "\7\10\3\0\16\10\1\46\7\10\3\0\1\10\10\0" + - "\7\10\3\0\12\10\1\353\13\10\3\0\1\10\10\0" + - "\7\10\3\0\6\10\1\353\17\10\3\0\1\10\10\0" + - "\1\365\3\10\1\u01be\2\10\3\0\26\10\3\0\1\10" + - "\10\0\7\10\3\0\22\10\1\u0258\3\10\3\0\1\10" + - "\10\0\7\10\3\0\15\10\1\u0182\10\10\3\0\1\10" + - "\10\0\7\10\3\0\1\10\1\u01fc\24\10\3\0\1\10" + - "\10\0\7\10\3\0\21\10\1\u0238\4\10\3\0\1\10" + - "\10\0\7\10\3\0\4\10\1\u0169\21\10\3\0\1\10" + - "\10\0\7\10\3\0\15\10\1\u0186\10\10\3\0\1\10" + - "\10\0\7\10\3\0\15\10\1\u0259\10\10\3\0\1\10" + - "\10\0\7\10\3\0\22\10\1\46\3\10\34\0\1\u0234" + - "\37\0\1\u025a\71\0\1\u025b\61\0\1\u0148\30\0\1\u025c" + - "\64\0\1\u025d\65\0\1\u025e\2\0\1\u025f\20\0\1\u0158" + - "\66\0\1\u0260\64\0\1\251\51\0\1\u0261\47\0\1\u0262" + - "\35\0\1\u0263\100\0\1\u0264\15\0\1\10\10\0\1\353" + - "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0265" + - "\2\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0266" + - "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\1\10\1\u0267\24\10\3\0\1\10\10\0\1\u0182\6\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\13\10" + - "\1\u0178\12\10\3\0\1\10\10\0\2\10\1\u01f1\4\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\1\10" + - "\1\362\24\10\3\0\1\10\10\0\7\10\3\0\13\10" + - "\1\u0116\12\10\3\0\1\10\10\0\1\u0268\6\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u0269" + - "\12\10\3\0\1\10\10\0\7\10\3\0\13\10\1\u026a" + - "\12\10\3\0\1\10\10\0\7\10\3\0\4\10\1\124" + - "\21\10\3\0\1\10\10\0\7\10\3\0\1\10\1\213" + - "\24\10\3\0\1\10\10\0\6\10\1\u026b\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\u026c\21\10" + - "\3\0\1\10\10\0\7\10\3\0\2\10\1\u026d\23\10" + - "\3\0\1\10\10\0\3\10\1\353\3\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\1\10\1\355\24\10" + - "\3\0\1\10\10\0\4\10\1\u026e\2\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\7\10\1\213\16\10" + - "\3\0\1\10\10\0\2\10\1\u026f\4\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\15\10\1\257\10\10" + - "\3\0\1\10\10\0\2\10\1\u0270\4\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\u01fc\21\10" + - "\3\0\1\10\10\0\7\10\3\0\6\10\1\46\17\10" + - "\3\0\1\10\10\0\7\10\3\0\10\10\1\u0271\15\10" + - "\3\0\1\10\10\0\7\10\3\0\25\10\1\46\3\0" + - "\1\10\10\0\6\10\1\u01af\3\0\26\10\3\0\1\10" + - "\10\0\1\u0272\6\10\3\0\26\10\3\0\1\10\10\0" + - "\7\10\3\0\23\10\1\257\2\10\3\0\1\10\10\0" + - "\7\10\3\0\4\10\1\347\21\10\3\0\1\10\10\0" + - "\6\10\1\72\3\0\26\10\3\0\1\10\10\0\5\10" + - "\1\u0273\1\10\3\0\26\10\31\0\1\u0148\55\0\1\u01cc" + - "\47\0\1\u01d9\41\0\1\u0148\52\0\1\u0274\66\0\1\u0275" + - "\45\0\1\u01cd\50\0\1\u0274\76\0\1\u013e\46\0\1\u0148" + - "\67\0\1\u0148\6\0\1\10\10\0\7\10\3\0\1\10" + - "\1\u0276\24\10\3\0\1\10\10\0\1\124\6\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u0277" + - "\23\10\3\0\1\10\10\0\2\10\1\u0278\4\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\4\10\1\u0109" + - "\21\10\3\0\1\10\10\0\7\10\3\0\7\10\1\u0238" + - "\16\10\3\0\1\10\10\0\7\10\3\0\2\10\1\u017d" + - "\23\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u0279" + - "\24\10\3\0\1\10\10\0\4\10\1\u027a\2\10\3\0" + - "\26\10\3\0\1\10\10\0\7\10\3\0\1\10\1\u027b" + - "\24\10\3\0\1\10\10\0\1\u0189\6\10\3\0\26\10" + - "\3\0\1\10\10\0\7\10\3\0\6\10\1\u027c\17\10" + - "\3\0\1\10\10\0\7\10\3\0\4\10\1\u0266\21\10" + - "\30\0\1\u0148\44\0\1\u0263\35\0\1\10\10\0\7\10" + - "\3\0\15\10\1\220\10\10\3\0\1\10\10\0\4\10" + - "\1\u027d\2\10\3\0\26\10\3\0\1\10\10\0\4\10" + - "\1\220\2\10\3\0\26\10\3\0\1\10\10\0\7\10" + - "\3\0\4\10\1\u027e\21\10\3\0\1\10\10\0\1\u027f" + - "\6\10\3\0\26\10\3\0\1\10\10\0\4\10\1\u0273" + - "\2\10\3\0\26\10\3\0\1\10\10\0\7\10\3\0" + - "\6\10\1\u027d\17\10\3\0\1\10\10\0\1\u020d\6\10" + - "\3\0\26\10\3\0\1\10\10\0\7\10\3\0\14\10" + - "\1\u017d\11\10\3\0\1\10\10\0\7\10\3\0\4\10" + - "\1\u017d\21\10\1\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[27016]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\2\11\3\1\1\11\12\1\3\11\23\1\1\11"+ + "\1\1\2\11\1\1\2\11\1\1\1\11\2\1\1\11"+ + "\144\1\21\0\1\11\220\1\7\0\1\1\2\0\1\11"+ + "\24\0\157\1\12\0\1\1\16\0\105\1\16\0\42\1"+ + "\13\0\17\1\2\0\12\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[639]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SASTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "*", null }; + } + + + /** + * Returns whether tokens of the specified type should have "mark + * occurrences" enabled for the current programming language. + * + * @param type The token type. + * @return Whether tokens of this type should have "mark occurrences" + * enabled. + */ + @Override + public boolean getMarkOccurrencesOfTokenType(int type) { + return type==Token.IDENTIFIER || type==Token.VARIABLE; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public SASTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public SASTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 180) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\2\11\3\1\1\11\12\1\3\11\23\1\1\11" + - "\1\1\2\11\1\1\2\11\1\1\1\11\2\1\1\11" + - "\144\1\21\0\1\11\220\1\7\0\1\1\2\0\1\11" + - "\24\0\157\1\12\0\1\1\16\0\105\1\16\0\42\1" + - "\13\0\17\1\2\0\12\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[639]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public SASTokenMaker() { - super(); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "*", null }; - } - - /** - * Returns whether tokens of the specified type should have "mark occurrences" enabled for the current programming - * language. - * - * @param type - * The token type. - * @return Whether tokens of this type should have "mark occurrences" enabled. - */ - public boolean getMarkOccurrencesOfTokenType(int type) { - return type == Token.IDENTIFIER || type == Token.VARIABLE; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR; - start = text.offset; - break; - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; + throw new Error(message); + } + + + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); + + zzMarkedPos -= number; + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + if (zzMarkedPosL > zzStartRead) { + switch (zzBufferL[zzMarkedPosL-1]) { + case '\n': + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + zzAtBOL = true; + break; + case '\r': + if (zzMarkedPosL < zzEndReadL) + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + else if (zzAtEOF) + zzAtBOL = false; + else { + boolean eof = zzRefill(); + zzMarkedPosL = zzMarkedPos; + zzEndReadL = zzEndRead; + zzBufferL = zzBuffer; + if (eof) + zzAtBOL = false; + else + zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; + } + break; default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public SASTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public SASTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 180) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; + zzAtBOL = false; } + } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + if (zzAtBOL) + zzState = ZZ_LEXSTATE[zzLexicalState+1]; + else + zzState = ZZ_LEXSTATE[zzLexicalState]; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - if (zzMarkedPosL > zzStartRead) { - switch (zzBufferL[zzMarkedPosL - 1]) { - case '\n': - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - zzAtBOL = true; - break; - case '\r': - if (zzMarkedPosL < zzEndReadL) - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - else if (zzAtEOF) - zzAtBOL = false; - else { - boolean eof = zzRefill(); - zzMarkedPosL = zzMarkedPos; - zzEndReadL = zzEndRead; - zzBufferL = zzBuffer; - if (eof) - zzAtBOL = false; - else - zzAtBOL = zzBufferL[zzMarkedPosL] != '\n'; - } - break; - default: - zzAtBOL = false; - } + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - if (zzAtBOL) - zzState = ZZ_LEXSTATE[zzLexicalState + 1]; - else - zzState = ZZ_LEXSTATE[zzLexicalState]; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } + else { + zzInput = zzBufferL[zzCurrentPosL++]; } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 13: { - yybegin(YYINITIAL); - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 21: - break; - case 2: { - addNullToken(); - return firstToken; - } - case 22: - break; - case 18: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 23: - break; - case 17: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 24: - break; - case 3: { - addToken(Token.WHITESPACE); - } - case 25: - break; - case 8: { - start = zzMarkedPos - 1; - yybegin(CHAR); - } - case 26: - break; - case 5: { - addToken(Token.RESERVED_WORD); - } - case 27: - break; - case 6: { - addToken(Token.SEPARATOR); - } - case 28: - break; - case 16: { - addToken(Token.VARIABLE); - } - case 29: - break; - case 14: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_CHAR); - } - case 30: - break; - case 1: { - addToken(Token.IDENTIFIER); - } - case 31: - break; - case 20: { - addToken(Token.FUNCTION); - } - case 32: - break; - case 19: { - addToken(Token.DATA_TYPE); - } - case 33: - break; - case 11: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 34: - break; - case 9: { // We must do this because of how we - // abuse JFlex; since we return an entire - // list of tokens at once instead of a - // single token at a time, the "^" regex - // character doesn't really work, so we must - // check that we're at the beginning of a - // line ourselves. - start = zzStartRead; - // Might not be any whitespace. - if (yylength() > 1) { - addToken(zzStartRead, zzMarkedPos - 2, Token.WHITESPACE); - zzStartRead = zzMarkedPos - 1; - } - // Remember: zzStartRead may now be updated, - // so we must check against 'start'. - if (start == s.offset) { - addToken(zzStartRead, zzEndRead, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - else { - addToken(zzStartRead, zzStartRead, Token.OPERATOR); - } - } - case 35: - break; - case 7: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 36: - break; - case 4: { - addToken(Token.OPERATOR); + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 21: break; + case 2: + { addNullToken(); return firstToken; + } + case 22: break; + case 18: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 23: break; + case 17: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 24: break; + case 3: + { addToken(Token.WHITESPACE); + } + case 25: break; + case 8: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 26: break; + case 5: + { addToken(Token.RESERVED_WORD); + } + case 27: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 28: break; + case 16: + { addToken(Token.VARIABLE); + } + case 29: break; + case 14: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 30: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 31: break; + case 20: + { addToken(Token.FUNCTION); + } + case 32: break; + case 19: + { addToken(Token.DATA_TYPE); + } + case 33: break; + case 11: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 34: break; + case 9: + { // We must do this because of how we + // abuse JFlex; since we return an entire + // list of tokens at once instead of a + // single token at a time, the "^" regex + // character doesn't really work, so we must + // check that we're at the beginning of a + // line ourselves. + start = zzStartRead; + // Might not be any whitespace. + if (yylength()>1) { + addToken(zzStartRead,zzMarkedPos-2, Token.WHITESPACE); + zzStartRead = zzMarkedPos-1; + } + // Remember: zzStartRead may now be updated, + // so we must check against 'start'. + if (start==s.offset) { + addToken(zzStartRead,zzEndRead, Token.COMMENT_EOL); + addNullToken(); + return firstToken; + } + else { + addToken(zzStartRead,zzStartRead, Token.OPERATOR); + } + } + case 35: break; + case 7: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 36: break; + case 4: + { addToken(Token.OPERATOR); + } + case 37: break; + case 12: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 38: break; + case 10: + { + } + case 39: break; + case 15: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 40: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 37: - break; - case 12: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + case 640: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 38: - break; - case 10: { + case 641: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 39: - break; - case 15: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 642: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 40: - break; + case 643: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 640: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 641: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 642: - break; - case CHAR: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 643: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex old mode 100644 new mode 100755 index 7054e996b..7aa7add86 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.flex @@ -2,23 +2,9 @@ * 02/15/2005 * * SQLTokenMaker.java - Scanner for SQL. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                                - *
                              • The generated SQLTokenMaker.java file will contain two + *
                              • The generated SQLTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -119,6 +105,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -126,13 +113,22 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. + * Overridden to return true so paren matching occurs for + * SQL. * - * @return The start and end strings to add to a line to "comment" - * it out. + * @return true always. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return true; + } + + + /** + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "--", null }; } @@ -180,7 +176,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java old mode 100644 new mode 100755 index cc18eb669..353e1fce8 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/SQLTokenMaker.java @@ -1,26 +1,12 @@ -/* The following code was generated by JFlex 1.4.1 on 2/7/09 11:02 AM */ +/* The following code was generated by JFlex 1.4.1 on 6/29/14 12:25 AM */ /* * 02/15/2005 * * SQLTokenMaker.java - Scanner for SQL. - * Copyright (C) 2005 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1132 +15,1124 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * This class generates tokens representing a text stream as SQL. - *

                                - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                                - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                                - * + * This class generates tokens representing a text stream as SQL.

                                + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                                + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                                + * * If you wish to regenerate this file yourself, keep in mind the following: *

                                  - *
                                • The generated SQLTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                                • - *
                                • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                                • - *
                                • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                                • + *
                                • The generated SQLTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                                • + *
                                • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                                • + *
                                • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                                • *
                                - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class SQLTokenMaker extends AbstractJFlexTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int STRING = 1; - public static final int YYINITIAL = 0; - public static final int MLC = 3; - public static final int CHAR = 2; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\4\1\1\25\0\1\4\1\0\1\54\4\0\1\55\2\15" + - "\1\13\1\11\1\0\1\12\1\17\1\14\1\3\1\50\1\50\1\3" + - "\1\45\3\3\1\46\1\3\1\16\1\0\1\10\1\7\1\6\2\0" + - "\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41\1\34\1\51" + - "\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25\1\30\1\24" + - "\1\32\1\36\1\40\1\43\1\27\1\2\1\56\1\0\1\57\1\0" + - "\1\5\1\0\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41" + - "\1\34\1\51\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25" + - "\1\30\1\24\1\32\1\36\1\40\1\43\1\27\1\2\uff85\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\4\0\1\1\1\2\1\1\1\3\1\4\5\5\1\6" + - "\1\1\1\7\27\1\1\10\1\11\1\12\1\13\1\14" + - "\1\15\1\13\1\16\1\17\1\13\1\20\1\13\1\0" + - "\1\21\1\22\4\1\1\23\45\1\2\23\4\1\1\23" + - "\7\1\1\23\22\1\1\24\1\13\1\25\1\7\1\0" + - "\3\1\1\26\51\1\1\23\4\1\1\23\2\1\1\23" + - "\22\1\1\23\4\1\1\23\4\1\1\23\17\1\1\23" + - "\35\1\1\23\5\1\1\23\10\1\1\23\5\1\1\23" + - "\11\1\1\23\42\1\1\23\4\1\1\23\16\1\1\26" + - "\4\1"; - - private static int[] zzUnpackAction() { - int[] result = new int[354]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\60\0\140\0\220\0\300\0\300\0\360\0\u0120" + - "\0\u0150\0\u0180\0\300\0\u01b0\0\u01e0\0\u0210\0\300\0\u0240" + - "\0\u0270\0\u02a0\0\u02d0\0\u0300\0\u0330\0\u0360\0\u0390\0\u03c0" + - "\0\u03f0\0\u0420\0\u0450\0\u0480\0\u04b0\0\u04e0\0\u0510\0\u0540" + - "\0\u0570\0\u05a0\0\u05d0\0\u0600\0\u0630\0\u0660\0\u0690\0\u06c0" + - "\0\300\0\300\0\u06f0\0\u0720\0\300\0\u0750\0\u0780\0\300" + - "\0\u07b0\0\u07e0\0\300\0\u0810\0\u0840\0\u0870\0\300\0\u08a0" + - "\0\u08d0\0\u0900\0\u0930\0\u0960\0\u0990\0\u09c0\0\u09f0\0\u0a20" + - "\0\u0a50\0\u0a80\0\u0ab0\0\u0ae0\0\u0b10\0\u0b40\0\u0b70\0\u0ba0" + - "\0\u0bd0\0\u0c00\0\u0c30\0\u0c60\0\u0c90\0\u0cc0\0\u0cf0\0\u0d20" + - "\0\u0d50\0\u0d80\0\u0db0\0\u0de0\0\u0e10\0\u0e40\0\u0e70\0\u0ea0" + - "\0\u0ed0\0\u0f00\0\u0f30\0\u0f60\0\u0f90\0\u0fc0\0\u0ff0\0\u1020" + - "\0\u1050\0\u1080\0\360\0\u10b0\0\u10e0\0\u1110\0\u1140\0\u1170" + - "\0\u11a0\0\u11d0\0\u1200\0\u1230\0\u1260\0\u1290\0\u12c0\0\u12f0" + - "\0\u1320\0\u1350\0\u1380\0\u13b0\0\u13e0\0\u1410\0\u1440\0\u1470" + - "\0\u14a0\0\u14d0\0\u1500\0\u1530\0\u1560\0\u1590\0\u15c0\0\u15f0" + - "\0\u1620\0\u1650\0\300\0\300\0\300\0\u1680\0\u1680\0\u16b0" + - "\0\u16e0\0\u1710\0\360\0\u1740\0\u0960\0\u1770\0\u17a0\0\u17d0" + - "\0\u1800\0\u1830\0\u1860\0\u1890\0\u18c0\0\u18f0\0\u1920\0\u1950" + - "\0\u1980\0\u19b0\0\u19e0\0\u1a10\0\u1a40\0\u1a70\0\u1aa0\0\u1ad0" + - "\0\u1b00\0\u1b30\0\u1b60\0\u1b90\0\u1bc0\0\u1bf0\0\u1c20\0\u1c50" + - "\0\u1c80\0\u1cb0\0\u1ce0\0\u1d10\0\u1d40\0\u1d70\0\u1da0\0\u1dd0" + - "\0\u1e00\0\u1e30\0\u1e60\0\u1e90\0\u1ec0\0\u1ef0\0\u1f20\0\u1f50" + - "\0\u1f80\0\u1fb0\0\u1fe0\0\u2010\0\u2040\0\u2070\0\u20a0\0\u20d0" + - "\0\u2100\0\u2130\0\u2160\0\u2190\0\u21c0\0\u21f0\0\u2220\0\u2250" + - "\0\u2280\0\u22b0\0\u22e0\0\u2310\0\u2340\0\u2370\0\u12f0\0\u23a0" + - "\0\u23d0\0\u2400\0\u2430\0\u2460\0\u2490\0\u24c0\0\u24f0\0\u2520" + - "\0\u2550\0\u2580\0\u25b0\0\u25e0\0\u2610\0\u2640\0\u2670\0\u26a0" + - "\0\u26d0\0\u2700\0\u2730\0\u2760\0\u2790\0\u27c0\0\u27f0\0\u2820" + - "\0\u2850\0\u2880\0\u28b0\0\u28e0\0\u2910\0\u2940\0\u2970\0\u29a0" + - "\0\u29d0\0\u2a00\0\u2a30\0\u2a60\0\u2a90\0\u2ac0\0\u2af0\0\u2b20" + - "\0\u2b50\0\u2b80\0\u2bb0\0\u2be0\0\u2c10\0\u2c40\0\u2c70\0\u2ca0" + - "\0\u2cd0\0\u2d00\0\u2d30\0\u2d60\0\u2d90\0\u2dc0\0\u2df0\0\u15f0" + - "\0\u2e20\0\u2e50\0\u2e80\0\u2eb0\0\u2ee0\0\u0c30\0\u2f10\0\u2f40" + - "\0\u2f70\0\u2fa0\0\u2fd0\0\u3000\0\u3030\0\u3060\0\u0ff0\0\u3090" + - "\0\u30c0\0\u2040\0\u30f0\0\u3120\0\u2ca0\0\u3150\0\u3180\0\u31b0" + - "\0\u31e0\0\u3210\0\u3240\0\u3270\0\u32a0\0\u32d0\0\u3300\0\u3330" + - "\0\u3360\0\u3390\0\u33c0\0\u33f0\0\u3420\0\u3450\0\u3480\0\u34b0" + - "\0\u34e0\0\u3510\0\u3540\0\u3570\0\u35a0\0\u35d0\0\u3600\0\u3630" + - "\0\u3660\0\u3690\0\u36c0\0\u36f0\0\u3720\0\u3750\0\u3780\0\u37b0" + - "\0\u37e0\0\u3810\0\u3840\0\u3870\0\u38a0\0\u38d0\0\u3900\0\u3930" + - "\0\u3960\0\u3990\0\u39c0\0\u39f0\0\u3a20\0\u3a50\0\u3a80\0\u3ab0" + - "\0\u3ae0\0\u3b10\0\u3b40\0\u3b70\0\u3ba0\0\u3bd0\0\u3c00\0\u3c30" + - "\0\u3c60\0\u3c90\0\u3cc0\0\u3cf0\0\u3d20\0\u3d50\0\u3d80\0\u3db0" + - "\0\u3de0\0\u3e10"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[354]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\1\13" + - "\1\14\1\13\1\15\1\13\1\16\1\17\1\20\1\21" + - "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31" + - "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41" + - "\1\42\1\43\1\44\1\7\1\45\2\10\1\46\1\10" + - "\1\47\1\50\1\7\1\51\1\52\1\53\1\5\1\54" + - "\1\55\52\54\1\56\3\54\1\57\1\60\53\57\1\61" + - "\2\57\1\62\1\63\11\62\1\64\44\62\62\0\2\7" + - "\1\0\1\7\12\0\34\7\7\0\1\10\13\0\1\21" + - "\1\65\24\0\2\10\1\0\1\10\13\0\1\11\62\0" + - "\1\13\56\0\2\13\62\0\1\66\60\0\1\67\46\0" + - "\1\7\15\0\25\7\2\0\1\7\1\0\3\7\7\0" + - "\1\21\14\0\1\65\24\0\2\21\1\0\1\21\11\0" + - "\2\7\1\0\1\7\12\0\23\7\1\70\10\7\6\0" + - "\2\7\1\0\1\7\12\0\2\7\1\71\1\72\2\7" + - "\1\73\1\7\1\74\1\7\1\75\3\7\1\76\15\7" + - "\6\0\2\7\1\0\1\7\12\0\1\77\1\100\3\7" + - "\1\101\5\7\1\102\1\103\17\7\6\0\2\7\1\0" + - "\1\7\12\0\1\104\12\7\1\105\1\106\17\7\6\0" + - "\2\7\1\0\1\7\12\0\1\107\1\110\3\7\1\111" + - "\1\7\1\112\3\7\1\113\1\114\17\7\6\0\2\7" + - "\1\0\1\7\12\0\1\115\13\7\1\116\17\7\6\0" + - "\2\7\1\0\1\7\12\0\12\7\1\117\1\120\20\7" + - "\6\0\2\7\1\0\1\7\12\0\1\121\33\7\6\0" + - "\2\7\1\0\1\7\12\0\1\122\3\7\1\123\2\7" + - "\1\124\2\7\1\125\1\126\1\127\1\130\3\7\1\131" + - "\12\7\6\0\2\7\1\0\1\7\12\0\5\7\1\132" + - "\4\7\1\133\1\134\5\7\1\135\12\7\6\0\2\7" + - "\1\0\1\7\12\0\6\7\1\136\1\7\1\137\11\7" + - "\1\140\11\7\6\0\2\7\1\0\1\7\12\0\3\7" + - "\1\141\1\7\1\142\1\143\2\7\1\144\1\145\5\7" + - "\1\146\1\7\1\147\11\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\150\1\7\1\143\4\7\1\113\11\7" + - "\1\151\4\7\6\0\2\7\1\0\1\7\12\0\1\152" + - "\1\153\11\7\1\154\1\155\17\7\6\0\2\7\1\0" + - "\1\7\12\0\1\7\1\156\32\7\6\0\2\7\1\0" + - "\1\7\12\0\1\157\6\7\1\160\3\7\1\161\1\162" + - "\17\7\6\0\2\7\1\0\1\7\12\0\14\7\1\163" + - "\4\7\1\164\12\7\6\0\2\7\1\0\1\7\12\0" + - "\1\7\1\165\32\7\6\0\2\7\1\0\1\7\12\0" + - "\1\166\1\167\3\7\1\170\5\7\1\171\1\172\17\7" + - "\6\0\2\7\1\0\1\7\12\0\3\7\1\173\1\7" + - "\1\174\5\7\1\175\20\7\6\0\2\7\1\0\1\7" + - "\12\0\1\176\4\7\1\177\4\7\1\200\21\7\6\0" + - "\2\7\1\0\1\7\12\0\13\7\1\201\20\7\6\0" + - "\2\7\1\0\1\7\12\0\1\202\33\7\4\0\57\53" + - "\1\203\1\54\1\0\52\54\1\0\3\54\54\0\1\204" + - "\3\0\1\57\1\0\53\57\1\0\2\57\55\0\1\204" + - "\2\0\1\62\1\0\11\62\1\0\44\62\14\0\1\205" + - "\46\0\1\206\5\0\2\207\32\0\2\206\1\0\1\206" + - "\7\0\1\66\1\0\56\66\2\0\2\7\1\0\1\7" + - "\12\0\4\7\1\210\7\7\1\211\17\7\6\0\2\7" + - "\1\0\1\7\12\0\2\7\1\143\31\7\6\0\2\7" + - "\1\0\1\7\12\0\3\7\1\143\1\137\27\7\6\0" + - "\2\7\1\0\1\7\12\0\2\7\1\143\4\7\1\143" + - "\24\7\6\0\2\7\1\0\1\7\12\0\11\7\1\143" + - "\22\7\6\0\2\7\1\0\1\7\12\0\4\7\1\212" + - "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\143" + - "\25\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0" + - "\3\7\1\214\4\7\1\215\23\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\216\27\7\6\0\2\7\1\0" + - "\1\7\12\0\13\7\1\113\20\7\6\0\2\7\1\0" + - "\1\7\12\0\12\7\1\217\21\7\6\0\2\7\1\0" + - "\1\7\12\0\10\7\1\220\23\7\6\0\2\7\1\0" + - "\1\7\12\0\16\7\1\221\5\7\1\120\7\7\6\0" + - "\2\7\1\0\1\7\12\0\6\7\1\222\11\7\1\223" + - "\6\7\1\224\4\7\6\0\2\7\1\0\1\7\12\0" + - "\32\7\1\225\1\7\6\0\2\7\1\0\1\7\12\0" + - "\23\7\1\120\10\7\6\0\2\7\1\0\1\7\12\0" + - "\17\7\1\226\14\7\6\0\2\7\1\0\1\7\12\0" + - "\1\7\1\227\12\7\1\230\17\7\6\0\2\7\1\0" + - "\1\7\12\0\22\7\1\225\11\7\6\0\2\7\1\0" + - "\1\7\12\0\22\7\1\143\11\7\6\0\2\7\1\0" + - "\1\7\12\0\15\7\1\231\16\7\6\0\2\7\1\0" + - "\1\7\12\0\1\7\1\232\22\7\1\233\7\7\6\0" + - "\2\7\1\0\1\7\12\0\27\7\1\234\4\7\6\0" + - "\2\7\1\0\1\7\12\0\3\7\1\232\11\7\1\235" + - "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\143" + - "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\236" + - "\23\7\6\0\2\7\1\0\1\7\12\0\3\7\1\237" + - "\1\143\3\7\1\240\23\7\6\0\2\7\1\0\1\7" + - "\12\0\2\7\1\241\2\7\1\242\26\7\6\0\2\7" + - "\1\0\1\7\12\0\10\7\1\243\23\7\6\0\2\7" + - "\1\0\1\7\12\0\15\7\1\143\1\7\1\244\14\7" + - "\6\0\2\7\1\0\1\7\12\0\15\7\1\225\16\7" + - "\6\0\2\7\1\0\1\7\12\0\6\7\1\245\25\7" + - "\6\0\2\7\1\0\1\7\12\0\1\7\1\246\32\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\247\20\7" + - "\6\0\2\7\1\0\1\7\12\0\1\250\33\7\6\0" + - "\2\7\1\0\1\7\12\0\5\7\1\251\26\7\6\0" + - "\2\7\1\0\1\7\12\0\3\7\1\252\2\7\1\253" + - "\3\7\1\254\21\7\6\0\2\7\1\0\1\7\12\0" + - "\1\7\1\255\32\7\6\0\2\7\1\0\1\7\12\0" + - "\14\7\1\256\17\7\6\0\2\7\1\0\1\7\12\0" + - "\1\257\33\7\6\0\2\7\1\0\1\7\12\0\2\7" + - "\1\250\17\7\1\223\11\7\6\0\2\7\1\0\1\7" + - "\12\0\1\260\33\7\6\0\2\7\1\0\1\7\12\0" + - "\2\7\1\137\31\7\6\0\2\7\1\0\1\7\12\0" + - "\4\7\1\261\27\7\6\0\2\7\1\0\1\7\12\0" + - "\4\7\1\137\27\7\6\0\2\7\1\0\1\7\12\0" + - "\6\7\1\262\25\7\6\0\2\7\1\0\1\7\12\0" + - "\4\7\1\263\27\7\6\0\2\7\1\0\1\7\12\0" + - "\2\7\1\264\1\7\1\265\1\7\1\137\1\7\1\266" + - "\23\7\6\0\2\7\1\0\1\7\12\0\6\7\1\267" + - "\25\7\6\0\2\7\1\0\1\7\12\0\15\7\1\270" + - "\16\7\6\0\2\7\1\0\1\7\12\0\23\7\1\143" + - "\10\7\6\0\2\7\1\0\1\7\12\0\2\7\1\143" + - "\3\7\1\50\25\7\6\0\2\7\1\0\1\7\12\0" + - "\6\7\1\143\25\7\6\0\2\7\1\0\1\7\12\0" + - "\3\7\1\271\1\7\1\272\26\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\273\27\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\225\27\7\6\0\2\7\1\0" + - "\1\7\12\0\13\7\1\274\20\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\275\1\7\1\276\25\7\6\0" + - "\2\7\1\0\1\7\12\0\4\7\1\277\27\7\6\0" + - "\2\7\1\0\1\7\12\0\1\300\33\7\6\0\2\7" + - "\1\0\1\7\12\0\16\7\1\242\15\7\6\0\2\7" + - "\1\0\1\7\12\0\5\7\1\301\26\7\6\0\2\7" + - "\1\0\1\7\12\0\5\7\1\302\2\7\1\303\23\7" + - "\6\0\2\7\1\0\1\7\12\0\14\7\1\304\17\7" + - "\6\0\2\7\1\0\1\7\12\0\10\7\1\305\23\7" + - "\6\0\2\7\1\0\1\7\12\0\16\7\1\306\15\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\307\20\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\310\20\7" + - "\6\0\2\7\1\0\1\7\12\0\5\7\1\311\26\7" + - "\6\0\2\7\1\0\1\7\12\0\6\7\1\312\25\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\313\20\7" + - "\6\0\2\7\1\0\1\7\12\0\14\7\1\71\17\7" + - "\6\0\2\7\1\0\1\7\12\0\14\7\1\155\17\7" + - "\6\0\2\7\1\0\1\7\12\0\7\7\1\143\24\7" + - "\7\0\1\206\41\0\2\206\1\0\1\206\11\0\2\7" + - "\1\0\1\7\12\0\5\7\1\314\26\7\6\0\2\7" + - "\1\0\1\7\12\0\10\7\1\315\23\7\6\0\2\7" + - "\1\0\1\7\12\0\13\7\1\316\20\7\6\0\2\7" + - "\1\0\1\7\12\0\1\317\33\7\6\0\2\7\1\0" + - "\1\7\12\0\1\320\1\321\32\7\6\0\2\7\1\0" + - "\1\7\12\0\17\7\1\322\14\7\6\0\2\7\1\0" + - "\1\7\12\0\1\7\1\323\2\7\1\324\27\7\6\0" + - "\2\7\1\0\1\7\12\0\1\232\33\7\6\0\2\7" + - "\1\0\1\7\12\0\27\7\1\325\4\7\6\0\2\7" + - "\1\0\1\7\12\0\1\326\33\7\6\0\2\7\1\0" + - "\1\7\12\0\14\7\1\327\17\7\6\0\2\7\1\0" + - "\1\7\12\0\1\143\33\7\6\0\2\7\1\0\1\7" + - "\12\0\3\7\1\330\30\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\331\25\7\6\0\2\7\1\0\1\7" + - "\12\0\15\7\1\213\16\7\6\0\2\7\1\0\1\7" + - "\12\0\1\332\33\7\6\0\2\7\1\0\1\7\12\0" + - "\3\7\1\143\30\7\6\0\2\7\1\0\1\7\12\0" + - "\1\333\33\7\6\0\2\7\1\0\1\7\12\0\21\7" + - "\1\120\12\7\6\0\2\7\1\0\1\7\12\0\1\334" + - "\16\7\1\137\14\7\6\0\2\7\1\0\1\7\12\0" + - "\6\7\1\270\25\7\6\0\2\7\1\0\1\7\12\0" + - "\1\335\33\7\6\0\2\7\1\0\1\7\12\0\10\7" + - "\1\336\23\7\6\0\2\7\1\0\1\7\12\0\1\337" + - "\33\7\6\0\2\7\1\0\1\7\12\0\14\7\1\340" + - "\17\7\6\0\2\7\1\0\1\7\12\0\4\7\1\341" + - "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\342" + - "\23\7\6\0\2\7\1\0\1\7\12\0\27\7\1\322" + - "\4\7\6\0\2\7\1\0\1\7\12\0\3\7\1\343" + - "\30\7\6\0\2\7\1\0\1\7\12\0\5\7\1\120" + - "\26\7\6\0\2\7\1\0\1\7\12\0\1\7\1\317" + - "\32\7\6\0\2\7\1\0\1\7\12\0\5\7\1\344" + - "\26\7\6\0\2\7\1\0\1\7\12\0\12\7\1\345" + - "\21\7\6\0\2\7\1\0\1\7\12\0\10\7\1\346" + - "\1\347\4\7\1\350\15\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\351\25\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\352\26\7\6\0\2\7\1\0\1\7" + - "\12\0\13\7\1\155\17\7\1\353\6\0\2\7\1\0" + - "\1\7\12\0\5\7\1\143\26\7\6\0\2\7\1\0" + - "\1\7\12\0\13\7\1\354\20\7\6\0\2\7\1\0" + - "\1\7\12\0\1\355\33\7\6\0\2\7\1\0\1\7" + - "\12\0\1\356\33\7\6\0\2\7\1\0\1\7\12\0" + - "\14\7\1\357\17\7\6\0\2\7\1\0\1\7\12\0" + - "\1\153\33\7\6\0\2\7\1\0\1\7\12\0\1\360" + - "\12\7\1\143\20\7\6\0\2\7\1\0\1\7\12\0" + - "\1\247\33\7\6\0\2\7\1\0\1\7\12\0\13\7" + - "\1\300\20\7\6\0\2\7\1\0\1\7\12\0\13\7" + - "\1\143\20\7\6\0\2\7\1\0\1\7\12\0\12\7" + - "\1\361\21\7\6\0\2\7\1\0\1\7\12\0\11\7" + - "\1\362\5\7\1\363\2\7\1\143\11\7\6\0\2\7" + - "\1\0\1\7\12\0\20\7\1\364\13\7\6\0\2\7" + - "\1\0\1\7\12\0\3\7\1\365\30\7\6\0\2\7" + - "\1\0\1\366\12\0\34\7\6\0\2\7\1\0\1\7" + - "\12\0\1\7\1\367\32\7\6\0\2\7\1\0\1\7" + - "\12\0\21\7\1\143\12\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\225\26\7\6\0\2\7\1\0\1\7" + - "\12\0\11\7\1\370\22\7\6\0\2\7\1\0\1\7" + - "\12\0\1\7\1\371\32\7\6\0\2\7\1\0\1\7" + - "\12\0\10\7\1\372\23\7\6\0\2\7\1\0\1\7" + - "\12\0\15\7\1\276\16\7\6\0\2\7\1\0\1\7" + - "\12\0\14\7\1\373\17\7\6\0\2\7\1\0\1\7" + - "\12\0\13\7\1\120\20\7\6\0\2\7\1\0\1\7" + - "\12\0\1\7\1\374\32\7\6\0\2\7\1\0\1\7" + - "\12\0\15\7\1\143\16\7\6\0\2\7\1\0\1\7" + - "\12\0\1\375\33\7\6\0\2\7\1\0\1\7\12\0" + - "\1\376\33\7\6\0\2\7\1\0\1\7\12\0\12\7" + - "\1\113\21\7\6\0\2\7\1\0\1\7\12\0\1\7" + - "\1\377\32\7\6\0\2\7\1\0\1\7\12\0\4\7" + - "\1\u0100\27\7\6\0\2\7\1\0\1\7\12\0\14\7" + - "\1\u0101\17\7\6\0\2\7\1\0\1\7\12\0\4\7" + - "\1\u0102\27\7\6\0\2\7\1\0\1\7\12\0\17\7" + - "\1\u0103\14\7\6\0\2\7\1\0\1\7\12\0\3\7" + - "\1\225\30\7\6\0\2\7\1\0\1\7\12\0\3\7" + - "\1\u0104\30\7\6\0\2\7\1\0\1\7\12\0\14\7" + - "\1\u0105\17\7\6\0\2\7\1\0\1\7\12\0\4\7" + - "\1\u0106\12\7\1\363\14\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\213\26\7\6\0\2\7\1\0\1\7" + - "\12\0\11\7\1\u0107\22\7\6\0\2\7\1\0\1\7" + - "\12\0\1\u0108\33\7\6\0\2\7\1\0\1\7\12\0" + - "\10\7\1\u0109\23\7\6\0\2\7\1\0\1\7\12\0" + - "\10\7\1\u010a\23\7\6\0\2\7\1\0\1\7\12\0" + - "\5\7\1\u010b\26\7\6\0\2\7\1\0\1\7\12\0" + - "\5\7\1\u010c\26\7\6\0\2\7\1\0\1\7\12\0" + - "\11\7\1\120\22\7\6\0\2\7\1\0\1\7\12\0" + - "\14\7\1\u010d\17\7\6\0\2\7\1\0\1\7\12\0" + - "\16\7\1\u010e\15\7\6\0\2\7\1\0\1\7\12\0" + - "\6\7\1\u010f\25\7\6\0\2\7\1\0\1\7\12\0" + - "\1\u0110\33\7\6\0\2\7\1\0\1\7\12\0\4\7" + - "\1\u0111\27\7\6\0\2\7\1\0\1\7\12\0\3\7" + - "\1\u0112\30\7\6\0\2\7\1\0\1\7\12\0\1\u0113" + - "\33\7\6\0\2\7\1\0\1\7\12\0\15\7\1\155" + - "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\u0114" + - "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\u0115" + - "\32\7\6\0\2\7\1\0\1\7\12\0\1\u0116\33\7" + - "\6\0\2\7\1\0\1\7\12\0\4\7\1\u0117\27\7" + - "\6\0\2\7\1\0\1\366\12\0\1\7\1\u0118\32\7" + - "\6\0\2\7\1\0\1\7\12\0\12\7\1\225\21\7" + - "\6\0\2\7\1\0\1\7\12\0\17\7\1\u0119\14\7" + - "\6\0\2\7\1\0\1\7\12\0\4\7\1\u011a\27\7" + - "\6\0\2\7\1\0\1\7\12\0\5\7\1\u011b\26\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\155\20\7" + - "\6\0\2\7\1\0\1\7\12\0\27\7\1\u011c\4\7" + - "\6\0\2\7\1\0\1\7\12\0\1\u011d\33\7\6\0" + - "\2\7\1\0\1\7\12\0\21\7\1\u011e\12\7\6\0" + - "\2\7\1\0\1\7\12\0\14\7\1\u011f\17\7\6\0" + - "\2\7\1\0\1\7\12\0\1\u0120\33\7\6\0\2\7" + - "\1\0\1\7\12\0\1\u0121\33\7\6\0\2\7\1\0" + - "\1\7\12\0\3\7\1\u0122\30\7\6\0\2\7\1\0" + - "\1\7\12\0\5\7\1\202\26\7\6\0\2\7\1\0" + - "\1\7\12\0\1\u0123\33\7\6\0\2\7\1\0\1\7" + - "\12\0\15\7\1\u0124\16\7\6\0\2\7\1\0\1\7" + - "\12\0\20\7\1\u0125\13\7\6\0\2\7\1\0\1\7" + - "\12\0\4\7\1\u0126\27\7\6\0\2\7\1\0\1\7" + - "\12\0\4\7\1\u0127\27\7\6\0\2\7\1\0\1\7" + - "\12\0\14\7\1\u0128\17\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\u0107\26\7\6\0\2\7\1\0\1\7" + - "\12\0\11\7\1\u0129\22\7\6\0\2\7\1\0\1\7" + - "\12\0\10\7\1\143\23\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\u012a\25\7\6\0\2\7\1\0\1\7" + - "\12\0\14\7\1\126\17\7\6\0\2\7\1\0\1\7" + - "\12\0\1\7\1\u012b\32\7\6\0\2\7\1\0\1\7" + - "\12\0\3\7\1\u012c\30\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\u012d\25\7\6\0\2\7\1\0\1\7" + - "\12\0\1\107\33\7\6\0\2\7\1\0\1\7\12\0" + - "\1\7\1\232\32\7\6\0\2\7\1\0\1\7\12\0" + - "\3\7\1\u012e\20\7\1\u012f\7\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\u0130\27\7\6\0\2\7\1\0" + - "\1\7\12\0\1\u0131\33\7\6\0\2\7\1\0\1\7" + - "\12\0\14\7\1\215\17\7\6\0\2\7\1\0\1\7" + - "\12\0\13\7\1\u0132\20\7\6\0\2\7\1\0\1\7" + - "\12\0\27\7\1\143\4\7\6\0\2\7\1\0\1\7" + - "\12\0\15\7\1\u0133\16\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\u0134\26\7\6\0\2\7\1\0\1\7" + - "\12\0\14\7\1\u0123\17\7\6\0\2\7\1\0\1\7" + - "\12\0\6\7\1\u0135\25\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\u0136\26\7\6\0\2\7\1\0\1\7" + - "\12\0\4\7\1\u0137\27\7\6\0\2\7\1\0\1\7" + - "\12\0\5\7\1\u0129\26\7\6\0\2\7\1\0\1\7" + - "\12\0\11\7\1\145\22\7\6\0\2\7\1\0\1\7" + - "\12\0\31\7\1\237\2\7\6\0\2\7\1\0\1\7" + - "\12\0\1\7\1\u0138\32\7\6\0\2\7\1\0\1\7" + - "\12\0\1\u0139\33\7\6\0\2\7\1\0\1\7\12\0" + - "\1\7\1\257\32\7\6\0\2\7\1\0\1\7\12\0" + - "\6\7\1\276\25\7\6\0\2\7\1\0\1\7\12\0" + - "\1\155\33\7\6\0\2\7\1\0\1\7\12\0\1\7" + - "\1\155\32\7\6\0\2\7\1\0\1\7\12\0\1\u013a" + - "\33\7\6\0\2\7\1\0\1\7\12\0\6\7\1\120" + - "\25\7\6\0\2\7\1\0\1\7\12\0\1\u013b\33\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013c\20\7" + - "\6\0\2\7\1\0\1\7\12\0\14\7\1\u013d\17\7" + - "\6\0\2\7\1\0\1\7\12\0\25\7\2\143\5\7" + - "\6\0\2\7\1\0\1\7\12\0\27\7\1\155\4\7" + - "\6\0\2\7\1\0\1\7\12\0\4\7\1\213\27\7" + - "\6\0\2\7\1\0\1\7\12\0\11\7\1\u013e\22\7" + - "\6\0\2\7\1\0\1\7\12\0\10\7\1\225\23\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013f\20\7" + - "\6\0\2\7\1\0\1\7\12\0\11\7\1\u0140\22\7" + - "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0141\32\7" + - "\6\0\2\7\1\0\1\7\12\0\13\7\1\u0142\20\7" + - "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0143\32\7" + - "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0144\25\7" + - "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0133\25\7" + - "\6\0\2\7\1\0\1\u0145\12\0\34\7\6\0\2\7" + - "\1\0\1\7\12\0\14\7\1\u0146\17\7\6\0\2\7" + - "\1\0\1\7\12\0\4\7\1\u0147\4\7\1\202\22\7" + - "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0112\32\7" + - "\6\0\2\7\1\0\1\7\12\0\1\u0148\33\7\6\0" + - "\2\7\1\0\1\7\12\0\11\7\1\u0149\22\7\6\0" + - "\2\7\1\0\1\7\12\0\5\7\1\u014a\26\7\6\0" + - "\2\7\1\0\1\7\12\0\6\7\1\u014b\25\7\6\0" + - "\2\7\1\0\1\7\12\0\4\7\1\u014c\27\7\6\0" + - "\2\7\1\0\1\7\12\0\5\7\1\71\26\7\6\0" + - "\2\7\1\0\1\7\12\0\13\7\1\u014d\20\7\6\0" + - "\2\7\1\0\1\7\12\0\5\7\1\u014e\26\7\6\0" + - "\2\7\1\0\1\7\12\0\20\7\1\143\13\7\6\0" + - "\2\7\1\0\1\7\12\0\4\7\1\u014f\27\7\6\0" + - "\2\7\1\0\1\7\12\0\4\7\1\u0150\27\7\6\0" + - "\2\7\1\0\1\7\12\0\5\7\1\310\26\7\6\0" + - "\2\7\1\0\1\7\12\0\15\7\1\113\16\7\6\0" + - "\2\7\1\0\1\7\12\0\11\7\1\u0151\22\7\6\0" + - "\2\7\1\0\1\7\12\0\12\7\1\u0152\21\7\6\0" + - "\2\7\1\0\1\7\12\0\6\7\1\u0153\25\7\6\0" + - "\2\7\1\0\1\u0154\12\0\34\7\6\0\2\7\1\0" + - "\1\7\12\0\6\7\1\u012e\25\7\6\0\2\7\1\0" + - "\1\7\12\0\11\7\1\u0155\22\7\6\0\2\7\1\0" + - "\1\7\12\0\25\7\1\143\2\7\1\143\3\7\6\0" + - "\2\7\1\0\1\7\12\0\27\7\1\u0156\4\7\6\0" + - "\2\7\1\0\1\7\12\0\1\u0157\33\7\6\0\2\7" + - "\1\0\1\7\12\0\6\7\1\213\25\7\6\0\2\7" + - "\1\0\1\7\12\0\1\u0158\33\7\6\0\2\7\1\0" + - "\1\7\12\0\5\7\1\u012c\26\7\6\0\2\7\1\0" + - "\1\7\12\0\1\213\33\7\6\0\2\7\1\0\1\7" + - "\12\0\1\u0100\33\7\6\0\2\7\1\0\1\7\12\0" + - "\10\7\1\223\23\7\6\0\2\7\1\0\1\7\12\0" + - "\27\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0" + - "\2\7\1\u012e\1\7\1\u0159\5\7\1\u0152\21\7\6\0" + - "\2\7\1\0\1\7\12\0\1\u015a\33\7\6\0\2\7" + - "\1\0\1\7\12\0\4\7\1\u015b\27\7\6\0\2\7" + - "\1\0\1\7\12\0\5\7\1\u0100\26\7\6\0\2\7" + - "\1\0\1\7\12\0\15\7\1\370\16\7\6\0\2\7" + - "\1\0\1\7\12\0\14\7\1\u015c\17\7\6\0\2\7" + - "\1\0\1\7\12\0\10\7\1\u0100\23\7\6\0\2\7" + - "\1\0\1\7\12\0\21\7\1\213\12\7\6\0\2\7" + - "\1\0\1\7\12\0\15\7\1\u015d\16\7\6\0\2\7" + - "\1\0\1\7\12\0\1\u015e\33\7\6\0\2\7\1\0" + - "\1\7\12\0\10\7\1\u015f\23\7\6\0\2\7\1\0" + - "\1\7\12\0\4\7\1\u0160\27\7\6\0\2\7\1\0" + - "\1\7\12\0\1\7\1\u0161\32\7\6\0\2\7\1\0" + - "\1\7\12\0\15\7\1\u0162\16\7\6\0\2\7\1\0" + - "\1\7\12\0\22\7\1\213\11\7\4\0"; - - private static int[] zzUnpackTrans() { - int[] result = new int[15936]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\4\0\2\11\4\1\1\11\3\1\1\11\31\1\2\11" + - "\2\1\1\11\2\1\1\11\2\1\1\11\1\1\1\0" + - "\1\1\1\11\113\1\3\11\1\1\1\0\333\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[354]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public SQLTokenMaker() { - super(); + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int STRING = 1; + public static final int YYINITIAL = 0; + public static final int MLC = 3; + public static final int CHAR = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\4\1\1\25\0\1\4\1\0\1\54\4\0\1\55\2\15"+ + "\1\13\1\11\1\0\1\12\1\17\1\14\1\3\1\50\1\50\1\3"+ + "\1\45\3\3\1\46\1\3\1\16\1\0\1\10\1\7\1\6\2\0"+ + "\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41\1\34\1\51"+ + "\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25\1\30\1\24"+ + "\1\32\1\36\1\40\1\43\1\27\1\2\1\56\1\0\1\57\1\0"+ + "\1\5\1\0\1\21\1\37\1\31\1\22\1\20\1\44\1\47\1\41"+ + "\1\34\1\51\1\52\1\23\1\35\1\26\1\33\1\42\1\53\1\25"+ + "\1\30\1\24\1\32\1\36\1\40\1\43\1\27\1\2\uff85\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\4\0\1\1\1\2\1\1\1\3\1\4\5\5\1\6"+ + "\1\1\1\7\27\1\1\10\1\11\1\12\1\13\1\14"+ + "\1\15\1\13\1\16\1\17\1\13\1\20\1\13\1\0"+ + "\1\21\1\22\4\1\1\23\45\1\2\23\4\1\1\23"+ + "\7\1\1\23\22\1\1\24\1\13\1\25\1\7\1\0"+ + "\3\1\1\26\51\1\1\23\4\1\1\23\2\1\1\23"+ + "\22\1\1\23\4\1\1\23\4\1\1\23\17\1\1\23"+ + "\35\1\1\23\5\1\1\23\10\1\1\23\5\1\1\23"+ + "\11\1\1\23\42\1\1\23\4\1\1\23\16\1\1\26"+ + "\4\1"; + + private static int [] zzUnpackAction() { + int [] result = new int[354]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\60\0\140\0\220\0\300\0\300\0\360\0\u0120"+ + "\0\u0150\0\u0180\0\300\0\u01b0\0\u01e0\0\u0210\0\300\0\u0240"+ + "\0\u0270\0\u02a0\0\u02d0\0\u0300\0\u0330\0\u0360\0\u0390\0\u03c0"+ + "\0\u03f0\0\u0420\0\u0450\0\u0480\0\u04b0\0\u04e0\0\u0510\0\u0540"+ + "\0\u0570\0\u05a0\0\u05d0\0\u0600\0\u0630\0\u0660\0\u0690\0\u06c0"+ + "\0\300\0\300\0\u06f0\0\u0720\0\300\0\u0750\0\u0780\0\300"+ + "\0\u07b0\0\u07e0\0\300\0\u0810\0\u0840\0\u0870\0\300\0\u08a0"+ + "\0\u08d0\0\u0900\0\u0930\0\u0960\0\u0990\0\u09c0\0\u09f0\0\u0a20"+ + "\0\u0a50\0\u0a80\0\u0ab0\0\u0ae0\0\u0b10\0\u0b40\0\u0b70\0\u0ba0"+ + "\0\u0bd0\0\u0c00\0\u0c30\0\u0c60\0\u0c90\0\u0cc0\0\u0cf0\0\u0d20"+ + "\0\u0d50\0\u0d80\0\u0db0\0\u0de0\0\u0e10\0\u0e40\0\u0e70\0\u0ea0"+ + "\0\u0ed0\0\u0f00\0\u0f30\0\u0f60\0\u0f90\0\u0fc0\0\u0ff0\0\u1020"+ + "\0\u1050\0\u1080\0\360\0\u10b0\0\u10e0\0\u1110\0\u1140\0\u1170"+ + "\0\u11a0\0\u11d0\0\u1200\0\u1230\0\u1260\0\u1290\0\u12c0\0\u12f0"+ + "\0\u1320\0\u1350\0\u1380\0\u13b0\0\u13e0\0\u1410\0\u1440\0\u1470"+ + "\0\u14a0\0\u14d0\0\u1500\0\u1530\0\u1560\0\u1590\0\u15c0\0\u15f0"+ + "\0\u1620\0\u1650\0\300\0\300\0\300\0\u1680\0\u1680\0\u16b0"+ + "\0\u16e0\0\u1710\0\360\0\u1740\0\u0960\0\u1770\0\u17a0\0\u17d0"+ + "\0\u1800\0\u1830\0\u1860\0\u1890\0\u18c0\0\u18f0\0\u1920\0\u1950"+ + "\0\u1980\0\u19b0\0\u19e0\0\u1a10\0\u1a40\0\u1a70\0\u1aa0\0\u1ad0"+ + "\0\u1b00\0\u1b30\0\u1b60\0\u1b90\0\u1bc0\0\u1bf0\0\u1c20\0\u1c50"+ + "\0\u1c80\0\u1cb0\0\u1ce0\0\u1d10\0\u1d40\0\u1d70\0\u1da0\0\u1dd0"+ + "\0\u1e00\0\u1e30\0\u1e60\0\u1e90\0\u1ec0\0\u1ef0\0\u1f20\0\u1f50"+ + "\0\u1f80\0\u1fb0\0\u1fe0\0\u2010\0\u2040\0\u2070\0\u20a0\0\u20d0"+ + "\0\u2100\0\u2130\0\u2160\0\u2190\0\u21c0\0\u21f0\0\u2220\0\u2250"+ + "\0\u2280\0\u22b0\0\u22e0\0\u2310\0\u2340\0\u2370\0\u12f0\0\u23a0"+ + "\0\u23d0\0\u2400\0\u2430\0\u2460\0\u2490\0\u24c0\0\u24f0\0\u2520"+ + "\0\u2550\0\u2580\0\u25b0\0\u25e0\0\u2610\0\u2640\0\u2670\0\u26a0"+ + "\0\u26d0\0\u2700\0\u2730\0\u2760\0\u2790\0\u27c0\0\u27f0\0\u2820"+ + "\0\u2850\0\u2880\0\u28b0\0\u28e0\0\u2910\0\u2940\0\u2970\0\u29a0"+ + "\0\u29d0\0\u2a00\0\u2a30\0\u2a60\0\u2a90\0\u2ac0\0\u2af0\0\u2b20"+ + "\0\u2b50\0\u2b80\0\u2bb0\0\u2be0\0\u2c10\0\u2c40\0\u2c70\0\u2ca0"+ + "\0\u2cd0\0\u2d00\0\u2d30\0\u2d60\0\u2d90\0\u2dc0\0\u2df0\0\u15f0"+ + "\0\u2e20\0\u2e50\0\u2e80\0\u2eb0\0\u2ee0\0\u0c30\0\u2f10\0\u2f40"+ + "\0\u2f70\0\u2fa0\0\u2fd0\0\u3000\0\u3030\0\u3060\0\u0ff0\0\u3090"+ + "\0\u30c0\0\u2040\0\u30f0\0\u3120\0\u2ca0\0\u3150\0\u3180\0\u31b0"+ + "\0\u31e0\0\u3210\0\u3240\0\u3270\0\u32a0\0\u32d0\0\u3300\0\u3330"+ + "\0\u3360\0\u3390\0\u33c0\0\u33f0\0\u3420\0\u3450\0\u3480\0\u34b0"+ + "\0\u34e0\0\u3510\0\u3540\0\u3570\0\u35a0\0\u35d0\0\u3600\0\u3630"+ + "\0\u3660\0\u3690\0\u36c0\0\u36f0\0\u3720\0\u3750\0\u3780\0\u37b0"+ + "\0\u37e0\0\u3810\0\u3840\0\u3870\0\u38a0\0\u38d0\0\u3900\0\u3930"+ + "\0\u3960\0\u3990\0\u39c0\0\u39f0\0\u3a20\0\u3a50\0\u3a80\0\u3ab0"+ + "\0\u3ae0\0\u3b10\0\u3b40\0\u3b70\0\u3ba0\0\u3bd0\0\u3c00\0\u3c30"+ + "\0\u3c60\0\u3c90\0\u3cc0\0\u3cf0\0\u3d20\0\u3d50\0\u3d80\0\u3db0"+ + "\0\u3de0\0\u3e10"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[354]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "--", null }; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\1\6\1\7\1\10\1\11\1\5\1\12\1\13"+ + "\1\14\1\13\1\15\1\13\1\16\1\17\1\20\1\21"+ + "\1\22\1\23\1\24\1\25\1\26\1\27\1\30\1\31"+ + "\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41"+ + "\1\42\1\43\1\44\1\7\1\45\2\10\1\46\1\10"+ + "\1\47\1\50\1\7\1\51\1\52\1\53\1\5\1\54"+ + "\1\55\52\54\1\56\3\54\1\57\1\60\53\57\1\61"+ + "\2\57\1\62\1\63\11\62\1\64\44\62\62\0\2\7"+ + "\1\0\1\7\12\0\34\7\7\0\1\10\13\0\1\21"+ + "\1\65\24\0\2\10\1\0\1\10\13\0\1\11\62\0"+ + "\1\13\56\0\2\13\62\0\1\66\60\0\1\67\46\0"+ + "\1\7\15\0\25\7\2\0\1\7\1\0\3\7\7\0"+ + "\1\21\14\0\1\65\24\0\2\21\1\0\1\21\11\0"+ + "\2\7\1\0\1\7\12\0\23\7\1\70\10\7\6\0"+ + "\2\7\1\0\1\7\12\0\2\7\1\71\1\72\2\7"+ + "\1\73\1\7\1\74\1\7\1\75\3\7\1\76\15\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\77\1\100\3\7"+ + "\1\101\5\7\1\102\1\103\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\104\12\7\1\105\1\106\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\107\1\110\3\7\1\111"+ + "\1\7\1\112\3\7\1\113\1\114\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\115\13\7\1\116\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\12\7\1\117\1\120\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\121\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\122\3\7\1\123\2\7"+ + "\1\124\2\7\1\125\1\126\1\127\1\130\3\7\1\131"+ + "\12\7\6\0\2\7\1\0\1\7\12\0\5\7\1\132"+ + "\4\7\1\133\1\134\5\7\1\135\12\7\6\0\2\7"+ + "\1\0\1\7\12\0\6\7\1\136\1\7\1\137\11\7"+ + "\1\140\11\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\141\1\7\1\142\1\143\2\7\1\144\1\145\5\7"+ + "\1\146\1\7\1\147\11\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\150\1\7\1\143\4\7\1\113\11\7"+ + "\1\151\4\7\6\0\2\7\1\0\1\7\12\0\1\152"+ + "\1\153\11\7\1\154\1\155\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\156\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\157\6\7\1\160\3\7\1\161\1\162"+ + "\17\7\6\0\2\7\1\0\1\7\12\0\14\7\1\163"+ + "\4\7\1\164\12\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\165\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\166\1\167\3\7\1\170\5\7\1\171\1\172\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\3\7\1\173\1\7"+ + "\1\174\5\7\1\175\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\176\4\7\1\177\4\7\1\200\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\13\7\1\201\20\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\202\33\7\4\0\57\53"+ + "\1\203\1\54\1\0\52\54\1\0\3\54\54\0\1\204"+ + "\3\0\1\57\1\0\53\57\1\0\2\57\55\0\1\204"+ + "\2\0\1\62\1\0\11\62\1\0\44\62\14\0\1\205"+ + "\46\0\1\206\5\0\2\207\32\0\2\206\1\0\1\206"+ + "\7\0\1\66\1\0\56\66\2\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\210\7\7\1\211\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\2\7\1\143\31\7\6\0\2\7"+ + "\1\0\1\7\12\0\3\7\1\143\1\137\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\2\7\1\143\4\7\1\143"+ + "\24\7\6\0\2\7\1\0\1\7\12\0\11\7\1\143"+ + "\22\7\6\0\2\7\1\0\1\7\12\0\4\7\1\212"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\143"+ + "\25\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\214\4\7\1\215\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\216\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\113\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\12\7\1\217\21\7\6\0\2\7\1\0"+ + "\1\7\12\0\10\7\1\220\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\16\7\1\221\5\7\1\120\7\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\222\11\7\1\223"+ + "\6\7\1\224\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\32\7\1\225\1\7\6\0\2\7\1\0\1\7\12\0"+ + "\23\7\1\120\10\7\6\0\2\7\1\0\1\7\12\0"+ + "\17\7\1\226\14\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\227\12\7\1\230\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\225\11\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\143\11\7\6\0\2\7\1\0"+ + "\1\7\12\0\15\7\1\231\16\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\232\22\7\1\233\7\7\6\0"+ + "\2\7\1\0\1\7\12\0\27\7\1\234\4\7\6\0"+ + "\2\7\1\0\1\7\12\0\3\7\1\232\11\7\1\235"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\143"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\236"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\3\7\1\237"+ + "\1\143\3\7\1\240\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\2\7\1\241\2\7\1\242\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\243\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\143\1\7\1\244\14\7"+ + "\6\0\2\7\1\0\1\7\12\0\15\7\1\225\16\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\245\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\246\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\247\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\250\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\251\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\3\7\1\252\2\7\1\253"+ + "\3\7\1\254\21\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\255\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\256\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\257\33\7\6\0\2\7\1\0\1\7\12\0\2\7"+ + "\1\250\17\7\1\223\11\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\260\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\137\31\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\261\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\137\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\262\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\4\7\1\263\27\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\264\1\7\1\265\1\7\1\137\1\7\1\266"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\6\7\1\267"+ + "\25\7\6\0\2\7\1\0\1\7\12\0\15\7\1\270"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\23\7\1\143"+ + "\10\7\6\0\2\7\1\0\1\7\12\0\2\7\1\143"+ + "\3\7\1\50\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\143\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\271\1\7\1\272\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\273\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\225\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\274\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\275\1\7\1\276\25\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\277\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\300\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\16\7\1\242\15\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\301\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\302\2\7\1\303\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\304\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\10\7\1\305\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\16\7\1\306\15\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\307\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\310\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\5\7\1\311\26\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\312\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\313\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\71\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\155\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\7\7\1\143\24\7"+ + "\7\0\1\206\41\0\2\206\1\0\1\206\11\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\314\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\315\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\13\7\1\316\20\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\317\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\320\1\321\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\17\7\1\322\14\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\323\2\7\1\324\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\232\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\27\7\1\325\4\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\326\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\14\7\1\327\17\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\143\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\3\7\1\330\30\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\331\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\213\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\332\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\143\30\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\333\33\7\6\0\2\7\1\0\1\7\12\0\21\7"+ + "\1\120\12\7\6\0\2\7\1\0\1\7\12\0\1\334"+ + "\16\7\1\137\14\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\270\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\335\33\7\6\0\2\7\1\0\1\7\12\0\10\7"+ + "\1\336\23\7\6\0\2\7\1\0\1\7\12\0\1\337"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\14\7\1\340"+ + "\17\7\6\0\2\7\1\0\1\7\12\0\4\7\1\341"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\10\7\1\342"+ + "\23\7\6\0\2\7\1\0\1\7\12\0\27\7\1\322"+ + "\4\7\6\0\2\7\1\0\1\7\12\0\3\7\1\343"+ + "\30\7\6\0\2\7\1\0\1\7\12\0\5\7\1\120"+ + "\26\7\6\0\2\7\1\0\1\7\12\0\1\7\1\317"+ + "\32\7\6\0\2\7\1\0\1\7\12\0\5\7\1\344"+ + "\26\7\6\0\2\7\1\0\1\7\12\0\12\7\1\345"+ + "\21\7\6\0\2\7\1\0\1\7\12\0\10\7\1\346"+ + "\1\347\4\7\1\350\15\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\351\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\352\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\155\17\7\1\353\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\143\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\13\7\1\354\20\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\355\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\356\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\357\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\153\33\7\6\0\2\7\1\0\1\7\12\0\1\360"+ + "\12\7\1\143\20\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\247\33\7\6\0\2\7\1\0\1\7\12\0\13\7"+ + "\1\300\20\7\6\0\2\7\1\0\1\7\12\0\13\7"+ + "\1\143\20\7\6\0\2\7\1\0\1\7\12\0\12\7"+ + "\1\361\21\7\6\0\2\7\1\0\1\7\12\0\11\7"+ + "\1\362\5\7\1\363\2\7\1\143\11\7\6\0\2\7"+ + "\1\0\1\7\12\0\20\7\1\364\13\7\6\0\2\7"+ + "\1\0\1\7\12\0\3\7\1\365\30\7\6\0\2\7"+ + "\1\0\1\366\12\0\34\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\367\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\21\7\1\143\12\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\225\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\370\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\371\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\10\7\1\372\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\276\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\373\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\120\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\374\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\143\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\375\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\376\33\7\6\0\2\7\1\0\1\7\12\0\12\7"+ + "\1\113\21\7\6\0\2\7\1\0\1\7\12\0\1\7"+ + "\1\377\32\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0100\27\7\6\0\2\7\1\0\1\7\12\0\14\7"+ + "\1\u0101\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0102\27\7\6\0\2\7\1\0\1\7\12\0\17\7"+ + "\1\u0103\14\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\225\30\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\u0104\30\7\6\0\2\7\1\0\1\7\12\0\14\7"+ + "\1\u0105\17\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0106\12\7\1\363\14\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\213\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\u0107\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0108\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\u0109\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\u010a\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\5\7\1\u010b\26\7\6\0\2\7\1\0\1\7\12\0"+ + "\5\7\1\u010c\26\7\6\0\2\7\1\0\1\7\12\0"+ + "\11\7\1\120\22\7\6\0\2\7\1\0\1\7\12\0"+ + "\14\7\1\u010d\17\7\6\0\2\7\1\0\1\7\12\0"+ + "\16\7\1\u010e\15\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\u010f\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\u0110\33\7\6\0\2\7\1\0\1\7\12\0\4\7"+ + "\1\u0111\27\7\6\0\2\7\1\0\1\7\12\0\3\7"+ + "\1\u0112\30\7\6\0\2\7\1\0\1\7\12\0\1\u0113"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\15\7\1\155"+ + "\16\7\6\0\2\7\1\0\1\7\12\0\4\7\1\u0114"+ + "\27\7\6\0\2\7\1\0\1\7\12\0\1\7\1\u0115"+ + "\32\7\6\0\2\7\1\0\1\7\12\0\1\u0116\33\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\u0117\27\7"+ + "\6\0\2\7\1\0\1\366\12\0\1\7\1\u0118\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\12\7\1\225\21\7"+ + "\6\0\2\7\1\0\1\7\12\0\17\7\1\u0119\14\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\u011a\27\7"+ + "\6\0\2\7\1\0\1\7\12\0\5\7\1\u011b\26\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\155\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\27\7\1\u011c\4\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\u011d\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\21\7\1\u011e\12\7\6\0"+ + "\2\7\1\0\1\7\12\0\14\7\1\u011f\17\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u0120\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u0121\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\3\7\1\u0122\30\7\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\202\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\u0123\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\u0124\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\20\7\1\u0125\13\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0126\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0127\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\u0128\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0107\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\u0129\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\10\7\1\143\23\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u012a\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\126\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\u012b\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\3\7\1\u012c\30\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u012d\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\107\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\232\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\3\7\1\u012e\20\7\1\u012f\7\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\u0130\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\u0131\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\215\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\13\7\1\u0132\20\7\6\0\2\7\1\0\1\7"+ + "\12\0\27\7\1\143\4\7\6\0\2\7\1\0\1\7"+ + "\12\0\15\7\1\u0133\16\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0134\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\14\7\1\u0123\17\7\6\0\2\7\1\0\1\7"+ + "\12\0\6\7\1\u0135\25\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0136\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\4\7\1\u0137\27\7\6\0\2\7\1\0\1\7"+ + "\12\0\5\7\1\u0129\26\7\6\0\2\7\1\0\1\7"+ + "\12\0\11\7\1\145\22\7\6\0\2\7\1\0\1\7"+ + "\12\0\31\7\1\237\2\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\7\1\u0138\32\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0139\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\7\1\257\32\7\6\0\2\7\1\0\1\7\12\0"+ + "\6\7\1\276\25\7\6\0\2\7\1\0\1\7\12\0"+ + "\1\155\33\7\6\0\2\7\1\0\1\7\12\0\1\7"+ + "\1\155\32\7\6\0\2\7\1\0\1\7\12\0\1\u013a"+ + "\33\7\6\0\2\7\1\0\1\7\12\0\6\7\1\120"+ + "\25\7\6\0\2\7\1\0\1\7\12\0\1\u013b\33\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013c\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\14\7\1\u013d\17\7"+ + "\6\0\2\7\1\0\1\7\12\0\25\7\2\143\5\7"+ + "\6\0\2\7\1\0\1\7\12\0\27\7\1\155\4\7"+ + "\6\0\2\7\1\0\1\7\12\0\4\7\1\213\27\7"+ + "\6\0\2\7\1\0\1\7\12\0\11\7\1\u013e\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\10\7\1\225\23\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u013f\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\11\7\1\u0140\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0141\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\13\7\1\u0142\20\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0143\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0144\25\7"+ + "\6\0\2\7\1\0\1\7\12\0\6\7\1\u0133\25\7"+ + "\6\0\2\7\1\0\1\u0145\12\0\34\7\6\0\2\7"+ + "\1\0\1\7\12\0\14\7\1\u0146\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\4\7\1\u0147\4\7\1\202\22\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\7\1\u0112\32\7"+ + "\6\0\2\7\1\0\1\7\12\0\1\u0148\33\7\6\0"+ + "\2\7\1\0\1\7\12\0\11\7\1\u0149\22\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\u014a\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\u014b\25\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u014c\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\71\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\13\7\1\u014d\20\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\u014e\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\20\7\1\143\13\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u014f\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\4\7\1\u0150\27\7\6\0"+ + "\2\7\1\0\1\7\12\0\5\7\1\310\26\7\6\0"+ + "\2\7\1\0\1\7\12\0\15\7\1\113\16\7\6\0"+ + "\2\7\1\0\1\7\12\0\11\7\1\u0151\22\7\6\0"+ + "\2\7\1\0\1\7\12\0\12\7\1\u0152\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\6\7\1\u0153\25\7\6\0"+ + "\2\7\1\0\1\u0154\12\0\34\7\6\0\2\7\1\0"+ + "\1\7\12\0\6\7\1\u012e\25\7\6\0\2\7\1\0"+ + "\1\7\12\0\11\7\1\u0155\22\7\6\0\2\7\1\0"+ + "\1\7\12\0\25\7\1\143\2\7\1\143\3\7\6\0"+ + "\2\7\1\0\1\7\12\0\27\7\1\u0156\4\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u0157\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\6\7\1\213\25\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u0158\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\5\7\1\u012c\26\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\213\33\7\6\0\2\7\1\0\1\7"+ + "\12\0\1\u0100\33\7\6\0\2\7\1\0\1\7\12\0"+ + "\10\7\1\223\23\7\6\0\2\7\1\0\1\7\12\0"+ + "\27\7\1\213\4\7\6\0\2\7\1\0\1\7\12\0"+ + "\2\7\1\u012e\1\7\1\u0159\5\7\1\u0152\21\7\6\0"+ + "\2\7\1\0\1\7\12\0\1\u015a\33\7\6\0\2\7"+ + "\1\0\1\7\12\0\4\7\1\u015b\27\7\6\0\2\7"+ + "\1\0\1\7\12\0\5\7\1\u0100\26\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\370\16\7\6\0\2\7"+ + "\1\0\1\7\12\0\14\7\1\u015c\17\7\6\0\2\7"+ + "\1\0\1\7\12\0\10\7\1\u0100\23\7\6\0\2\7"+ + "\1\0\1\7\12\0\21\7\1\213\12\7\6\0\2\7"+ + "\1\0\1\7\12\0\15\7\1\u015d\16\7\6\0\2\7"+ + "\1\0\1\7\12\0\1\u015e\33\7\6\0\2\7\1\0"+ + "\1\7\12\0\10\7\1\u015f\23\7\6\0\2\7\1\0"+ + "\1\7\12\0\4\7\1\u0160\27\7\6\0\2\7\1\0"+ + "\1\7\12\0\1\7\1\u0161\32\7\6\0\2\7\1\0"+ + "\1\7\12\0\15\7\1\u0162\16\7\6\0\2\7\1\0"+ + "\1\7\12\0\22\7\1\213\11\7\4\0"; + + private static int [] zzUnpackTrans() { + int [] result = new int[15936]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.LITERAL_STRING_DOUBLE_QUOTE: - state = STRING; - start = text.offset; - break; - case Token.LITERAL_CHAR: - state = CHAR; - start = text.offset; - break; - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\4\0\2\11\4\1\1\11\3\1\1\11\31\1\2\11"+ + "\2\1\1\11\2\1\1\11\2\1\1\11\1\1\1\0"+ + "\1\1\1\11\113\1\3\11\1\1\1\0\333\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[354]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - */ - private boolean zzRefill() { - return zzCurrentPos >= s.offset + s.count; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public SQLTokenMaker() { + super(); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Overridden to return true so paren matching occurs for + * SQL. + * + * @return true always. + */ + @Override + public boolean getCurlyBracesDenoteCodeBlocks(int languageIndex) { + return true; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "--", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = STRING; + start = text.offset; + break; + case Token.LITERAL_CHAR: + state = CHAR; + start = text.offset; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + start = text.offset; + break; + default: + state = Token.NULL; + } + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public SQLTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public SQLTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 178) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public SQLTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public SQLTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 178) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 20: { - addToken(Token.PREPROCESSOR); - } - case 23: - break; - case 2: { - addNullToken(); - return firstToken; - } - case 24: - break; - case 21: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 25: - break; - case 18: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 26: - break; - case 4: { - addToken(Token.WHITESPACE); - } - case 27: - break; - case 14: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 28: - break; - case 9: { - start = zzMarkedPos - 1; - yybegin(CHAR); - } - case 29: - break; - case 7: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 30: - break; - case 19: { - addToken(Token.RESERVED_WORD); - } - case 31: - break; - case 6: { - addToken(Token.SEPARATOR); - } - case 32: - break; - case 15: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_CHAR); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 33: - break; - case 1: { - addToken(Token.IDENTIFIER); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 34: - break; - case 22: { - addToken(Token.FUNCTION); - } - case 35: - break; - case 12: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 36: - break; - case 17: { - addToken(Token.COMMENT_EOL); - } - case 37: - break; - case 8: { - start = zzMarkedPos - 1; - yybegin(STRING); - } - case 38: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 39: - break; - case 5: { - addToken(Token.OPERATOR); - } - case 40: - break; - case 13: { - yybegin(YYINITIAL); - addToken(start, zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 20: + { addToken(Token.PREPROCESSOR); + } + case 23: break; + case 2: + { addNullToken(); return firstToken; + } + case 24: break; + case 21: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 25: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 26: break; + case 4: + { addToken(Token.WHITESPACE); + } + case 27: break; + case 14: + { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; + } + case 28: break; + case 9: + { start = zzMarkedPos-1; yybegin(CHAR); + } + case 29: break; + case 7: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 30: break; + case 19: + { addToken(Token.RESERVED_WORD); + } + case 31: break; + case 6: + { addToken(Token.SEPARATOR); + } + case 32: break; + case 15: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR); + } + case 33: break; + case 1: + { addToken(Token.IDENTIFIER); + } + case 34: break; + case 22: + { addToken(Token.FUNCTION); + } + case 35: break; + case 12: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 36: break; + case 17: + { addToken(Token.COMMENT_EOL); + } + case 37: break; + case 8: + { start = zzMarkedPos-1; yybegin(STRING); + } + case 38: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 39: break; + case 5: + { addToken(Token.OPERATOR); + } + case 40: break; + case 13: + { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 41: break; + case 10: + { addToken(Token.ERROR_IDENTIFIER); addNullToken(); return firstToken; + } + case 42: break; + case 11: + { + } + case 43: break; + case 16: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 44: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case STRING: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 41: - break; - case 10: { - addToken(Token.ERROR_IDENTIFIER); - addNullToken(); - return firstToken; + case 355: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 42: - break; - case 11: { + case 356: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 43: - break; - case 16: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 357: break; + case CHAR: { + addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken; } - case 44: - break; + case 358: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case STRING: { - addToken(start, zzStartRead - 1, Token.LITERAL_STRING_DOUBLE_QUOTE); - return firstToken; - } - case 355: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 356: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 357: - break; - case CHAR: { - addToken(start, zzStartRead - 1, Token.LITERAL_CHAR); - return firstToken; - } - case 358: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex old mode 100644 new mode 100755 index 878e8d432..ae35822a3 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.flex @@ -2,23 +2,9 @@ * 8/19/2009 * * ScalaTokenMaker.java - Scanner for the Scala programming language. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                                  - *
                                • The generated ScalaTokenMaker.java file will contain two + *
                                • The generated ScalaTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -131,6 +117,7 @@ import org.fife.ui.rsyntaxtextarea.*; * occurs. * @param hyperlink Whether this token is a hyperlink. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset, boolean hyperlink) { super.addToken(array, start,end, tokenType, startOffset, hyperlink); @@ -139,13 +126,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -168,24 +152,27 @@ import org.fife.ui.rsyntaxtextarea.*; this.offsetShift = -text.offset + startOffset; // Start off in the proper state. - int state = Token.NULL; + int state = YYINITIAL; switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + break; case Token.COMMENT_MULTILINE: state = MLC; - start = text.offset; break; default: - state = Token.NULL; + state = YYINITIAL; } s = text; + start = text.offset; try { yyreset(zzReader); yybegin(state); return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -196,9 +183,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -213,7 +199,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws IOException { + public final void yyreset(java.io.Reader reader) { // 's' has been updated. zzBuffer = s.array; /* @@ -286,6 +272,7 @@ URLEndCharacter = ([\/\$]|{Letter}|{Digit}) URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) +%state MULTILINE_STRING_DOUBLE %state MLC %state EOL_COMMENT @@ -342,6 +329,7 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) {Whitespace} { addToken(Token.WHITESPACE); } /* String/Character literals. */ + \"\"\" { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); } {UnclosedCharLiteral} { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; } {CharLiteral} { addToken(Token.LITERAL_CHAR); } {UnclosedStringLiteral} { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } @@ -367,25 +355,29 @@ URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) } + { + [^\"\\\n]* {} + \\.? { /* Skip escaped chars, handles case: '\"""'. */ } + \"\"\" { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); } + \" {} + \n | + <> { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } +} { - [^hwf\n\*]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } [hwf] {} - - \n { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } {MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } \* {} + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - } - { [^hwf\n]+ {} {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } [hwf] {} - \n { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } + \n | <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java old mode 100644 new mode 100755 index 8700fef62..f844da0cd --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/ScalaTokenMaker.java @@ -1,1004 +1,998 @@ -/* The following code was generated by JFlex 1.4.1 on 8/21/09 3:31 PM */ +/* The following code was generated by JFlex 1.4.1 on 11/10/12 10:31 PM */ /* * 8/19/2009 * * ScalaTokenMaker.java - Scanner for the Scala programming language. - * Copyright (C) 2009 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; -import java.io.*; +import java.io.IOException; +import java.io.Reader; + import javax.swing.text.Segment; -import org.fife.ui.rsyntaxtextarea.*; +import org.fife.ui.rsyntaxtextarea.AbstractJFlexCTokenMaker; +import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rsyntaxtextarea.TokenImpl; + /** - * Scanner for the Scala programming language. - *

                                  - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                                  - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                                  - * + * Scanner for the Scala programming language.

                                  + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                                  + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                                  + * * If you wish to regenerate this file yourself, keep in mind the following: *

                                    - *
                                  • The generated ScalaTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                                  • - *
                                  • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                                  • - *
                                  • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                                  • + *
                                  • The generated ScalaTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                                  • + *
                                  • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                                  • + *
                                  • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                                  • *
                                  - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class ScalaTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int EOL_COMMENT = 2; - public static final int YYINITIAL = 0; - public static final int MLC = 1; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\31\1\24\1\0\1\31\23\0\1\31\1\33\1\25\1\33" + - "\1\1\1\33\1\33\1\22\2\4\1\30\1\16\1\33\1\16\1\21" + - "\1\27\1\12\11\3\1\42\1\33\1\0\1\33\1\0\2\33\3\10" + - "\1\17\1\14\1\17\5\1\1\6\6\1\1\52\7\1\1\4\1\23" + - "\1\4\1\0\1\5\1\26\1\44\1\45\1\11\1\20\1\15\1\40" + - "\1\61\1\34\1\41\1\56\1\60\1\7\1\53\1\50\1\47\1\36" + - "\1\2\1\46\1\37\1\35\1\55\1\57\1\43\1\13\1\51\1\54" + - "\1\32\1\0\1\32\1\33\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\3\0\2\1\1\2\1\3\2\1\1\2\3\1\1\4" + - "\1\5\1\6\2\1\1\7\15\1\1\10\1\11\5\10" + - "\1\12\3\10\1\1\1\2\1\0\2\13\3\1\1\0" + - "\3\1\1\14\1\15\1\4\1\6\1\16\1\6\1\17" + - "\1\20\26\1\1\21\10\0\1\1\1\13\1\0\4\1" + - "\1\22\1\1\1\23\11\1\1\14\12\1\10\0\21\1" + - "\2\0\1\24\2\0\1\25\4\1\1\14\6\1\4\0" + - "\3\1"; - - private static int[] zzUnpackAction() { - int[] result = new int[173]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\62\0\144\0\226\0\310\0\372\0\226\0\u012c" + - "\0\u015e\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\226\0\u028a" + - "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a" + - "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa" + - "\0\u05dc\0\226\0\u060e\0\u0640\0\u0672\0\u06a4\0\u06d6\0\226" + - "\0\u0708\0\u073a\0\u076c\0\u079e\0\226\0\u07d0\0\226\0\u0802" + - "\0\u0834\0\u0866\0\u0898\0\u08ca\0\u08fc\0\u092e\0\u0960\0\310" + - "\0\226\0\u0992\0\u09c4\0\226\0\u09f6\0\226\0\226\0\u0a28" + - "\0\u0a5a\0\u0a8c\0\u0abe\0\u0af0\0\u0b22\0\u0b54\0\u0b86\0\u0bb8" + - "\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48" + - "\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42\0\226\0\u0e74\0\u0ea6" + - "\0\u0ed8\0\u0f0a\0\u0f3c\0\u0f6e\0\u0fa0\0\u0fd2\0\u1004\0\u1036" + - "\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130\0\u08ca\0\u1162\0\226" + - "\0\u1194\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u12c0\0\u12f2" + - "\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec\0\u141e\0\u1450\0\u1482" + - "\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c\0\u15ae\0\u15e0\0\u1612" + - "\0\u1644\0\u1676\0\u16a8\0\u16da\0\u170c\0\u173e\0\u1770\0\u17a2" + - "\0\u17d4\0\u1806\0\u1838\0\u186a\0\u189c\0\u18ce\0\u1900\0\u1932" + - "\0\u1964\0\u1996\0\u19c8\0\u19fa\0\u1a2c\0\u1a5e\0\u1a90\0\u1ac2" + - "\0\u1af4\0\u1b26\0\u1b58\0\u1b8a\0\u1bbc\0\u1bee\0\u1c20\0\u1c52" + - "\0\u1c84\0\u1cb6\0\u1ce8\0\u1d1a\0\u1d4c\0\u1d7e\0\u1db0\0\u1ac2" + - "\0\u1de2\0\u1b58\0\u1e14\0\u1e46\0\u1e78"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[173]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\4\2\5\1\6\1\7\2\5\1\10\1\5\1\11" + - "\1\12\2\5\1\13\1\4\1\5\1\14\1\15\1\16" + - "\1\4\1\17\1\20\1\21\1\22\1\4\1\23\1\7" + - "\1\4\1\5\1\24\1\25\1\26\1\27\1\30\1\4" + - "\1\31\1\32\1\5\1\33\1\34\1\35\1\36\1\5" + - "\1\37\3\5\1\40\2\5\24\41\1\42\3\41\1\43" + - "\3\41\1\44\3\41\1\45\2\41\1\46\16\41\24\47" + - "\1\50\7\47\1\51\3\47\1\52\2\47\1\53\16\47" + - "\63\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\17\5\3\0\1\6\2\0\2\55\2\0" + - "\1\6\1\0\2\56\1\0\2\57\1\60\16\0\1\57" + - "\22\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\1\5\1\61\15\5\1\0\3\5\1\0" + - "\1\54\1\5\1\62\6\5\1\0\2\5\13\0\6\5" + - "\1\0\1\5\1\63\15\5\3\0\1\6\2\0\2\55" + - "\2\0\1\6\1\64\2\56\1\0\2\57\1\60\16\0" + - "\1\57\22\0\3\5\1\0\1\54\1\5\1\65\3\5" + - "\1\66\2\5\1\0\2\5\13\0\6\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\7\5\1\67\1\0\2\5" + - "\13\0\6\5\1\0\4\5\1\70\12\5\3\0\1\60" + - "\6\0\1\60\47\0\22\16\1\71\1\72\36\16\23\20" + - "\1\73\1\20\1\74\34\20\26\75\1\0\33\75\27\0" + - "\1\76\1\77\62\0\1\23\31\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\1\100\5\5\1\0\3\5" + - "\1\101\2\5\1\102\10\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\6\5\1\0\1\5\1\103" + - "\1\5\1\104\13\5\1\0\3\5\1\0\1\54\7\5" + - "\1\105\1\0\2\5\13\0\6\5\1\0\12\5\1\106" + - "\4\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\5\5\1\107\1\0\1\5\1\110\2\5\1\111" + - "\12\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\4\5\1\70\1\5\1\0\10\5\1\112\6\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\1\113\4\5\1\114\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\6\5\1\0\2\5" + - "\1\115\14\5\1\0\3\5\1\0\1\54\7\5\1\116" + - "\1\0\2\5\13\0\6\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\2\5\1\117\11\5\1\120\2\5\1\0\3\5\1\0" + - "\1\54\7\5\1\121\1\0\2\5\13\0\6\5\1\0" + - "\12\5\1\122\4\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\5\5\1\123\1\0\17\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\1\5\1\124\15\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\6\5\1\0\1\5\1\125" + - "\15\5\24\41\1\0\3\41\1\0\3\41\1\0\3\41" + - "\1\0\2\41\1\0\16\41\27\0\1\126\67\0\1\127" + - "\61\0\1\130\3\0\1\131\63\0\1\132\16\0\24\47" + - "\1\0\7\47\1\0\3\47\1\0\2\47\1\0\16\47" + - "\35\0\1\133\61\0\1\134\3\0\1\135\63\0\1\136" + - "\16\0\1\137\3\5\1\0\1\54\10\5\1\137\2\5" + - "\1\0\7\137\1\0\2\137\6\5\1\137\17\5\3\0" + - "\1\140\6\0\1\140\3\0\1\141\46\0\1\60\6\0" + - "\1\60\1\0\2\56\1\0\2\57\17\0\1\57\22\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\11\5\1\142\5\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\6\5\1\0\1\5\1\143" + - "\15\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\5\1\144\1\5\1\145\2\5\1\0\17\5" + - "\3\0\1\146\4\0\3\146\1\0\2\146\1\0\2\146" + - "\17\0\1\146\3\0\2\146\15\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\3\5\1\145\2\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\5\1\147\4\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\4\5\1\70" + - "\1\5\1\0\17\5\24\16\1\0\35\16\24\20\1\0" + - "\35\20\26\75\1\150\33\75\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\5\5\1\151\1\0\3\5" + - "\1\152\13\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\6\5\1\0\1\5\1\153\4\5\1\70" + - "\3\5\1\145\4\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\2\5\1\145\3\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\3\5\1\154\4\5\1\0" + - "\2\5\13\0\6\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\5\5\1\155\1\0" + - "\4\5\1\156\12\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\6\5\1\0\1\5\1\157\15\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\2\5\1\160\3\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\6\5\1\0\5\5" + - "\1\161\11\5\1\0\3\5\1\0\1\54\1\5\1\65" + - "\6\5\1\0\2\5\13\0\6\5\1\0\17\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\3\5\1\162\13\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\2\5\1\163\3\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\5\5\1\164\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\1\5\1\165\4\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\3\5\1\166\2\5\1\0\17\5\1\0" + - "\1\5\1\167\1\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\5\1\170\4\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\13\5\1\171\3\5\1\0\3\5\1\0\1\54\7\5" + - "\1\172\1\0\2\5\13\0\6\5\1\0\17\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\1\70\16\5\1\0\3\5\1\0\1\54\1\5" + - "\1\173\6\5\1\0\2\5\13\0\6\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\7\5\1\174\1\0\2\5" + - "\13\0\6\5\1\0\17\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\1\5\1\144\4\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\1\5\1\70\6\5" + - "\1\0\2\5\13\0\6\5\1\0\3\5\1\70\13\5" + - "\35\0\1\175\62\0\1\176\32\0\1\177\115\0\1\200" + - "\53\0\1\201\62\0\1\202\32\0\1\203\115\0\1\204" + - "\16\0\1\137\15\0\1\137\3\0\7\137\1\0\2\137" + - "\6\0\1\137\22\0\1\140\6\0\1\140\4\0\2\57" + - "\17\0\1\57\24\0\1\140\6\0\1\140\50\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\6\5\1\70\10\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\3\5\1\151\2\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\3\5\1\165\4\5\1\0" + - "\2\5\13\0\6\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\7\5\1\70\1\0\2\5\13\0\6\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\7\5\1\205\1\0" + - "\2\5\13\0\6\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\3\5\1\70\2\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\6\5\1\0\4\5\1\121\12\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\5\5" + - "\1\206\1\0\17\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\6\5\1\0\15\5\1\207\1\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\14\5\1\210\2\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\1\5\1\211\4\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\1\5\1\212" + - "\6\5\1\0\2\5\13\0\6\5\1\0\17\5\1\0" + - "\3\5\1\0\1\54\7\5\1\213\1\0\2\5\13\0" + - "\6\5\1\0\17\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\6\5\1\0\1\5\1\214\15\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\7\5\1\215\7\5\1\0\3\5\1\0" + - "\1\54\1\5\1\216\6\5\1\0\2\5\13\0\6\5" + - "\1\0\4\5\1\217\12\5\1\0\3\5\1\0\1\54" + - "\1\5\1\145\6\5\1\0\2\5\13\0\6\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\70\5\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\1\5\1\220\4\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\6\5\1\0\12\5\1\221\4\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\12\5\1\222\4\5\1\0\3\5\1\0\1\54" + - "\7\5\1\223\1\0\2\5\13\0\6\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\3\5\1\224\13\5\1\0\3\5\1\0" + - "\1\54\1\5\1\70\6\5\1\0\2\5\13\0\6\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\1\5\1\225" + - "\6\5\1\0\2\5\13\0\6\5\1\0\17\5\36\0" + - "\1\226\65\0\1\227\34\0\1\176\65\0\1\230\76\0" + - "\1\231\65\0\1\232\34\0\1\202\65\0\1\233\41\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\5\5\1\234\11\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\1\5\1\70\4\5\1\0" + - "\17\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\6\5\1\0\1\5\1\235\15\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\1\5\1\236\15\5\1\0\3\5\1\0\1\54\7\5" + - "\1\237\1\0\2\5\13\0\6\5\1\0\17\5\1\0" + - "\3\5\1\0\1\54\7\5\1\225\1\0\2\5\13\0" + - "\6\5\1\0\17\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\6\5\1\0\3\5\1\70\13\5" + - "\1\0\3\5\1\0\1\54\1\5\1\240\6\5\1\0" + - "\2\5\13\0\6\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\6\5\1\0\4\5" + - "\1\241\12\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\5\5\1\242\1\0\17\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\3\5\1\206\13\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\2\5\13\0\6\5\1\0\3\5\1\243\13\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\5\5\1\244\1\0\17\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\6\5\1\0\3\5\1\245" + - "\13\5\1\0\3\5\1\0\1\54\3\5\1\206\4\5" + - "\1\0\2\5\13\0\6\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\10\5\1\0\2\5\13\0\6\5\1\0" + - "\3\5\1\246\13\5\1\0\3\5\1\0\1\54\10\5" + - "\1\0\1\5\1\70\13\0\6\5\1\0\17\5\37\0" + - "\1\176\2\0\1\227\46\0\1\247\33\0\3\230\1\250" + - "\11\230\1\250\2\230\2\250\4\0\1\230\1\250\2\0" + - "\1\250\6\230\1\250\17\230\37\0\1\202\2\0\1\232" + - "\46\0\1\251\33\0\3\233\1\252\11\233\1\252\2\233" + - "\2\252\4\0\1\233\1\252\2\0\1\252\6\233\1\252" + - "\17\233\1\0\3\5\1\0\1\54\10\5\1\0\1\5" + - "\1\151\13\0\6\5\1\0\17\5\1\0\3\5\1\0" + - "\1\54\10\5\1\0\2\5\13\0\6\5\1\0\16\5" + - "\1\145\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\5\1\145\4\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\3\5\1\253\4\5\1\0\2\5\13\0" + - "\6\5\1\0\17\5\1\0\3\5\1\0\1\54\1\5" + - "\1\142\6\5\1\0\2\5\13\0\6\5\1\0\17\5" + - "\1\0\3\5\1\0\1\54\10\5\1\0\2\5\13\0" + - "\6\5\1\0\10\5\1\145\6\5\1\0\3\5\1\0" + - "\1\54\3\5\1\153\4\5\1\0\2\5\13\0\6\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\2\5\13\0\6\5\1\0\1\5\1\223\15\5\1\0" + - "\3\5\1\0\1\54\10\5\1\0\2\5\13\0\6\5" + - "\1\0\3\5\1\254\13\5\1\0\3\5\1\0\1\54" + - "\10\5\1\0\2\5\13\0\6\5\1\0\5\5\1\70" + - "\11\5\1\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\5\5\1\255\1\0\17\5\27\0\1\230\61\0" + - "\1\233\33\0\3\5\1\0\1\54\10\5\1\0\2\5" + - "\13\0\1\5\1\212\4\5\1\0\17\5\1\0\3\5" + - "\1\0\1\54\7\5\1\151\1\0\2\5\13\0\6\5" + - "\1\0\17\5\1\0\3\5\1\0\1\54\10\5\1\0" + - "\1\5\1\145\13\0\6\5\1\0\17\5"; - - private static int[] zzUnpackTrans() { - int[] result = new int[7850]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\3\0\1\11\2\1\1\11\7\1\1\11\22\1\1\11" + - "\5\1\1\11\4\1\1\11\1\0\1\11\4\1\1\0" + - "\4\1\1\11\2\1\1\11\1\1\2\11\26\1\1\11" + - "\10\0\2\1\1\0\6\1\1\11\24\1\10\0\21\1" + - "\2\0\1\1\2\0\14\1\4\0\3\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[173]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public ScalaTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addToken(int, int, int) - */ - private void addHyperlinkToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, true); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - * @see #addHyperlinkToken(int, int, int) - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so, false); + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int EOL_COMMENT = 3; + public static final int MULTILINE_STRING_DOUBLE = 1; + public static final int YYINITIAL = 0; + public static final int MLC = 2; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\31\1\24\1\0\1\31\23\0\1\31\1\33\1\25\1\33"+ + "\1\1\1\33\1\33\1\22\2\4\1\30\1\16\1\33\1\16\1\21"+ + "\1\27\1\12\11\3\1\42\1\33\1\0\1\33\1\0\2\33\3\10"+ + "\1\17\1\14\1\17\5\1\1\6\6\1\1\52\7\1\1\4\1\23"+ + "\1\4\1\0\1\5\1\26\1\44\1\45\1\11\1\20\1\15\1\40"+ + "\1\61\1\34\1\41\1\56\1\60\1\7\1\53\1\50\1\47\1\36"+ + "\1\2\1\46\1\37\1\35\1\55\1\57\1\43\1\13\1\51\1\54"+ + "\1\32\1\0\1\32\1\33\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\1\1\2\0\2\2\1\3\1\4\2\2\1\3"+ + "\3\2\1\5\1\6\1\7\2\2\1\10\15\2\1\1"+ + "\1\11\1\12\2\1\1\13\5\1\1\14\3\1\1\2"+ + "\1\3\1\0\2\15\3\2\1\0\3\2\1\16\1\17"+ + "\1\5\2\7\1\20\1\7\1\21\1\22\26\2\1\11"+ + "\1\0\1\23\10\0\1\2\1\15\1\0\4\2\1\24"+ + "\1\2\1\20\1\25\1\26\11\2\1\16\12\2\1\27"+ + "\10\0\21\2\2\0\1\30\2\0\1\31\4\2\1\16"+ + "\6\2\4\0\3\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[184]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - * @param hyperlink - * Whether this token is a hyperlink. - */ - public void addToken(char[] array, int start, int end, int tokenType, - int startOffset, boolean hyperlink) { - super.addToken(array, start, end, tokenType, startOffset, hyperlink); - zzStartRead = zzMarkedPos; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\62\0\144\0\226\0\310\0\372\0\u012c\0\310"+ + "\0\u015e\0\u0190\0\u01c2\0\u01f4\0\u0226\0\u0258\0\u028a\0\310"+ + "\0\u02bc\0\u02ee\0\u0320\0\u0352\0\u0384\0\u03b6\0\u03e8\0\u041a"+ + "\0\u044c\0\u047e\0\u04b0\0\u04e2\0\u0514\0\u0546\0\u0578\0\u05aa"+ + "\0\u05dc\0\u060e\0\u0640\0\310\0\u0672\0\u06a4\0\310\0\u06d6"+ + "\0\u0708\0\u073a\0\u076c\0\u079e\0\310\0\u07d0\0\u0802\0\u0834"+ + "\0\u0866\0\310\0\u0898\0\310\0\u08ca\0\u08fc\0\u092e\0\u0960"+ + "\0\u0992\0\u09c4\0\u09f6\0\u0a28\0\372\0\310\0\u0a5a\0\u0a8c"+ + "\0\u0abe\0\u0af0\0\u0b22\0\310\0\310\0\u0b54\0\u0b86\0\u0bb8"+ + "\0\u0bea\0\u0c1c\0\u0c4e\0\u0c80\0\u0cb2\0\u0ce4\0\u0d16\0\u0d48"+ + "\0\u0d7a\0\u0dac\0\u0dde\0\u0e10\0\u0e42\0\u0e74\0\u0ea6\0\u0ed8"+ + "\0\u0f0a\0\u0f3c\0\u0f6e\0\310\0\u0fa0\0\310\0\u0fd2\0\u1004"+ + "\0\u1036\0\u1068\0\u109a\0\u10cc\0\u10fe\0\u1130\0\u1162\0\u1194"+ + "\0\u11c6\0\u11f8\0\u122a\0\u125c\0\u128e\0\u0992\0\u12c0\0\310"+ + "\0\310\0\310\0\u12f2\0\u1324\0\u1356\0\u1388\0\u13ba\0\u13ec"+ + "\0\u141e\0\u1450\0\u1482\0\u14b4\0\u14e6\0\u1518\0\u154a\0\u157c"+ + "\0\u15ae\0\u15e0\0\u1612\0\u1644\0\u1676\0\u16a8\0\310\0\u16da"+ + "\0\u170c\0\u173e\0\u1770\0\u17a2\0\u17d4\0\u1806\0\u1838\0\u186a"+ + "\0\u189c\0\u18ce\0\u1900\0\u1932\0\u1964\0\u1996\0\u19c8\0\u19fa"+ + "\0\u1a2c\0\u1a5e\0\u1a90\0\u1ac2\0\u1af4\0\u1b26\0\u1b58\0\u1b8a"+ + "\0\u1bbc\0\u1bee\0\u1c20\0\u1c52\0\u1c84\0\u1cb6\0\u1ce8\0\u1d1a"+ + "\0\u1d4c\0\u1d7e\0\u1db0\0\u1de2\0\u1e14\0\u1e46\0\u1e78\0\u1eaa"+ + "\0\u1edc\0\u1f0e\0\u1c20\0\u1f40\0\u1cb6\0\u1f72\0\u1fa4\0\u1fd6"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[184]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\5\2\6\1\7\1\10\2\6\1\11\1\6\1\12"+ + "\1\13\2\6\1\14\1\5\1\6\1\15\1\16\1\17"+ + "\1\5\1\20\1\21\1\22\1\23\1\5\1\24\1\10"+ + "\1\5\1\6\1\25\1\26\1\27\1\30\1\31\1\5"+ + "\1\32\1\33\1\6\1\34\1\35\1\36\1\37\1\6"+ + "\1\40\3\6\1\41\2\6\23\42\1\43\1\44\1\45"+ + "\34\42\24\46\1\47\3\46\1\50\3\46\1\51\3\46"+ + "\1\52\2\46\1\53\16\46\24\54\1\55\7\54\1\56"+ + "\3\54\1\57\2\54\1\60\16\54\63\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\3\0\1\7\2\0\2\62\2\0\1\7\1\0\2\63"+ + "\1\0\2\64\1\65\16\0\1\64\22\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ + "\1\66\15\6\1\0\3\6\1\0\1\61\1\6\1\67"+ + "\6\6\1\0\2\6\13\0\6\6\1\0\1\6\1\70"+ + "\15\6\3\0\1\7\2\0\2\62\2\0\1\7\1\71"+ + "\2\63\1\0\2\64\1\65\16\0\1\64\22\0\3\6"+ + "\1\0\1\61\1\6\1\72\3\6\1\73\2\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\74\1\0\2\6\13\0\6\6\1\0"+ + "\4\6\1\75\12\6\3\0\1\65\6\0\1\65\47\0"+ + "\22\17\1\76\1\77\36\17\23\100\1\101\1\100\1\102"+ + "\34\100\26\103\1\0\33\103\27\0\1\104\1\105\62\0"+ + "\1\24\31\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\1\106\5\6\1\0\3\6\1\107\2\6\1\110"+ + "\10\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\111\1\6\1\112\13\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\113\1\0\2\6"+ + "\13\0\6\6\1\0\12\6\1\114\4\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\115"+ + "\1\0\1\6\1\116\2\6\1\117\12\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\4\6\1\75"+ + "\1\6\1\0\10\6\1\120\6\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\1\121\4\6\1\122"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\2\6\1\123\14\6\1\0"+ + "\3\6\1\0\1\61\7\6\1\124\1\0\2\6\13\0"+ + "\6\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\2\6\1\125\11\6"+ + "\1\126\2\6\1\0\3\6\1\0\1\61\7\6\1\127"+ + "\1\0\2\6\13\0\6\6\1\0\12\6\1\130\4\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\5\6\1\131\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\1\6\1\132"+ + "\15\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\133\15\6\23\42\3\0"+ + "\34\42\24\134\1\0\35\134\25\0\1\135\34\0\24\46"+ + "\1\0\3\46\1\0\3\46\1\0\3\46\1\0\2\46"+ + "\1\0\16\46\27\0\1\136\67\0\1\137\61\0\1\140"+ + "\3\0\1\141\63\0\1\142\16\0\24\54\1\0\7\54"+ + "\1\0\3\54\1\0\2\54\1\0\16\54\35\0\1\143"+ + "\61\0\1\144\3\0\1\145\63\0\1\146\16\0\1\147"+ + "\3\6\1\0\1\61\10\6\1\147\2\6\1\0\7\147"+ + "\1\0\2\147\6\6\1\147\17\6\3\0\1\150\6\0"+ + "\1\150\3\0\1\151\46\0\1\65\6\0\1\65\1\0"+ + "\2\63\1\0\2\64\17\0\1\64\22\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\11\6"+ + "\1\152\5\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\1\6\1\153\15\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ + "\1\154\1\6\1\155\2\6\1\0\17\6\3\0\1\156"+ + "\4\0\3\156\1\0\2\156\1\0\2\156\17\0\1\156"+ + "\3\0\2\156\15\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\3\6\1\155\2\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\1\6"+ + "\1\157\4\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\4\6\1\75\1\6\1\0"+ + "\17\6\24\17\1\0\35\17\23\100\1\101\1\100\1\160"+ + "\60\100\1\0\35\100\25\0\1\161\34\0\26\103\1\162"+ + "\33\103\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\5\6\1\163\1\0\3\6\1\164\13\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\1\6\1\165\4\6\1\75\3\6\1\155\4\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\2\6\1\155\3\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\3\6\1\166\4\6\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\5\6\1\167\1\0\4\6\1\170\12\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\6\6\1\0\1\6\1\171\15\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\2\6\1\172\3\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\5\6\1\173\11\6\1\0"+ + "\3\6\1\0\1\61\1\6\1\72\6\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\3\6\1\174"+ + "\13\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\2\6\1\175\3\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\176"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\1\6\1\177\4\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\3\6"+ + "\1\200\2\6\1\0\17\6\1\0\1\6\1\201\1\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\1\6\1\202"+ + "\4\6\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\13\6\1\203\3\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\204\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\1\75\16\6"+ + "\1\0\3\6\1\0\1\61\1\6\1\205\6\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\206\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\1\6\1\154\4\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\1\6\1\75\6\6\1\0\2\6\13\0"+ + "\6\6\1\0\3\6\1\75\13\6\25\0\1\207\71\0"+ + "\1\210\62\0\1\211\32\0\1\212\115\0\1\213\53\0"+ + "\1\214\62\0\1\215\32\0\1\216\115\0\1\217\16\0"+ + "\1\147\15\0\1\147\3\0\7\147\1\0\2\147\6\0"+ + "\1\147\22\0\1\150\6\0\1\150\4\0\2\64\17\0"+ + "\1\64\24\0\1\150\6\0\1\150\50\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\6\6"+ + "\1\75\10\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\3\6\1\163\2\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\3\6\1\177\4\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\7\6\1\75\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\7\6\1\220\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\3\6\1\75\2\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\4\6\1\127\12\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\5\6\1\221"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\15\6\1\222\1\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\14\6\1\223\2\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\1\6\1\224\4\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\1\6\1\225\6\6"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\7\6\1\226\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\1\6\1\227\15\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\7\6\1\230\7\6\1\0\3\6\1\0\1\61"+ + "\1\6\1\231\6\6\1\0\2\6\13\0\6\6\1\0"+ + "\4\6\1\232\12\6\1\0\3\6\1\0\1\61\1\6"+ + "\1\155\6\6\1\0\2\6\13\0\6\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\75\5\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\1\6\1\233\4\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\12\6\1\234\4\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\12\6\1\235\4\6\1\0\3\6\1\0\1\61\7\6"+ + "\1\236\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\3\6\1\237\13\6\1\0\3\6\1\0\1\61"+ + "\1\6\1\75\6\6\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\1\6\1\240\6\6"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\36\0\1\241"+ + "\65\0\1\242\34\0\1\211\65\0\1\243\76\0\1\244"+ + "\65\0\1\245\34\0\1\215\65\0\1\246\41\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\5\6\1\247\11\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\1\6\1\75\4\6\1\0\17\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\6\6\1\0\1\6\1\250\15\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\1\6"+ + "\1\251\15\6\1\0\3\6\1\0\1\61\7\6\1\252"+ + "\1\0\2\6\13\0\6\6\1\0\17\6\1\0\3\6"+ + "\1\0\1\61\7\6\1\240\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\3\6\1\75\13\6\1\0"+ + "\3\6\1\0\1\61\1\6\1\253\6\6\1\0\2\6"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\4\6\1\254"+ + "\12\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\5\6\1\255\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ + "\1\221\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\2\6\13\0\6\6\1\0\3\6\1\256\13\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\5\6"+ + "\1\257\1\0\17\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\3\6\1\260\13\6"+ + "\1\0\3\6\1\0\1\61\3\6\1\221\4\6\1\0"+ + "\2\6\13\0\6\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\10\6\1\0\2\6\13\0\6\6\1\0\3\6"+ + "\1\261\13\6\1\0\3\6\1\0\1\61\10\6\1\0"+ + "\1\6\1\75\13\0\6\6\1\0\17\6\37\0\1\211"+ + "\2\0\1\242\46\0\1\262\33\0\3\243\1\263\11\243"+ + "\1\263\2\243\2\263\4\0\1\243\1\263\2\0\1\263"+ + "\6\243\1\263\17\243\37\0\1\215\2\0\1\245\46\0"+ + "\1\264\33\0\3\246\1\265\11\246\1\265\2\246\2\265"+ + "\4\0\1\246\1\265\2\0\1\265\6\246\1\265\17\246"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\1\6\1\163"+ + "\13\0\6\6\1\0\17\6\1\0\3\6\1\0\1\61"+ + "\10\6\1\0\2\6\13\0\6\6\1\0\16\6\1\155"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\6\1\155\4\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\3\6\1\266\4\6\1\0\2\6\13\0\6\6"+ + "\1\0\17\6\1\0\3\6\1\0\1\61\1\6\1\152"+ + "\6\6\1\0\2\6\13\0\6\6\1\0\17\6\1\0"+ + "\3\6\1\0\1\61\10\6\1\0\2\6\13\0\6\6"+ + "\1\0\10\6\1\155\6\6\1\0\3\6\1\0\1\61"+ + "\3\6\1\165\4\6\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\2\6"+ + "\13\0\6\6\1\0\1\6\1\236\15\6\1\0\3\6"+ + "\1\0\1\61\10\6\1\0\2\6\13\0\6\6\1\0"+ + "\3\6\1\267\13\6\1\0\3\6\1\0\1\61\10\6"+ + "\1\0\2\6\13\0\6\6\1\0\5\6\1\75\11\6"+ + "\1\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\5\6\1\270\1\0\17\6\27\0\1\243\61\0\1\246"+ + "\33\0\3\6\1\0\1\61\10\6\1\0\2\6\13\0"+ + "\1\6\1\225\4\6\1\0\17\6\1\0\3\6\1\0"+ + "\1\61\7\6\1\163\1\0\2\6\13\0\6\6\1\0"+ + "\17\6\1\0\3\6\1\0\1\61\10\6\1\0\1\6"+ + "\1\155\13\0\6\6\1\0\17\6"; + + private static int [] zzUnpackTrans() { + int [] result = new int[8200]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - switch (initialTokenType) { - case Token.COMMENT_MULTILINE: - state = MLC; - start = text.offset; - break; - default: - state = Token.NULL; - } - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\1\1\2\0\1\11\2\1\1\11\7\1\1\11"+ + "\23\1\1\11\2\1\1\11\5\1\1\11\4\1\1\11"+ + "\1\0\1\11\4\1\1\0\4\1\1\11\5\1\2\11"+ + "\26\1\1\11\1\0\1\11\10\0\2\1\1\0\6\1"+ + "\3\11\24\1\1\11\10\0\21\1\2\0\1\1\2\0"+ + "\14\1\4\0\3\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[184]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public ScalaTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addHyperlinkToken(int, int, int) + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, false); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + * @param hyperlink Whether this token is a hyperlink. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, + int startOffset, boolean hyperlink) { + super.addToken(array, start,end, tokenType, startOffset, hyperlink); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case Token.LITERAL_STRING_DOUBLE_QUOTE: + state = MULTILINE_STRING_DOUBLE; + break; + case Token.COMMENT_MULTILINE: + state = MLC; + break; + default: + state = YYINITIAL; + } + + s = text; + start = text.offset; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public ScalaTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public ScalaTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 150) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public ScalaTokenMaker(java.io.Reader in) { - this.zzReader = in; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public ScalaTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } + throw new Error(message); + } - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 150) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - if (zzReader != null) - zzReader.close(); - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + zzAction = -1; - throw new Error(message); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } + zzState = zzLexicalState; - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 5: { - addNullToken(); - return firstToken; - } - case 22: - break; - case 13: { - addToken(Token.LITERAL_CHAR); - } - case 23: - break; - case 17: { - yybegin(YYINITIAL); - addToken(start, zzStartRead + 1, Token.COMMENT_MULTILINE); - } - case 24: - break; - case 16: { - start = zzMarkedPos - 2; - yybegin(MLC); - } - case 25: - break; - case 7: { - addToken(Token.WHITESPACE); - } - case 26: - break; - case 18: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 27: - break; - case 11: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 28: - break; - case 12: { - addToken(Token.RESERVED_WORD); - } - case 29: - break; - case 3: { - addToken(Token.SEPARATOR); - } - case 30: - break; - case 19: { - addToken(Token.LITERAL_BACKQUOTE); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 31: - break; - case 1: { - addToken(Token.IDENTIFIER); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 32: - break; - case 10: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 33: - break; - case 15: { - start = zzMarkedPos - 2; - yybegin(EOL_COMMENT); - } - case 34: - break; - case 4: { - addToken(Token.ERROR_CHAR); - addNullToken(); - return firstToken; - } - case 35: - break; - case 6: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 36: - break; - case 14: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 37: - break; - case 21: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_EOL); - start = zzMarkedPos; - } - case 38: - break; - case 20: { - int temp = zzStartRead; - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - addHyperlinkToken(temp, zzMarkedPos - 1, Token.COMMENT_MULTILINE); - start = zzMarkedPos; + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 6: + { addNullToken(); return firstToken; + } + case 26: break; + case 15: + { addToken(Token.LITERAL_CHAR); + } + case 27: break; + case 21: + { start = zzMarkedPos-3; yybegin(MULTILINE_STRING_DOUBLE); + } + case 28: break; + case 19: + { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); + } + case 29: break; + case 18: + { start = zzMarkedPos-2; yybegin(MLC); + } + case 30: break; + case 8: + { addToken(Token.WHITESPACE); + } + case 31: break; + case 20: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 32: break; + case 13: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 33: break; + case 14: + { addToken(Token.RESERVED_WORD); + } + case 34: break; + case 4: + { addToken(Token.SEPARATOR); + } + case 35: break; + case 22: + { addToken(Token.LITERAL_BACKQUOTE); + } + case 36: break; + case 9: + { /* Skip escaped chars, handles case: '\"""'. */ + } + case 37: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 38: break; + case 12: + { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 39: break; + case 17: + { start = zzMarkedPos-2; yybegin(EOL_COMMENT); + } + case 40: break; + case 23: + { addToken(start,zzStartRead+2, Token.LITERAL_STRING_DOUBLE_QUOTE); yybegin(YYINITIAL); + } + case 41: break; + case 5: + { addToken(Token.ERROR_CHAR); addNullToken(); return firstToken; + } + case 42: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 43: break; + case 16: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 44: break; + case 10: + { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; + } + case 45: break; + case 25: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; + } + case 46: break; + case 24: + { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; + } + case 47: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 48: break; + case 1: + { + } + case 49: break; + case 11: + { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; + } + case 50: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case EOL_COMMENT: { + addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } - case 39: - break; - case 2: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + case 185: break; + case MULTILINE_STRING_DOUBLE: { + addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken; } - case 40: - break; - case 8: { + case 186: break; + case YYINITIAL: { + addNullToken(); return firstToken; } - case 41: - break; - case 9: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; + case 187: break; + case MLC: { + addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } - case 42: - break; + case 188: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case EOL_COMMENT: { - addToken(start, zzStartRead - 1, Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 174: - break; - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 175: - break; - case MLC: { - addToken(start, zzStartRead - 1, Token.COMMENT_MULTILINE); - return firstToken; - } - case 176: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex old mode 100644 new mode 100755 index 7ae417110..cac80898f --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.flex @@ -2,23 +2,9 @@ * 10/03/2007 * * TclTokenMaker.java - Scanner for the Tcl programming language. - * Copyright (C) 2007 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -49,7 +35,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * If you wish to regenerate this file yourself, keep in mind the following: *
                                    - *
                                  • The generated TclTokenMaker.java file will contain two + *
                                  • The generated TclTokenMaker.java file will contain two * definitions of both zzRefill and yyreset. * You should hand-delete the second of each definition (the ones * generated by the lexer), as these generated methods modify the input @@ -117,6 +103,7 @@ import org.fife.ui.rsyntaxtextarea.*; * @param startOffset The offset in the document at which this token * occurs. */ + @Override public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { super.addToken(array, start,end, tokenType, startOffset); zzStartRead = zzMarkedPos; @@ -124,13 +111,10 @@ import org.fife.ui.rsyntaxtextarea.*; /** - * Returns the text to place at the beginning and end of a - * line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" - * it out. + * {@inheritDoc} */ - public String[] getLineCommentStartAndEnd() { + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { return new String[] { "//", null }; } @@ -162,7 +146,7 @@ import org.fife.ui.rsyntaxtextarea.*; return yylex(); } catch (IOException ioe) { ioe.printStackTrace(); - return new DefaultToken(); + return new TokenImpl(); } } @@ -173,9 +157,8 @@ import org.fife.ui.rsyntaxtextarea.*; * * @return true if EOF was reached, otherwise * false. - * @exception IOException if any I/O-Error occurs. */ - private boolean zzRefill() throws java.io.IOException { + private boolean zzRefill() { return zzCurrentPos>=s.offset+s.count; } @@ -190,7 +173,7 @@ import org.fife.ui.rsyntaxtextarea.*; * * @param reader the new input stream */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { + public final void yyreset(Reader reader) { // 's' has been updated. zzBuffer = s.array; /* diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java old mode 100644 new mode 100755 index c90ca3a5e..757a93f87 --- a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TclTokenMaker.java @@ -4,23 +4,9 @@ * 10/03/2007 * * TclTokenMaker.java - Scanner for the Tcl programming language. - * Copyright (C) 2007 Robert Futrell - * robert_futrell at users.sourceforge.net - * http://fifesoft.com/rsyntaxtextarea * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. */ package org.fife.ui.rsyntaxtextarea.modes; @@ -29,1062 +15,1060 @@ import org.fife.ui.rsyntaxtextarea.*; + /** - * Scanner for the Tcl programming language. - *

                                    - * - * This implementation was created using JFlex 1.4.1; however, the generated file was - * modified for performance. Memory allocation needs to be almost completely removed to be competitive with the - * handwritten lexers (subclasses of AbstractTokenMaker, so this class has been modified so that Strings - * are never allocated (via yytext()), and the scanner never has to worry about refilling its buffer (needlessly copying - * chars around). We can achieve this because RText always scans exactly 1 line of tokens at a time, and hands the - * scanner this line as an array of characters (a Segment really). Since tokens contain pointers to char arrays instead - * of Strings holding their contents, there is no need for allocating new memory for Strings. - *

                                    - * - * The actual algorithm generated for scanning has, of course, not been modified. - *

                                    - * + * Scanner for the Tcl programming language.

                                    + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                                    + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                                    + * * If you wish to regenerate this file yourself, keep in mind the following: *

                                      - *
                                    • The generated TclTokenMaker.java file will contain two definitions of both zzRefill and - * yyreset. You should hand-delete the second of each definition (the ones generated by the lexer), as - * these generated methods modify the input buffer, which we'll never have to do.
                                    • - *
                                    • You should also change the declaration/definition of zzBuffer to NOT be initialized. This is a needless memory - * allocation for us since we will be pointing the array somewhere else anyway.
                                    • - *
                                    • You should NOT call yylex() on the generated scanner directly; rather, you should use - * getTokenList as you would with any other TokenMaker instance.
                                    • + *
                                    • The generated TclTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                                    • + *
                                    • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                                    • + *
                                    • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                                    • *
                                    - * + * * @author Robert Futrell * @version 0.5 - * + * */ public class TclTokenMaker extends AbstractJFlexCTokenMaker { - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** lexical states */ - public static final int YYINITIAL = 0; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\14\1\13\1\0\1\14\1\7\22\0\1\14\1\27\1\15" + - "\1\10\1\1\1\27\1\27\1\7\2\24\1\27\1\22\1\25\1\22" + - "\1\23\1\27\1\3\1\61\1\60\5\5\2\2\1\7\1\25\1\30" + - "\1\26\1\30\1\7\1\0\3\4\1\20\1\21\1\20\5\1\1\17" + - "\13\1\1\16\2\1\1\24\1\11\1\24\1\27\1\12\1\0\1\31" + - "\1\54\1\46\1\35\1\33\1\52\1\53\1\56\1\44\1\55\1\43" + - "\1\50\1\42\1\34\1\41\1\32\1\62\1\36\1\47\1\40\1\6" + - "\1\51\1\57\1\45\1\37\1\1\1\24\1\27\1\24\1\27\uff81\0"; - - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\1\0\1\1\1\2\2\3\1\2\1\1\1\4\1\5" + - "\1\6\1\7\1\10\1\2\1\11\1\2\1\10\22\2" + - "\1\1\1\12\1\3\1\13\1\12\1\13\1\12\1\14" + - "\1\12\2\2\1\7\1\15\35\2\1\16\5\2\1\16" + - "\40\2\1\1\1\13\1\0\2\14\5\2\1\15\25\2" + - "\1\16\30\2\1\16\4\2\1\16\11\2\1\1\5\2" + - "\2\16\6\2\1\16\15\2\1\16\3\2\1\16\1\2" + - "\1\1\14\2\1\1\6\2"; - - private static int[] zzUnpackAction() { - int[] result = new int[241]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** lexical states */ + public static final int YYINITIAL = 0; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\14\1\13\1\0\1\14\1\7\22\0\1\14\1\27\1\15"+ + "\1\10\1\1\1\27\1\27\1\7\2\24\1\27\1\22\1\25\1\22"+ + "\1\23\1\27\1\3\1\61\1\60\5\5\2\2\1\7\1\25\1\30"+ + "\1\26\1\30\1\7\1\0\3\4\1\20\1\21\1\20\5\1\1\17"+ + "\13\1\1\16\2\1\1\24\1\11\1\24\1\27\1\12\1\0\1\31"+ + "\1\54\1\46\1\35\1\33\1\52\1\53\1\56\1\44\1\55\1\43"+ + "\1\50\1\42\1\34\1\41\1\32\1\62\1\36\1\47\1\40\1\6"+ + "\1\51\1\57\1\45\1\37\1\1\1\24\1\27\1\24\1\27\uff81\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\1\0\1\1\1\2\2\3\1\2\1\1\1\4\1\5"+ + "\1\6\1\7\1\10\1\2\1\11\1\2\1\10\22\2"+ + "\1\1\1\12\1\3\1\13\1\12\1\13\1\12\1\14"+ + "\1\12\2\2\1\7\1\15\35\2\1\16\5\2\1\16"+ + "\40\2\1\1\1\13\1\0\2\14\5\2\1\15\25\2"+ + "\1\16\30\2\1\16\4\2\1\16\11\2\1\1\5\2"+ + "\2\16\6\2\1\16\15\2\1\16\3\2\1\16\1\2"+ + "\1\1\14\2\1\1\6\2"; + + private static int [] zzUnpackAction() { + int [] result = new int[241]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\63\0\146\0\231\0\314\0\377\0\u0132\0\u0165" + - "\0\u0132\0\u0198\0\u01cb\0\u0132\0\u01fe\0\u0132\0\u0132\0\u0231" + - "\0\u0264\0\u0297\0\u02ca\0\u02fd\0\u0330\0\u0363\0\u0396\0\u03c9" + - "\0\u03fc\0\u042f\0\u0462\0\u0495\0\u04c8\0\u04fb\0\u052e\0\u0561" + - "\0\u0594\0\u05c7\0\u05fa\0\u062d\0\u062d\0\u062d\0\u0660\0\u0693" + - "\0\u06c6\0\u06f9\0\u072c\0\u075f\0\u0792\0\u07c5\0\u0132\0\u07f8" + - "\0\u082b\0\u085e\0\u0891\0\u08c4\0\u08f7\0\u092a\0\u095d\0\u0990" + - "\0\u09c3\0\u09f6\0\u0a29\0\u0a5c\0\u0a8f\0\u0ac2\0\u0af5\0\u0b28" + - "\0\u0b5b\0\u0b8e\0\u0bc1\0\u0bf4\0\u0c27\0\u0c5a\0\u0c8d\0\u0cc0" + - "\0\u0cf3\0\u0d26\0\u0d59\0\u0d8c\0\u0dbf\0\u0df2\0\u0e25\0\u0e58" + - "\0\u0e8b\0\u0ebe\0\146\0\u0ef1\0\u0f24\0\u0f57\0\u0f8a\0\u0fbd" + - "\0\u0ff0\0\u1023\0\u1056\0\u1089\0\u10bc\0\u10ef\0\u1122\0\u1155" + - "\0\u1188\0\u11bb\0\u11ee\0\u1221\0\u1254\0\u1287\0\u12ba\0\u12ed" + - "\0\u1320\0\u1353\0\u1386\0\u13b9\0\u13ec\0\u141f\0\u1452\0\u1485" + - "\0\u14b8\0\u14eb\0\u151e\0\u1551\0\u1584\0\u15b7\0\u062d\0\u15ea" + - "\0\u161d\0\u1650\0\u1683\0\u16b6\0\u16e9\0\u01cb\0\u171c\0\u174f" + - "\0\u1782\0\u17b5\0\u17e8\0\u181b\0\u184e\0\u1881\0\u18b4\0\u18e7" + - "\0\u191a\0\u194d\0\u1980\0\u19b3\0\u19e6\0\u1a19\0\u1a4c\0\u1a7f" + - "\0\u1ab2\0\u1ae5\0\u1b18\0\u1b4b\0\u1b7e\0\u1bb1\0\u1be4\0\u1c17" + - "\0\u1c4a\0\u1c7d\0\u1cb0\0\u1ce3\0\u1d16\0\u1d49\0\u1d7c\0\u1daf" + - "\0\u1de2\0\u1e15\0\u1e48\0\u1e7b\0\u1eae\0\u1ee1\0\u1f14\0\u1f47" + - "\0\u1f7a\0\u1fad\0\u1fe0\0\u2013\0\u2046\0\u2079\0\u20ac\0\u20df" + - "\0\u2112\0\u2145\0\u2178\0\u21ab\0\u21de\0\u2211\0\u2244\0\u2277" + - "\0\u22aa\0\u22dd\0\u2310\0\u2343\0\u2376\0\u23a9\0\u23dc\0\u240f" + - "\0\u2442\0\u2475\0\u24a8\0\u24db\0\u250e\0\u2541\0\u2574\0\u25a7" + - "\0\u25da\0\u260d\0\u2640\0\u1b4b\0\u2673\0\u26a6\0\u26d9\0\u270c" + - "\0\u273f\0\u2772\0\u27a5\0\u27d8\0\u280b\0\u283e\0\u2871\0\u28a4" + - "\0\u28d7\0\u290a\0\u293d\0\u0bc1\0\u2970\0\u29a3\0\u29d6\0\u2a09" + - "\0\u260d\0\u2a3c\0\u2a6f\0\u2aa2\0\u2ad5\0\u2b08\0\u2b3b\0\u2b6e" + - "\0\u2ba1\0\u2bd4\0\u2c07\0\u2c3a\0\u2c6d\0\u2ca0\0\u2cd3\0\u2d06" + - "\0\u2d39"; - - private static int[] zzUnpackRowMap() { - int[] result = new int[241]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\63\0\146\0\231\0\314\0\377\0\u0132\0\u0165"+ + "\0\u0132\0\u0198\0\u01cb\0\u0132\0\u01fe\0\u0132\0\u0132\0\u0231"+ + "\0\u0264\0\u0297\0\u02ca\0\u02fd\0\u0330\0\u0363\0\u0396\0\u03c9"+ + "\0\u03fc\0\u042f\0\u0462\0\u0495\0\u04c8\0\u04fb\0\u052e\0\u0561"+ + "\0\u0594\0\u05c7\0\u05fa\0\u062d\0\u062d\0\u062d\0\u0660\0\u0693"+ + "\0\u06c6\0\u06f9\0\u072c\0\u075f\0\u0792\0\u07c5\0\u0132\0\u07f8"+ + "\0\u082b\0\u085e\0\u0891\0\u08c4\0\u08f7\0\u092a\0\u095d\0\u0990"+ + "\0\u09c3\0\u09f6\0\u0a29\0\u0a5c\0\u0a8f\0\u0ac2\0\u0af5\0\u0b28"+ + "\0\u0b5b\0\u0b8e\0\u0bc1\0\u0bf4\0\u0c27\0\u0c5a\0\u0c8d\0\u0cc0"+ + "\0\u0cf3\0\u0d26\0\u0d59\0\u0d8c\0\u0dbf\0\u0df2\0\u0e25\0\u0e58"+ + "\0\u0e8b\0\u0ebe\0\146\0\u0ef1\0\u0f24\0\u0f57\0\u0f8a\0\u0fbd"+ + "\0\u0ff0\0\u1023\0\u1056\0\u1089\0\u10bc\0\u10ef\0\u1122\0\u1155"+ + "\0\u1188\0\u11bb\0\u11ee\0\u1221\0\u1254\0\u1287\0\u12ba\0\u12ed"+ + "\0\u1320\0\u1353\0\u1386\0\u13b9\0\u13ec\0\u141f\0\u1452\0\u1485"+ + "\0\u14b8\0\u14eb\0\u151e\0\u1551\0\u1584\0\u15b7\0\u062d\0\u15ea"+ + "\0\u161d\0\u1650\0\u1683\0\u16b6\0\u16e9\0\u01cb\0\u171c\0\u174f"+ + "\0\u1782\0\u17b5\0\u17e8\0\u181b\0\u184e\0\u1881\0\u18b4\0\u18e7"+ + "\0\u191a\0\u194d\0\u1980\0\u19b3\0\u19e6\0\u1a19\0\u1a4c\0\u1a7f"+ + "\0\u1ab2\0\u1ae5\0\u1b18\0\u1b4b\0\u1b7e\0\u1bb1\0\u1be4\0\u1c17"+ + "\0\u1c4a\0\u1c7d\0\u1cb0\0\u1ce3\0\u1d16\0\u1d49\0\u1d7c\0\u1daf"+ + "\0\u1de2\0\u1e15\0\u1e48\0\u1e7b\0\u1eae\0\u1ee1\0\u1f14\0\u1f47"+ + "\0\u1f7a\0\u1fad\0\u1fe0\0\u2013\0\u2046\0\u2079\0\u20ac\0\u20df"+ + "\0\u2112\0\u2145\0\u2178\0\u21ab\0\u21de\0\u2211\0\u2244\0\u2277"+ + "\0\u22aa\0\u22dd\0\u2310\0\u2343\0\u2376\0\u23a9\0\u23dc\0\u240f"+ + "\0\u2442\0\u2475\0\u24a8\0\u24db\0\u250e\0\u2541\0\u2574\0\u25a7"+ + "\0\u25da\0\u260d\0\u2640\0\u1b4b\0\u2673\0\u26a6\0\u26d9\0\u270c"+ + "\0\u273f\0\u2772\0\u27a5\0\u27d8\0\u280b\0\u283e\0\u2871\0\u28a4"+ + "\0\u28d7\0\u290a\0\u293d\0\u0bc1\0\u2970\0\u29a3\0\u29d6\0\u2a09"+ + "\0\u260d\0\u2a3c\0\u2a6f\0\u2aa2\0\u2ad5\0\u2b08\0\u2b3b\0\u2b6e"+ + "\0\u2ba1\0\u2bd4\0\u2c07\0\u2c3a\0\u2c6d\0\u2ca0\0\u2cd3\0\u2d06"+ + "\0\u2d39"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[241]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } - - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\2\1\3\1\4\1\5\1\3\1\4\1\6\1\7"+ + "\1\10\1\2\1\3\1\11\1\12\1\13\4\3\1\14"+ + "\1\15\1\16\1\17\2\14\1\20\1\21\1\22\1\23"+ + "\1\3\1\24\1\25\1\3\1\26\1\27\1\30\1\3"+ + "\1\31\1\3\1\32\1\33\1\34\1\3\1\35\1\36"+ + "\1\37\1\40\1\41\1\42\2\4\1\3\7\2\1\0"+ + "\3\2\3\0\4\2\7\0\33\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\2\44\2\4"+ + "\1\44\1\4\1\44\1\0\3\44\3\0\1\44\1\45"+ + "\1\46\1\47\1\0\1\50\5\0\2\44\1\47\1\44"+ + "\1\46\12\44\1\45\1\44\1\46\5\44\2\4\3\44"+ + "\1\51\1\52\1\44\1\52\1\44\1\0\3\44\3\0"+ + "\1\53\1\45\1\46\1\47\1\0\1\50\5\0\2\44"+ + "\1\47\1\44\1\46\7\44\1\53\2\44\1\45\1\44"+ + "\1\46\5\44\2\52\1\44\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\3\1\54\1\3"+ + "\1\55\26\3\63\0\13\10\1\0\47\10\14\0\1\12"+ + "\46\0\11\13\1\56\3\13\1\57\45\13\2\0\2\50"+ + "\1\0\1\50\52\0\2\50\27\0\1\14\34\0\1\2"+ + "\5\3\1\60\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\3\1\61\3\3\1\62\1\3\1\63\5\3"+ + "\1\64\1\65\2\3\1\66\1\3\1\67\6\3\1\2"+ + "\5\3\1\70\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\71\4\3\1\72\2\3\1\73\2\3\1\74"+ + "\3\3\1\75\6\3\1\74\3\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\76"+ + "\1\3\1\77\2\3\1\100\3\3\1\101\2\3\1\102"+ + "\1\103\11\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\104\5\3\1\105\21\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\106\1\3\1\107\5\3\1\110\21\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\111\1\3\1\112\2\3\1\113\2\3\1\114\1\3"+ + "\1\115\1\116\16\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\117\30\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\120\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\121\5\3\1\122"+ + "\7\3\1\123\10\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\124\1\3\1\125\1\3"+ + "\1\123\3\3\1\126\6\3\1\127\5\3\1\130\4\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\3\1\131\1\132\4\3\1\133\1\134\2\3"+ + "\1\111\1\3\1\135\10\3\1\136\2\3\1\137\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\140\4\3\1\141\2\3\1\142\2\3\1\143\2\3"+ + "\1\144\1\145\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\5\3\1\146\2\3\1\147"+ + "\1\150\1\3\1\151\3\3\1\152\12\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\70\2\3\1\153\11\3\1\154\12\3\1\2\5\3"+ + "\1\155\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\156\5\3\1\157\16\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\65"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\6\3\1\160\4\3\1\161\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\11\3\1\123\1\3\1\162\11\3\1\163\4\3\6\2"+ + "\1\164\1\0\3\2\3\0\4\2\7\0\32\2\7\44"+ + "\1\0\3\44\3\0\4\44\7\0\34\44\2\165\1\44"+ + "\1\165\1\44\1\0\3\44\3\0\4\44\1\166\6\0"+ + "\27\44\2\165\3\44\2\50\1\44\1\50\1\44\1\0"+ + "\3\44\3\0\2\44\1\46\1\47\7\0\2\44\1\47"+ + "\1\44\1\46\14\44\1\46\5\44\2\50\3\44\2\51"+ + "\1\44\1\51\1\44\1\0\3\44\3\0\2\44\1\46"+ + "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ + "\14\44\1\46\5\44\2\51\3\44\1\51\1\52\1\44"+ + "\1\52\1\44\1\0\3\44\3\0\1\44\1\167\1\46"+ + "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46"+ + "\12\44\1\167\1\44\1\46\5\44\2\52\3\44\4\170"+ + "\1\44\1\0\3\44\3\0\2\44\2\170\7\0\1\170"+ + "\1\44\1\170\1\44\1\170\10\44\1\170\3\44\1\170"+ + "\1\44\1\170\3\44\2\170\1\44\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\4\3\1\171"+ + "\12\3\1\172\1\173\11\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\12\3\1\174\3\3"+ + "\1\175\13\3\13\13\1\0\1\13\1\176\45\13\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\177\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\200\30\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\201\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\202\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\67\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\13\3\1\203\16\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ + "\1\204\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\16\3\1\123\13\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3"+ + "\1\67\22\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\15\3\1\205\14\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\206\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\26\3\1\123\3\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ + "\1\123\25\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\207\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\210"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\5\3\1\211\24\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\21\3\1\123"+ + "\10\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\3\1\212\1\206\10\3\1\213\16\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\16\3\1\214\13\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\215\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\16\3\1\216\13\3\1\2\5\3\1\217\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3"+ + "\1\220\6\3\1\221\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\74\2\3\1\146"+ + "\3\3\1\222\12\3\1\223\7\3\1\2\5\3\1\157"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\3\3\1\224\26\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\14\3\1\213\2\3"+ + "\1\215\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\225\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\226"+ + "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\227\23\3\1\230\3\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\11\3\1\231\20\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\203\4\3\1\232"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\233\12\3\1\234\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\123\5\3\1\212\3\3\1\235\10\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\236\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\3\3\1\237\3\3\1\240\22\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\215\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\241\12\3"+ + "\1\224\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\221\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\242\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\17\3\1\243\12\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\205\1\74\3\3\1\123\7\3\1\244\12\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\245\24\3\1\2\5\3\1\246\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\247"+ + "\4\3\1\250\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\251\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\213\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\3\1\61\21\3\1\252"+ + "\6\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\253\1\3\1\254\27\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\22\3"+ + "\1\255\3\3\1\204\3\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\256\12\3"+ + "\1\257\13\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\260\5\3\1\137\21\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\2\3\1\261\27\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\116\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\262\7\3\1\263\14\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\74"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\17\3\1\231\12\3\1\2\5\3\1\264"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\211\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\265\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\266"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\7\3\1\267\22\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\270"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\74\26\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\271"+ + "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\16\3\1\272\13\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\273"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\13\3\1\151\16\3\2\2\4\274\1\2"+ + "\1\0\3\2\3\0\2\2\2\274\7\0\1\274\1\2"+ + "\1\274\1\2\1\274\10\2\1\274\3\2\1\274\1\2"+ + "\1\274\3\2\2\274\1\2\2\44\2\165\1\44\1\165"+ + "\1\44\1\0\3\44\3\0\2\44\1\46\1\44\7\0"+ + "\4\44\1\46\14\44\1\46\5\44\2\165\1\44\2\0"+ + "\2\165\1\0\1\165\52\0\2\165\1\0\2\44\4\170"+ + "\1\44\1\0\3\44\3\0\1\44\1\167\2\170\7\0"+ + "\1\170\1\44\1\170\1\44\1\170\10\44\1\170\1\44"+ + "\1\167\1\44\1\170\1\44\1\170\3\44\2\170\1\44"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\1\275\31\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\276\27\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\212\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\277\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\213\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\300\21\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3"+ + "\1\157\27\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\1\301\31\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\302"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\3\3\1\123\26\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\212"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\12\3\1\123\17\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\15\3\1\123"+ + "\14\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\15\3\1\204\14\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\301"+ + "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\10\3\1\212\21\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\123"+ + "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\7\3\1\123\22\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\303"+ + "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\17\3\1\123\12\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\304"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\23\3\1\151\6\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\305"+ + "\16\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\16\3\1\231\13\3\1\2\5\3\1\306"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\2\3\1\307\13\3\1\310\13\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\25\3"+ + "\1\123\4\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\15\3\1\231\14\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\17\3"+ + "\1\172\12\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\77\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\243"+ + "\31\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\123\27\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\311"+ + "\16\3\1\2\5\3\1\312\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\16\3\1\122\13\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\10\3\1\123\21\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\22\3\1\231\7\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\20\3\1\313\11\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\15\3\1\314\14\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\7\3\1\315\5\3\1\316\1\317\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\15\3\1\320\14\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\213\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\321\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\13\3\1\322\16\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\225\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\123\13\3\1\231"+ + "\12\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\10\3\1\323\21\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\240"+ + "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\2\3\1\215\27\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\236"+ + "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\1\3\1\324\30\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\30\3\1\325"+ + "\1\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\4\3\1\326\11\3\1\327\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\330\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\331\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\3\3"+ + "\1\332\26\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\2\3\1\333\6\3\1\316\20\3"+ + "\1\2\5\3\1\67\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\16\3\1\314\13\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\23\3\1\123\6\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\23\3\1\334\6\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\311\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\1\205\31\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\213\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\7\3\1\335\22\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\21\3"+ + "\1\235\10\3\2\2\4\336\1\2\1\0\3\2\3\0"+ + "\2\2\2\336\7\0\1\336\1\2\1\336\1\2\1\336"+ + "\10\2\1\336\3\2\1\336\1\2\1\336\3\2\2\336"+ + "\2\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\7\3\1\231\22\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\20\3\1\252\11\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\26\3\1\203\3\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\337\3\0\4\3\7\0\32\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\6\3"+ + "\1\123\23\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\27\3\1\123\2\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\13\3"+ + "\1\100\16\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\340\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3"+ + "\1\341\21\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\5\3\1\203\24\3\1\2\6\3"+ + "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\14\3"+ + "\1\342\15\3\1\2\5\3\1\265\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\32\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\203"+ + "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\23\3\1\343\6\3\1\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\1\67\31\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\344\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\213\31\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\10\3\1\151\21\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\12\3\1\341\17\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\15\3\1\345\14\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\346\26\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\17\3\1\347\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\17\3\1\113\12\3\1\2"+ + "\2\3\1\123\3\3\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\2\3\1\350\27\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\2\3\1\137\27\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\23\3\1\351\6\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\5\3\1\240\24\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\22\3\1\352\7\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\1\240\31\3\1\2\6\3\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\10\3\1\210\21\3\2\2\4\353"+ + "\1\2\1\0\3\2\3\0\2\2\2\353\7\0\1\353"+ + "\1\2\1\353\1\2\1\353\10\2\1\353\3\2\1\353"+ + "\1\2\1\353\3\2\2\353\2\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\11\3\1\354\20\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\10\3\1\301\21\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\1\3\1\123\30\3"+ + "\1\2\5\3\1\155\1\0\1\2\1\43\1\3\3\0"+ + "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\3\3\1\355\26\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\7\3\1\232\22\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\22\3\1\123\7\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\17\3\1\356\12\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\14\3\1\123\15\3\1\2"+ + "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0"+ + "\10\3\1\350\21\3\1\2\6\3\1\0\1\2\1\43"+ + "\1\3\3\0\4\3\7\0\7\3\1\314\22\3\2\2"+ + "\4\3\1\2\1\0\3\2\3\0\2\2\2\3\7\0"+ + "\1\3\1\2\1\3\1\2\1\3\10\2\1\3\3\2"+ + "\1\3\1\2\1\3\3\2\2\3\2\2\6\3\1\0"+ + "\1\2\1\43\1\3\3\0\4\3\7\0\12\3\1\357"+ + "\17\3\1\2\5\3\1\231\1\0\1\2\1\43\1\3"+ + "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\23\3\1\173\6\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\13\3\1\360\16\3\1\2\6\3\1\0\1\2"+ + "\1\43\1\3\3\0\4\3\7\0\3\3\1\361\26\3"+ + "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3"+ + "\7\0\4\3\1\326\25\3"; + + private static int [] zzUnpackTrans() { + int [] result = new int[11628]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } - - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\2\1\3\1\4\1\5\1\3\1\4\1\6\1\7" + - "\1\10\1\2\1\3\1\11\1\12\1\13\4\3\1\14" + - "\1\15\1\16\1\17\2\14\1\20\1\21\1\22\1\23" + - "\1\3\1\24\1\25\1\3\1\26\1\27\1\30\1\3" + - "\1\31\1\3\1\32\1\33\1\34\1\3\1\35\1\36" + - "\1\37\1\40\1\41\1\42\2\4\1\3\7\2\1\0" + - "\3\2\3\0\4\2\7\0\33\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\32\3\2\44\2\4" + - "\1\44\1\4\1\44\1\0\3\44\3\0\1\44\1\45" + - "\1\46\1\47\1\0\1\50\5\0\2\44\1\47\1\44" + - "\1\46\12\44\1\45\1\44\1\46\5\44\2\4\3\44" + - "\1\51\1\52\1\44\1\52\1\44\1\0\3\44\3\0" + - "\1\53\1\45\1\46\1\47\1\0\1\50\5\0\2\44" + - "\1\47\1\44\1\46\7\44\1\53\2\44\1\45\1\44" + - "\1\46\5\44\2\52\1\44\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\3\1\54\1\3" + - "\1\55\26\3\63\0\13\10\1\0\47\10\14\0\1\12" + - "\46\0\11\13\1\56\3\13\1\57\45\13\2\0\2\50" + - "\1\0\1\50\52\0\2\50\27\0\1\14\34\0\1\2" + - "\5\3\1\60\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\1\3\1\61\3\3\1\62\1\3\1\63\5\3" + - "\1\64\1\65\2\3\1\66\1\3\1\67\6\3\1\2" + - "\5\3\1\70\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\1\71\4\3\1\72\2\3\1\73\2\3\1\74" + - "\3\3\1\75\6\3\1\74\3\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\76" + - "\1\3\1\77\2\3\1\100\3\3\1\101\2\3\1\102" + - "\1\103\11\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\2\3\1\104\5\3\1\105\21\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\1\106\1\3\1\107\5\3\1\110\21\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\1\111\1\3\1\112\2\3\1\113\2\3\1\114\1\3" + - "\1\115\1\116\16\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\3\1\117\30\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\2\3\1\120\27\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\3\3\1\121\5\3\1\122" + - "\7\3\1\123\10\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\124\1\3\1\125\1\3" + - "\1\123\3\3\1\126\6\3\1\127\5\3\1\130\4\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\1\3\1\131\1\132\4\3\1\133\1\134\2\3" + - "\1\111\1\3\1\135\10\3\1\136\2\3\1\137\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\1\140\4\3\1\141\2\3\1\142\2\3\1\143\2\3" + - "\1\144\1\145\12\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\5\3\1\146\2\3\1\147" + - "\1\150\1\3\1\151\3\3\1\152\12\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3" + - "\1\70\2\3\1\153\11\3\1\154\12\3\1\2\5\3" + - "\1\155\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\156\5\3\1\157\16\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\65" + - "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\6\3\1\160\4\3\1\161\16\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\11\3\1\123\1\3\1\162\11\3\1\163\4\3\6\2" + - "\1\164\1\0\3\2\3\0\4\2\7\0\32\2\7\44" + - "\1\0\3\44\3\0\4\44\7\0\34\44\2\165\1\44" + - "\1\165\1\44\1\0\3\44\3\0\4\44\1\166\6\0" + - "\27\44\2\165\3\44\2\50\1\44\1\50\1\44\1\0" + - "\3\44\3\0\2\44\1\46\1\47\7\0\2\44\1\47" + - "\1\44\1\46\14\44\1\46\5\44\2\50\3\44\2\51" + - "\1\44\1\51\1\44\1\0\3\44\3\0\2\44\1\46" + - "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46" + - "\14\44\1\46\5\44\2\51\3\44\1\51\1\52\1\44" + - "\1\52\1\44\1\0\3\44\3\0\1\44\1\167\1\46" + - "\1\47\1\0\1\50\5\0\2\44\1\47\1\44\1\46" + - "\12\44\1\167\1\44\1\46\5\44\2\52\3\44\4\170" + - "\1\44\1\0\3\44\3\0\2\44\2\170\7\0\1\170" + - "\1\44\1\170\1\44\1\170\10\44\1\170\3\44\1\170" + - "\1\44\1\170\3\44\2\170\1\44\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\4\3\1\171" + - "\12\3\1\172\1\173\11\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\12\3\1\174\3\3" + - "\1\175\13\3\13\13\1\0\1\13\1\176\45\13\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\7\3\1\177\22\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\3\1\200\30\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\201\24\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\202\31\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3" + - "\1\67\21\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\13\3\1\203\16\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3" + - "\1\204\22\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\16\3\1\123\13\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\7\3" + - "\1\67\22\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\15\3\1\205\14\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3" + - "\1\206\21\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\26\3\1\123\3\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3" + - "\1\123\25\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\1\207\31\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\210" + - "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\5\3\1\211\24\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\21\3\1\123" + - "\10\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\1\3\1\212\1\206\10\3\1\213\16\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\16\3\1\214\13\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\215\31\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\16\3\1\216\13\3\1\2\5\3\1\217\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\4\3" + - "\1\220\6\3\1\221\16\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\74\2\3\1\146" + - "\3\3\1\222\12\3\1\223\7\3\1\2\5\3\1\157" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\3\3\1\224\26\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\14\3\1\213\2\3" + - "\1\215\12\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\1\225\31\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\226" + - "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\2\3\1\227\23\3\1\230\3\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\11\3\1\231\20\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\2\3\1\203\4\3\1\232" + - "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\3\3\1\233\12\3\1\234\13\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\7\3\1\123\5\3\1\212\3\3\1\235\10\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\1\236\31\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\3\3\1\237\3\3\1\240\22\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\13\3\1\215\16\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\3\3\1\241\12\3" + - "\1\224\13\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\10\3\1\221\21\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3" + - "\1\242\27\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\17\3\1\243\12\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3" + - "\1\205\1\74\3\3\1\123\7\3\1\244\12\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\245\24\3\1\2\5\3\1\246\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\32\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\247" + - "\4\3\1\250\24\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\13\3\1\251\16\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\213\24\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\3\1\61\21\3\1\252" + - "\6\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\1\253\1\3\1\254\27\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\22\3" + - "\1\255\3\3\1\204\3\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\3\3\1\256\12\3" + - "\1\257\13\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\2\3\1\260\5\3\1\137\21\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\2\3\1\261\27\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\116\31\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\262\7\3\1\263\14\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\74" + - "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\17\3\1\231\12\3\1\2\5\3\1\264" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3" + - "\1\211\21\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\1\265\31\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\266" + - "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\7\3\1\267\22\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\270" + - "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\3\3\1\74\26\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\1\3\1\271" + - "\30\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\16\3\1\272\13\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\273" + - "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\13\3\1\151\16\3\2\2\4\274\1\2" + - "\1\0\3\2\3\0\2\2\2\274\7\0\1\274\1\2" + - "\1\274\1\2\1\274\10\2\1\274\3\2\1\274\1\2" + - "\1\274\3\2\2\274\1\2\2\44\2\165\1\44\1\165" + - "\1\44\1\0\3\44\3\0\2\44\1\46\1\44\7\0" + - "\4\44\1\46\14\44\1\46\5\44\2\165\1\44\2\0" + - "\2\165\1\0\1\165\52\0\2\165\1\0\2\44\4\170" + - "\1\44\1\0\3\44\3\0\1\44\1\167\2\170\7\0" + - "\1\170\1\44\1\170\1\44\1\170\10\44\1\170\1\44" + - "\1\167\1\44\1\170\1\44\1\170\3\44\2\170\1\44" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\1\275\31\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\2\3\1\276\27\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\1\212\31\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\10\3\1\277\21\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3" + - "\1\213\27\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\10\3\1\300\21\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\2\3" + - "\1\157\27\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\1\301\31\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\302" + - "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\3\3\1\123\26\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\212" + - "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\12\3\1\123\17\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\15\3\1\123" + - "\14\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\15\3\1\204\14\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\301" + - "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\10\3\1\212\21\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\5\3\1\123" + - "\24\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\7\3\1\123\22\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\2\3\1\303" + - "\27\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\17\3\1\123\12\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\304" + - "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\23\3\1\151\6\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\305" + - "\16\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\16\3\1\231\13\3\1\2\5\3\1\306" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\32\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\2\3\1\307\13\3\1\310\13\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\25\3" + - "\1\123\4\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\15\3\1\231\14\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\17\3" + - "\1\172\12\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\5\3\1\77\24\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\1\243" + - "\31\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\2\3\1\123\27\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\13\3\1\311" + - "\16\3\1\2\5\3\1\312\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\16\3\1\122\13\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\10\3\1\123\21\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\22\3\1\231\7\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\20\3\1\313\11\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\15\3\1\314\14\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\7\3\1\315\5\3\1\316\1\317\13\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\15\3\1\320\14\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\13\3\1\213\16\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\2\3\1\321\27\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\13\3\1\322\16\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\225\24\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\3\3\1\123\13\3\1\231" + - "\12\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\10\3\1\323\21\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\7\3\1\240" + - "\22\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\2\3\1\215\27\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\3\3\1\236" + - "\26\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\1\3\1\324\30\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\30\3\1\325" + - "\1\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\4\3\1\326\11\3\1\327\13\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\7\3\1\330\22\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\331\31\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\3\3" + - "\1\332\26\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\2\3\1\333\6\3\1\316\20\3" + - "\1\2\5\3\1\67\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\16\3\1\314\13\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\23\3\1\123\6\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\23\3\1\334\6\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\7\3\1\311\22\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\1\205\31\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3" + - "\1\213\21\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\7\3\1\335\22\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\21\3" + - "\1\235\10\3\2\2\4\336\1\2\1\0\3\2\3\0" + - "\2\2\2\336\7\0\1\336\1\2\1\336\1\2\1\336" + - "\10\2\1\336\3\2\1\336\1\2\1\336\3\2\2\336" + - "\2\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\7\3\1\231\22\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\20\3\1\252\11\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\26\3\1\203\3\3\1\2\6\3\1\0\1\2" + - "\1\43\1\337\3\0\4\3\7\0\32\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\6\3" + - "\1\123\23\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\27\3\1\123\2\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\13\3" + - "\1\100\16\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\5\3\1\340\24\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\10\3" + - "\1\341\21\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\5\3\1\203\24\3\1\2\6\3" + - "\1\0\1\2\1\43\1\3\3\0\4\3\7\0\14\3" + - "\1\342\15\3\1\2\5\3\1\265\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\32\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\10\3\1\203" + - "\21\3\1\2\6\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\23\3\1\343\6\3\1\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\1\67\31\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\13\3\1\344\16\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\213\31\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\10\3\1\151\21\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\12\3\1\341\17\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\15\3\1\345\14\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\3\3\1\346\26\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\17\3\1\347\12\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\17\3\1\113\12\3\1\2" + - "\2\3\1\123\3\3\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\2\3\1\350\27\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\2\3\1\137\27\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\23\3\1\351\6\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\5\3\1\240\24\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\22\3\1\352\7\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\1\240\31\3\1\2\6\3\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\10\3\1\210\21\3\2\2\4\353" + - "\1\2\1\0\3\2\3\0\2\2\2\353\7\0\1\353" + - "\1\2\1\353\1\2\1\353\10\2\1\353\3\2\1\353" + - "\1\2\1\353\3\2\2\353\2\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\11\3\1\354\20\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\10\3\1\301\21\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\1\3\1\123\30\3" + - "\1\2\5\3\1\155\1\0\1\2\1\43\1\3\3\0" + - "\4\3\7\0\32\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\3\3\1\355\26\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\7\3\1\232\22\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\22\3\1\123\7\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\17\3\1\356\12\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\14\3\1\123\15\3\1\2" + - "\6\3\1\0\1\2\1\43\1\3\3\0\4\3\7\0" + - "\10\3\1\350\21\3\1\2\6\3\1\0\1\2\1\43" + - "\1\3\3\0\4\3\7\0\7\3\1\314\22\3\2\2" + - "\4\3\1\2\1\0\3\2\3\0\2\2\2\3\7\0" + - "\1\3\1\2\1\3\1\2\1\3\10\2\1\3\3\2" + - "\1\3\1\2\1\3\3\2\2\3\2\2\6\3\1\0" + - "\1\2\1\43\1\3\3\0\4\3\7\0\12\3\1\357" + - "\17\3\1\2\5\3\1\231\1\0\1\2\1\43\1\3" + - "\3\0\4\3\7\0\32\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\23\3\1\173\6\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\13\3\1\360\16\3\1\2\6\3\1\0\1\2" + - "\1\43\1\3\3\0\4\3\7\0\3\3\1\361\26\3" + - "\1\2\6\3\1\0\1\2\1\43\1\3\3\0\4\3" + - "\7\0\4\3\1\326\25\3"; - - private static int[] zzUnpackTrans() { - int[] result = new int[11628]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; + return j; + } + + + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; + + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\1\0\5\1\1\11\1\1\1\11\2\1\1\11\1\1"+ + "\2\11\37\1\1\11\106\1\1\0\173\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[241]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } - - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do - result[j++] = value; - while (--count > 0); - } - return j; + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public TclTokenMaker() { + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + + // Start off in the proper state. + int state = Token.NULL; + + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtEOF = false; + } + + + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + public TclTokenMaker(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Creates a new scanner. + * There is also java.io.Reader version of this constructor. + * + * @param in the java.io.Inputstream to read input from. + */ + public TclTokenMaker(java.io.InputStream in) { + this(new java.io.InputStreamReader(in)); + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 160) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); } - - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; - - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\5\1\1\11\1\1\1\11\2\1\1\11\1\1" + - "\2\11\37\1\1\11\106\1\1\0\173\1"; - - private static int[] zzUnpackAttribute() { - int[] result = new int[241]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; + return map; + } + + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ + + if (zzReader != null) + zzReader.close(); + } + + + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + @Override +public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; } - - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do - result[j++] = value; - while (--count > 0); - } - return j; + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** the input device */ - private java.io.Reader zzReader; + throw new Error(message); + } - /** the current state of the DFA */ - private int zzState; - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * this buffer contains the current text to be matched and is the source of the yytext() string - */ - private char zzBuffer[]; + zzMarkedPos -= number; + } - /** the textposition at the last accepting state */ - private int zzMarkedPos; - /** the current text position in the buffer */ - private int zzCurrentPos; + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { + int zzInput; + int zzAction; - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * endRead marks the last character in the buffer, that has been read from input - */ - private int zzEndRead; + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; + while (true) { + zzMarkedPosL = zzMarkedPos; - /* user code: */ + zzAction = -1; - /** - * Constructor. This must be here because JFlex does not generate a no-parameter constructor. - */ - public TclTokenMaker() { - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int tokenType) { - addToken(zzStartRead, zzMarkedPos - 1, tokenType); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param tokenType - * The token's type. - */ - private void addToken(int start, int end, int tokenType) { - int so = start + offsetShift; - addToken(zzBuffer, start, end, tokenType, so); - } - - /** - * Adds the token specified to the current linked list of tokens. - * - * @param array - * The character array. - * @param start - * The starting offset in the array. - * @param end - * The ending offset in the array. - * @param tokenType - * The token's type. - * @param startOffset - * The offset in the document at which this token occurs. - */ - public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { - super.addToken(array, start, end, tokenType, startOffset); - zzStartRead = zzMarkedPos; - } - - /** - * Returns the text to place at the beginning and end of a line to "comment" it in a this programming language. - * - * @return The start and end strings to add to a line to "comment" it out. - */ - public String[] getLineCommentStartAndEnd() { - return new String[] { "//", null }; - } - - /** - * Returns the first token in the linked list of tokens generated from text. This method must be - * implemented by subclasses so they can correctly implement syntax highlighting. - * - * @param text - * The text from which to get tokens. - * @param initialTokenType - * The token type we should start with. - * @param startOffset - * The offset into the document at which text starts. - * @return The first Token in a linked list representing the syntax highlighted text. - */ - public Token getTokenList(Segment text, int initialTokenType, int startOffset) { - - resetTokenList(); - this.offsetShift = -text.offset + startOffset; - - // Start off in the proper state. - int state = Token.NULL; - - s = text; - try { - yyreset(zzReader); - yybegin(state); - return yylex(); - } catch (IOException ioe) { - ioe.printStackTrace(); - return new DefaultToken(); - } - - } - - /** - * Refills the input buffer. - * - * @return true if EOF was reached, otherwise false. - * @exception IOException - * if any I/O-Error occurs. - */ - private boolean zzRefill() throws java.io.IOException { - return zzCurrentPos >= s.offset + s.count; - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - /** - * Resets the scanner to read from a new input stream. Does not close the old reader. - * - * All internal variables are reset, the old input stream cannot be reused (internal buffer is discarded and - * lost). Lexical state is set to YY_INITIAL. - * - * @param reader - * the new input stream - */ - public final void yyreset(java.io.Reader reader) throws java.io.IOException { - // 's' has been updated. - zzBuffer = s.array; - /* - * We replaced the line below with the two below it because zzRefill no longer "refills" the buffer (since the - * way we do it, it's always "full" the first time through, since it points to the segment's array). So, we - * assign zzEndRead here. - */ - // zzStartRead = zzEndRead = s.offset; - zzStartRead = s.offset; - zzEndRead = zzStartRead + s.count - 1; - zzCurrentPos = zzMarkedPos = s.offset; - zzLexicalState = YYINITIAL; - zzReader = reader; - zzAtEOF = false; - } + zzState = zzLexicalState; - /** - * Creates a new scanner There is also a java.io.InputStream version of this constructor. - * - * @param in - * the java.io.Reader to read input from. - */ - public TclTokenMaker(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Creates a new scanner. There is also java.io.Reader version of this constructor. - * - * @param in - * the java.io.Inputstream to read input from. - */ - public TclTokenMaker(java.io.InputStream in) { - this(new java.io.InputStreamReader(in)); - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed - * the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 160) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do - map[j++] = value; - while (--count > 0); - } - return map; - } - - /** - * Closes the input stream. - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ - zzEndRead = zzStartRead; /* invalidate buffer */ - - if (zzReader != null) - zzReader.close(); - } - - /** - * Returns the current lexical state. - */ - public final int yystate() { - return zzLexicalState; - } - - /** - * Enters a new lexical state - * - * @param newState - * the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } - - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos - * the position of the character to fetch. A value from 0 to yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } - - /** - * Returns the length of the matched text region. - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". If this method is called, something is seriously - * wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error fallback rules. - * - * @param errorCode - * the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } - - throw new Error(message); - } - - /** - * Pushes the specified amount of characters back into the input stream. - * - * They will be read again by then next call of the scanning method - * - * @param number - * the number of characters to be read again. This number must not be greater than yylength()! - */ - public void yypushback(int number) { - if (number > yylength()) - zzScanError(ZZ_PUSHBACK_2BIG); - - zzMarkedPos -= number; - } - - /** - * Resumes scanning until the next regular expression is matched, the end of input is encountered or an I/O-Error - * occurs. - * - * @return the next token - * @exception java.io.IOException - * if any I/O-Error occurs - */ - public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = zzLexicalState; - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) - break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) - break zzForAction; - } - - } - } - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 14: { - addToken(Token.RESERVED_WORD); - } - case 15: - break; - case 2: { - addToken(Token.IDENTIFIER); - } - case 16: - break; - case 13: { - addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); - } - case 17: - break; - case 11: { - addToken(Token.LITERAL_NUMBER_FLOAT); - } - case 18: - break; - case 4: { - addToken(Token.COMMENT_EOL); - addNullToken(); - return firstToken; - } - case 19: - break; - case 6: { - addToken(Token.WHITESPACE); - } - case 20: - break; - case 10: { - addToken(Token.ERROR_NUMBER_FORMAT); + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - case 21: - break; - case 1: { - addToken(Token.ERROR_IDENTIFIER); + else { + zzInput = zzBufferL[zzCurrentPosL++]; } - case 22: - break; - case 12: { - addToken(Token.LITERAL_NUMBER_HEXADECIMAL); - } - case 23: - break; - case 8: { - addToken(Token.OPERATOR); - } - case 24: - break; - case 3: { - addToken(Token.LITERAL_NUMBER_DECIMAL_INT); - } - case 25: - break; - case 7: { - addToken(Token.ERROR_STRING_DOUBLE); - addNullToken(); - return firstToken; - } - case 26: - break; - case 5: { - addNullToken(); - return firstToken; - } - case 27: - break; - case 9: { - addToken(Token.SEPARATOR); + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 14: + { addToken(Token.RESERVED_WORD); + } + case 15: break; + case 2: + { addToken(Token.IDENTIFIER); + } + case 16: break; + case 13: + { addToken(Token.LITERAL_STRING_DOUBLE_QUOTE); + } + case 17: break; + case 11: + { addToken(Token.LITERAL_NUMBER_FLOAT); + } + case 18: break; + case 4: + { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken; + } + case 19: break; + case 6: + { addToken(Token.WHITESPACE); + } + case 20: break; + case 10: + { addToken(Token.ERROR_NUMBER_FORMAT); + } + case 21: break; + case 1: + { addToken(Token.ERROR_IDENTIFIER); + } + case 22: break; + case 12: + { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); + } + case 23: break; + case 8: + { addToken(Token.OPERATOR); + } + case 24: break; + case 3: + { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); + } + case 25: break; + case 7: + { addToken(Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; + } + case 26: break; + case 5: + { addNullToken(); return firstToken; + } + case 27: break; + case 9: + { addToken(Token.SEPARATOR); + } + case 28: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + switch (zzLexicalState) { + case YYINITIAL: { + addNullToken(); return firstToken; } - case 28: - break; + case 242: break; default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - switch (zzLexicalState) { - case YYINITIAL: { - addNullToken(); - return firstToken; - } - case 242: - break; - default: - return null; - } - } - else { - zzScanError(ZZ_NO_MATCH); - } + return null; } - } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex new file mode 100755 index 000000000..9cc71982e --- /dev/null +++ b/tools/agent_debugger/src/main/java/org/fife/ui/rsyntaxtextarea/modes/TypeScriptTokenMaker.flex @@ -0,0 +1,951 @@ +/* + * 11/24/2015 + * + * This library is distributed under a modified BSD license. See the included + * LICENSE file for details. + */ +package org.fife.ui.rsyntaxtextarea.modes; + +import java.io.*; +import javax.swing.text.Segment; +import java.util.Stack; + +import org.fife.ui.rsyntaxtextarea.*; + + +/** + * Scanner for TypeScript files. Currently it is a clone of + * {@code JavaScriptTokenMaker}, but it should diverge over time to match + * the added features of TypeScript. + * + * This implementation was created using + * JFlex 1.4.1; however, the generated file + * was modified for performance. Memory allocation needs to be almost + * completely removed to be competitive with the handwritten lexers (subclasses + * of AbstractTokenMaker, so this class has been modified so that + * Strings are never allocated (via yytext()), and the scanner never has to + * worry about refilling its buffer (needlessly copying chars around). + * We can achieve this because RText always scans exactly 1 line of tokens at a + * time, and hands the scanner this line as an array of characters (a Segment + * really). Since tokens contain pointers to char arrays instead of Strings + * holding their contents, there is no need for allocating new memory for + * Strings.

                                    + * + * The actual algorithm generated for scanning has, of course, not been + * modified.

                                    + * + * If you wish to regenerate this file yourself, keep in mind the following: + *

                                      + *
                                    • The generated TypeScriptTokenMaker.java file will contain two + * definitions of both zzRefill and yyreset. + * You should hand-delete the second of each definition (the ones + * generated by the lexer), as these generated methods modify the input + * buffer, which we'll never have to do.
                                    • + *
                                    • You should also change the declaration/definition of zzBuffer to NOT + * be initialized. This is a needless memory allocation for us since we + * will be pointing the array somewhere else anyway.
                                    • + *
                                    • You should NOT call yylex() on the generated scanner + * directly; rather, you should use getTokenList as you would + * with any other TokenMaker instance.
                                    • + *
                                    + * + * @author Robert Futrell + * @version 0.9 + */ +%% + +%public +%class TypeScriptTokenMaker +%extends AbstractJFlexCTokenMaker +%unicode +%type org.fife.ui.rsyntaxtextarea.Token + + +%{ + + /** + * Token type specifying we're in a JavaScript multiline comment. + */ + private static final int INTERNAL_IN_JS_MLC = -8; + + /** + * Token type specifying we're in a JavaScript documentation comment. + */ + private static final int INTERNAL_IN_JS_COMMENT_DOCUMENTATION = -9; + + /** + * Token type specifying we're in an invalid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_INVALID = -10; + + /** + * Token type specifying we're in a valid multi-line JS string. + */ + private static final int INTERNAL_IN_JS_STRING_VALID = -11; + + /** + * Token type specifying we're in an invalid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_INVALID = -12; + + /** + * Token type specifying we're in a valid multi-line JS single-quoted string. + */ + private static final int INTERNAL_IN_JS_CHAR_VALID = -13; + + private static final int INTERNAL_E4X = -14; + + private static final int INTERNAL_E4X_INTAG = -15; + + private static final int INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION = -16; + + private static final int INTERNAL_IN_E4X_COMMENT = -17; + + private static final int INTERNAL_E4X_DTD = -18; + + private static final int INTERNAL_E4X_DTD_INTERNAL = -19; + + private static final int INTERNAL_E4X_ATTR_SINGLE = -20; + + private static final int INTERNAL_E4X_ATTR_DOUBLE = -21; + + private static final int INTERNAL_E4X_MARKUP_CDATA = -22; + + /** + * Token type specifying we're in a valid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID = -23; + + /** + * Token type specifying we're in an invalid multi-line template literal. + */ + private static final int INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID = -24; + + /** + * When in the JS_STRING state, whether the current string is valid. + */ + private boolean validJSString; + + /** + * Whether we're in an internal DTD. Only valid if in an e4x DTD. + */ + private boolean e4x_inInternalDtd; + + /** + * The previous e4x state. Only valid if in an e4x state. + */ + private int e4x_prevState; + + /** + * Whether e4x is being highlighted. + */ + private static boolean e4xSupported; + + /** + * Language state set on JS tokens. Must be 0. + */ + private static final int LANG_INDEX_DEFAULT = 0; + + /** + * Language state set on E4X tokens. + */ + private static final int LANG_INDEX_E4X = 1; + + private Stack varDepths; + + /** + * Constructor. This must be here because JFlex does not generate a + * no-parameter constructor. + */ + public TypeScriptTokenMaker() { + super(); + } + + + static { + e4xSupported = true; + } + + + /** + * Adds the token specified to the current linked list of tokens as an + * "end token;" that is, at zzMarkedPos. + * + * @param tokenType The token's type. + */ + private void addEndToken(int tokenType) { + addToken(zzMarkedPos,zzMarkedPos, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + * @see #addToken(int, int, int) + */ + private void addHyperlinkToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so, true); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int tokenType) { + addToken(zzStartRead, zzMarkedPos-1, tokenType); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param tokenType The token's type. + */ + private void addToken(int start, int end, int tokenType) { + int so = start + offsetShift; + addToken(zzBuffer, start,end, tokenType, so); + } + + + /** + * Adds the token specified to the current linked list of tokens. + * + * @param array The character array. + * @param start The starting offset in the array. + * @param end The ending offset in the array. + * @param tokenType The token's type. + * @param startOffset The offset in the document at which this token + * occurs. + */ + @Override + public void addToken(char[] array, int start, int end, int tokenType, int startOffset) { + super.addToken(array, start,end, tokenType, startOffset); + zzStartRead = zzMarkedPos; + } + + + /** + * Returns the closest {@link TokenTypes} "standard" token type for a given + * "internal" token type (e.g. one whose value is < 0). + */ + @Override + public int getClosestStandardTokenTypeForInternalType(int type) { + switch (type) { + case INTERNAL_IN_JS_MLC: + return TokenTypes.COMMENT_MULTILINE; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + return TokenTypes.COMMENT_DOCUMENTATION; + case INTERNAL_IN_JS_STRING_INVALID: + case INTERNAL_IN_JS_STRING_VALID: + case INTERNAL_IN_JS_CHAR_INVALID: + case INTERNAL_IN_JS_CHAR_VALID: + return TokenTypes.LITERAL_STRING_DOUBLE_QUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + return TokenTypes.LITERAL_BACKQUOTE; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + return TokenTypes.ERROR_STRING_DOUBLE; + } + return type; + } + + + /** + * {@inheritDoc} + */ + @Override + public String[] getLineCommentStartAndEnd(int languageIndex) { + return new String[] { "//", null }; + } + + + /** + * Returns the first token in the linked list of tokens generated + * from text. This method must be implemented by + * subclasses so they can correctly implement syntax highlighting. + * + * @param text The text from which to get tokens. + * @param initialTokenType The token type we should start with. + * @param startOffset The offset into the document at which + * text starts. + * @return The first Token in a linked list representing + * the syntax highlighted text. + */ + @Override + public Token getTokenList(Segment text, int initialTokenType, int startOffset) { + + resetTokenList(); + this.offsetShift = -text.offset + startOffset; + validJSString = true; + e4x_prevState = YYINITIAL; + e4x_inInternalDtd = false; + int languageIndex = LANG_INDEX_DEFAULT; + + // Start off in the proper state. + int state = YYINITIAL; + switch (initialTokenType) { + case INTERNAL_IN_JS_MLC: + state = JS_MLC; + break; + case INTERNAL_IN_JS_COMMENT_DOCUMENTATION: + state = JS_DOCCOMMENT; + start = text.offset; + break; + case INTERNAL_IN_JS_STRING_INVALID: + state = JS_STRING; + validJSString = false; + break; + case INTERNAL_IN_JS_STRING_VALID: + state = JS_STRING; + break; + case INTERNAL_IN_JS_CHAR_INVALID: + state = JS_CHAR; + validJSString = false; + break; + case INTERNAL_IN_JS_CHAR_VALID: + state = JS_CHAR; + break; + case INTERNAL_E4X: + state = E4X; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_INTAG: + state = E4X_INTAG; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION: + state = E4X_PI; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD: + state = E4X_DTD; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_DTD_INTERNAL: + state = E4X_DTD; + e4x_inInternalDtd = true; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_SINGLE: + state = E4X_INATTR_SINGLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_ATTR_DOUBLE: + state = E4X_INATTR_DOUBLE; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_E4X_MARKUP_CDATA: + state = E4X_CDATA; + languageIndex = LANG_INDEX_E4X; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID: + state = JS_TEMPLATE_LITERAL; + validJSString = true; + break; + case INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID: + state = JS_TEMPLATE_LITERAL; + validJSString = false; + break; + default: + if (initialTokenType<-1024) { // INTERNAL_IN_E4X_COMMENT - prevState + int main = -(-initialTokenType & 0xffffff00); + switch (main) { + default: // Should never happen + case INTERNAL_IN_E4X_COMMENT: + state = E4X_COMMENT; + break; + } + e4x_prevState = -initialTokenType&0xff; + languageIndex = LANG_INDEX_E4X; + } + else { // Shouldn't happen + state = Token.NULL; + } + } + + setLanguageIndex(languageIndex); + start = text.offset; + s = text; + try { + yyreset(zzReader); + yybegin(state); + return yylex(); + } catch (IOException ioe) { + ioe.printStackTrace(); + return new TokenImpl(); + } + + } + + + /** + * Returns whether e4x is being highlighted. + * + * @return Whether e4x is being highlighted. + * @see #setE4xSupported(boolean) + */ + public static boolean isE4xSupported() { + return e4xSupported; + } + + + /** + * Sets whether e4x should be highlighted. A repaint should be forced on + * all RSyntaxTextAreas editing JavaScript if this property + * is changed to see the difference. + * + * @param supported Whether e4x should be highlighted. + * @see #isE4xSupported() + */ + public static void setE4xSupported(boolean supported) { + e4xSupported = supported; + } + + + /** + * Refills the input buffer. + * + * @return true if EOF was reached, otherwise + * false. + */ + private boolean zzRefill() { + return zzCurrentPos>=s.offset+s.count; + } + + + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to YY_INITIAL. + * + * @param reader the new input stream + */ + public final void yyreset(Reader reader) { + // 's' has been updated. + zzBuffer = s.array; + /* + * We replaced the line below with the two below it because zzRefill + * no longer "refills" the buffer (since the way we do it, it's always + * "full" the first time through, since it points to the segment's + * array). So, we assign zzEndRead here. + */ + //zzStartRead = zzEndRead = s.offset; + zzStartRead = s.offset; + zzEndRead = zzStartRead + s.count - 1; + zzCurrentPos = zzMarkedPos = zzPushbackPos = s.offset; + zzLexicalState = YYINITIAL; + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + } + + +%} + +Whitespace = ([ \t\f]+) +LineTerminator = ([\n]) + +Letter = [A-Za-z] +NonzeroDigit = [1-9] +Digit = ("0"|{NonzeroDigit}) +HexDigit = ({Digit}|[A-Fa-f]) +OctalDigit = ([0-7]) +LetterOrDigit = ({Letter}|{Digit}) +EscapedSourceCharacter = ("u"{HexDigit}{HexDigit}{HexDigit}{HexDigit}) +NonSeparator = ([^\t\f\r\n\ \(\)\{\}\[\]\;\,\.\=\>\<\!\~\?\:\+\-\*\/\&\|\^\%\"\'\`]|"#"|"\\") +IdentifierStart = ({Letter}|"_"|"$") +IdentifierPart = ({IdentifierStart}|{Digit}|("\\"{EscapedSourceCharacter})) +JS_MLCBegin = "/*" +JS_DocCommentBegin = "/**" +JS_MLCEnd = "*/" +JS_LineCommentBegin = "//" +JS_IntegerHelper1 = (({NonzeroDigit}{Digit}*)|"0") +JS_IntegerHelper2 = ("0"(([xX]{HexDigit}+)|({OctalDigit}*))) +JS_IntegerLiteral = ({JS_IntegerHelper1}[lL]?) +JS_HexLiteral = ({JS_IntegerHelper2}[lL]?) +JS_FloatHelper1 = ([fFdD]?) +JS_FloatHelper2 = ([eE][+-]?{Digit}+{JS_FloatHelper1}) +JS_FloatLiteral1 = ({Digit}+"."({JS_FloatHelper1}|{JS_FloatHelper2}|{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2}))) +JS_FloatLiteral2 = ("."{Digit}+({JS_FloatHelper1}|{JS_FloatHelper2})) +JS_FloatLiteral3 = ({Digit}+{JS_FloatHelper2}) +JS_FloatLiteral = ({JS_FloatLiteral1}|{JS_FloatLiteral2}|{JS_FloatLiteral3}|({Digit}+[fFdD])) +JS_ErrorNumberFormat = (({JS_IntegerLiteral}|{JS_HexLiteral}|{JS_FloatLiteral}){NonSeparator}+) +JS_Separator = ([\(\)\{\}\[\]\]]) +JS_Separator2 = ([\;,.]) +JS_NonAssignmentOperator = ("+"|"-"|"<="|"^"|"++"|"<"|"*"|">="|"%"|"--"|">"|"/"|"!="|"?"|"<<"|">>"|"!"|"&"|"|"|"=="|":"|">>"|"~"|"||"|"&&"|"<<<"|">>>") +JS_AssignmentOperator = ("="|"-="|"*="|"/="|"|="|"&="|"^="|"+="|"%="|"<<="|">>="|">>>=") +JS_Operator = ({JS_NonAssignmentOperator}|{JS_AssignmentOperator}) +JS_Identifier = ({IdentifierStart}{IdentifierPart}*) +JS_ErrorIdentifier = ({NonSeparator}+) +JS_Regex = ("/"([^\*\\/]|\\.)([^/\\]|\\.)*"/"[gim]*) +JS_E4xAttribute = ("@"{Letter}{LetterOrDigit}*) + +JS_BlockTag = ("abstract"|"access"|"alias"|"augments"|"author"|"borrows"| + "callback"|"classdesc"|"constant"|"constructor"|"constructs"| + "copyright"|"default"|"deprecated"|"desc"|"enum"|"event"| + "example"|"exports"|"external"|"file"|"fires"|"global"| + "ignore"|"inner"|"instance"|"kind"|"lends"|"license"| + "link"|"member"|"memberof"|"method"|"mixes"|"mixin"|"module"| + "name"|"namespace"|"param"|"private"|"property"|"protected"| + "public"|"readonly"|"requires"|"return"|"returns"|"see"|"since"| + "static"|"summary"|"this"|"throws"|"todo"| + "type"|"typedef"|"variation"|"version") +JS_InlineTag = ("link"|"linkplain"|"linkcode"|"tutorial") +JS_TemplateLiteralExprStart = ("${") + +e4x_NameStartChar = ([\:A-Z_a-z]) +e4x_NameChar = ({e4x_NameStartChar}|[\-\.0-9]) +e4x_TagName = ({e4x_NameStartChar}{e4x_NameChar}*) +e4x_Identifier = ([^ \t\n<&;]+) +e4x_EndXml = ([;]) +e4x_EntityReference = ([&][^; \t]*[;]?) +e4x_InTagIdentifier = ([^ \t\n\"\'=\/>]+) +e4x_CDataBegin = ("") + +URLGenDelim = ([:\/\?#\[\]@]) +URLSubDelim = ([\!\$&'\(\)\*\+,;=]) +URLUnreserved = ({LetterOrDigit}|"_"|[\-\.\~]) +URLCharacter = ({URLGenDelim}|{URLSubDelim}|{URLUnreserved}|[%]) +URLCharacters = ({URLCharacter}*) +URLEndCharacter = ([\/\$]|{LetterOrDigit}) +URL = (((https?|f(tp|ile))"://"|"www.")({URLCharacters}{URLEndCharacter})?) + + +%state JS_STRING +%state JS_CHAR +%state JS_MLC +%state JS_DOCCOMMENT +%state JS_EOL_COMMENT +%state E4X +%state E4X_COMMENT +%state E4X_PI +%state E4X_DTD +%state E4X_INTAG +%state E4X_INATTR_DOUBLE +%state E4X_INATTR_SINGLE +%state E4X_CDATA +%state JS_TEMPLATE_LITERAL +%state JS_TEMPLATE_LITERAL_EXPR + +%% + + { + + // ECMA and TypeScript keywords + "break" | + "case" | + "catch" | + "class" | + "const" | + "continue" | + "debugger" | + "default" | + "delete" | + "do" | + "else" | + "export" | + "extends" | + "finally" | + "for" | + "function" | + "if" | + "import" | + "in" | + "instanceof" | + "module" | + "new" | + "super" | + "switch" | + "this" | + "throw" | + "try" | + "typeof" | + "var" | + "void" | + "while" | + "with" { addToken(Token.RESERVED_WORD); } + "return" { addToken(Token.RESERVED_WORD_2); } + + //e4X + "each" {if(e4xSupported){ addToken(Token.RESERVED_WORD);} else {addToken(Token.IDENTIFIER);} } + //JavaScript 1.7 + "let" { addToken(Token.RESERVED_WORD); } + // e4x miscellaneous + {JS_E4xAttribute} { addToken(isE4xSupported() ? Token.MARKUP_TAG_ATTRIBUTE : Token.ERROR_IDENTIFIER); } + + // TypeScript data types + "any" | + "boolean" | + "number" | + "string" | + + // Reserved ECMA keywords that represent types (older specs, 1-3) + "byte" | + "char" | + "double" | + "float" | + "int" | + "long" | + "short" { addToken(Token.DATA_TYPE); } + + // Reserved words, mostly from older standards + "abstract" | + "enum" | + "final" | + "goto" | + "implements" | + "interface" | + "native" | + "package" | + "private" | + "protected" | + "public" | + "static" | + "synchronized" | + "throws" | + "transient" | + "volatile" | + "null" { addToken(Token.RESERVED_WORD); } + + // Literals. + "false" | + "true" { addToken(Token.LITERAL_BOOLEAN); } + "NaN" | + "Infinity" { addToken(Token.RESERVED_WORD); } + + // Functions. + "eval" | + "parseInt" | + "parseFloat" | + "escape" | + "unescape" | + "isNaN" | + "isFinite" { addToken(Token.FUNCTION); } + + {LineTerminator} { addNullToken(); return firstToken; } + {JS_Identifier} { addToken(Token.IDENTIFIER); } + {Whitespace} { addToken(Token.WHITESPACE); } + + /* String/Character literals. */ + [\'] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_CHAR); } + [\"] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_STRING); } + [\`] { start = zzMarkedPos-1; validJSString = true; yybegin(JS_TEMPLATE_LITERAL); } + + /* Comment literals. */ + "/**/" { addToken(Token.COMMENT_MULTILINE); } + {JS_MLCBegin} { start = zzMarkedPos-2; yybegin(JS_MLC); } + {JS_DocCommentBegin} { start = zzMarkedPos-3; yybegin(JS_DOCCOMMENT); } + {JS_LineCommentBegin} { start = zzMarkedPos-2; yybegin(JS_EOL_COMMENT); } + + /* Attempt to identify regular expressions (not foolproof) - do after comments! */ + {JS_Regex} { + boolean highlightedAsRegex = false; + if (firstToken==null) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + else { + // If this is *likely* to be a regex, based on + // the previous token, highlight it as such. + Token t = firstToken.getLastNonCommentNonWhitespaceToken(); + if (RSyntaxUtilities.regexCanFollowInJavaScript(t)) { + addToken(Token.REGEX); + highlightedAsRegex = true; + } + } + // If it doesn't *appear* to be a regex, highlight it as + // individual tokens. + if (!highlightedAsRegex) { + int temp = zzStartRead + 1; + addToken(zzStartRead, zzStartRead, Token.OPERATOR); + zzStartRead = zzCurrentPos = zzMarkedPos = temp; + } + } + + /* Separators. */ + {JS_Separator} { addToken(Token.SEPARATOR); } + {JS_Separator2} { addToken(Token.IDENTIFIER); } + + /* Operators. */ + [\+]?"="{Whitespace}*"<" { + int start = zzStartRead; + int operatorLen = yycharat(0)=='+' ? 2 : 1; + int yylen = yylength(); // Cache before first addToken() invalidates it + //System.out.println("'" + yytext() + "': " + yylength() + ", " + (operatorLen+1)); + addToken(zzStartRead,zzStartRead+operatorLen-1, Token.OPERATOR); + if (yylen>operatorLen+1) { + //System.out.println((start+operatorLen) + ", " + (zzMarkedPos-2)); + addToken(start+operatorLen,zzMarkedPos-2, Token.WHITESPACE); + } + zzStartRead = zzCurrentPos = zzMarkedPos = zzMarkedPos - 1; + if (isE4xSupported()) { + // Scanning will continue with "<" as markup tag start + yybegin(E4X, LANG_INDEX_E4X); + } + // Found e4x (or syntax error) but option not enabled; + // Scanning will continue at "<" as operator + } + {JS_Operator} { addToken(Token.OPERATOR); } + + /* Numbers */ + {JS_IntegerLiteral} { addToken(Token.LITERAL_NUMBER_DECIMAL_INT); } + {JS_HexLiteral} { addToken(Token.LITERAL_NUMBER_HEXADECIMAL); } + {JS_FloatLiteral} { addToken(Token.LITERAL_NUMBER_FLOAT); } + {JS_ErrorNumberFormat} { addToken(Token.ERROR_NUMBER_FORMAT); } + + {JS_ErrorIdentifier} { addToken(Token.ERROR_IDENTIFIER); } + + /* Ended with a line not in a string or comment. */ + <> { addNullToken(); return firstToken; } + + /* Catch any other (unhandled) characters and flag them as bad. */ + . { addToken(Token.ERROR_IDENTIFIER); } + +} + + { + [^\n\\\"]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE); + addEndToken(INTERNAL_IN_JS_STRING_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_STRING_INVALID); + } + return firstToken; + } + \" { int type = validJSString ? Token.LITERAL_STRING_DOUBLE_QUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_STRING_DOUBLE); addNullToken(); return firstToken; } +} + + { + [^\n\\\']+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + \\ { /* Line ending in '\' => continue to next line. */ + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_CHAR); + addEndToken(INTERNAL_IN_JS_CHAR_INVALID); + } + return firstToken; + } + \' { int type = validJSString ? Token.LITERAL_CHAR : Token.ERROR_CHAR; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + \n | + <> { addToken(start,zzStartRead-1, Token.ERROR_CHAR); addNullToken(); return firstToken; } +} + + { + [^\n\\\$\`]+ {} + \\x{HexDigit}{2} {} + \\x { /* Invalid latin-1 character \xXX */ validJSString = false; } + \\u{HexDigit}{4} {} + \\u { /* Invalid Unicode character \\uXXXX */ validJSString = false; } + \\. { /* Skip all escaped chars. */ } + + {JS_TemplateLiteralExprStart} { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + start = zzMarkedPos-2; + if (varDepths==null) { + varDepths = new Stack(); + } + else { + varDepths.clear(); + } + varDepths.push(Boolean.TRUE); + yybegin(JS_TEMPLATE_LITERAL_EXPR); + } + "$" { /* Skip valid '$' that is not part of template literal expression start */ } + + \` { int type = validJSString ? Token.LITERAL_BACKQUOTE : Token.ERROR_STRING_DOUBLE; addToken(start,zzStartRead, type); yybegin(YYINITIAL); } + + /* Line ending in '\' => continue to next line, though not necessary in template strings. */ + \\ { + if (validJSString) { + addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } + \n | + <> { + if (validJSString) { + addToken(start, zzStartRead - 1, Token.LITERAL_BACKQUOTE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_VALID); + } + else { + addToken(start,zzStartRead - 1, Token.ERROR_STRING_DOUBLE); + addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); + } + return firstToken; + } +} + + { + [^\}\$\n]+ {} + "}" { + if (!varDepths.empty()) { + varDepths.pop(); + if (varDepths.empty()) { + addToken(start,zzStartRead, Token.VARIABLE); + start = zzMarkedPos; + yybegin(JS_TEMPLATE_LITERAL); + } + } + } + {JS_TemplateLiteralExprStart} { varDepths.push(Boolean.TRUE); } + "$" {} + \n | + <> { + // TODO: This isn't right. The expression and its depth should continue to the next line. + addToken(start,zzStartRead-1, Token.VARIABLE); addEndToken(INTERNAL_IN_JS_TEMPLATE_LITERAL_INVALID); return firstToken; + } +} + + { + // JavaScript MLC's. This state is essentially Java's MLC state. + [^hwf\n\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_MULTILINE); start = zzMarkedPos; } + [hwf] {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_MULTILINE); } + \* {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); addEndToken(INTERNAL_IN_JS_MLC); return firstToken; } +} + + { + [^hwf\@\{\n\<\*]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_DOCUMENTATION); start = zzMarkedPos; } + [hwf] {} + + "@"{JS_BlockTag} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "@" {} + "{@"{JS_InlineTag}[^\}]*"}" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_KEYWORD); start = zzMarkedPos; } + "{" {} + \n { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } + "<"[/]?({Letter}[^\>]*)?">" { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); addToken(temp,zzMarkedPos-1, Token.COMMENT_MARKUP); start = zzMarkedPos; } + \< {} + {JS_MLCEnd} { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.COMMENT_DOCUMENTATION); } + \* {} + <> { yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); addEndToken(INTERNAL_IN_JS_COMMENT_DOCUMENTATION); return firstToken; } +} + + { + [^hwf\n]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.COMMENT_EOL); addHyperlinkToken(temp,zzMarkedPos-1, Token.COMMENT_EOL); start = zzMarkedPos; } + [hwf] {} + \n | + <> { addToken(start,zzStartRead-1, Token.COMMENT_EOL); addNullToken(); return firstToken; } +} + + { + "" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(e4x_prevState); } + "-" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_E4X_COMMENT - e4x_prevState); return firstToken; } +} + + { + [^\n\?]+ {} + "?>" { yybegin(E4X); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } + "?" {} + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); addEndToken(INTERNAL_E4X_MARKUP_PROCESSING_INSTRUCTION); return firstToken; } +} + + { + [^\n\[\]<>]+ {} + "" { yybegin(YYINITIAL); addToken(start,zzStartRead+2, Token.COMMENT_MULTILINE); } + [^hwf\n\-]+ {} + {URL} { int temp=zzStartRead; addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addHyperlinkToken(temp,zzMarkedPos-1, Token.MARKUP_COMMENT); start = zzMarkedPos; } + [hwf] {} + "-->" { int temp = zzMarkedPos; addToken(start,zzStartRead+2, Token.MARKUP_COMMENT); start = temp; yybegin(prevState); } "-" {} - <> { addToken(start,zzStartRead-1, Token.COMMENT_MULTILINE); return firstToken; } + {LineTerminator} | + <> { addToken(start,zzStartRead-1, Token.MARKUP_COMMENT); addEndToken(INTERNAL_IN_XML_COMMENT - prevState); return firstToken; } } { [^\n\?]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } - "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.PREPROCESSOR); } + {LineTerminator} { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } + "?>" { yybegin(YYINITIAL); addToken(start,zzStartRead+1, Token.MARKUP_PROCESSING_INSTRUCTION); } "?" {} - <> { addToken(start,zzStartRead-1, Token.PREPROCESSOR); return firstToken; } + <> { addToken(start,zzStartRead-1, Token.MARKUP_PROCESSING_INSTRUCTION); return firstToken; } } { - [^\n>]+ {} - {LineTerminator} { addToken(start,zzStartRead-1, Token.FUNCTION); return firstToken; } - ">" { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.FUNCTION); } - <> { addToken(start,zzStartRead-1, Token.FUNCTION); return firstToken; } + [^\n\[\]<>]+ {} + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +